Skip to content

Commit

Permalink
Add cryptocurrency parameter in matrix callback #7
Browse files Browse the repository at this point in the history
  • Loading branch information
Herklos committed Jan 8, 2020
1 parent 301daea commit eb06b97
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 12 deletions.
3 changes: 2 additions & 1 deletion demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,11 @@ async def matrix_callback(evaluator_name,
eval_note,
eval_note_type,
exchange_name,
cryptocurrency,
symbol,
time_frame):
logging.info(f"MATRIX : EXCHANGE = {exchange_name} || EVALUATOR = {evaluator_name} ||"
f" SYMBOL = {symbol} || TF = {time_frame} || NOTE = {eval_note}")
f" CRYPTOCURRENCY = {cryptocurrency} || SYMBOL = {symbol} || TF = {time_frame} || NOTE = {eval_note}")


async def create_evaluators_channel():
Expand Down
21 changes: 15 additions & 6 deletions octobot_evaluators/channels/matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,11 @@ async def send(self,
eval_note,
eval_note_type=EVALUATOR_EVAL_DEFAULT_TYPE,
exchange_name=None,
cryptocurrency=CHANNEL_WILDCARD,
symbol=CHANNEL_WILDCARD,
time_frame=None):
for consumer in self.channel.get_filtered_consumers(symbol=symbol,
for consumer in self.channel.get_filtered_consumers(cryptocurrency=cryptocurrency,
symbol=symbol,
time_frame=time_frame,
evaluator_type=evaluator_type,
evaluator_name=evaluator_name,
Expand All @@ -58,18 +60,20 @@ async def send(self,
"eval_note": eval_note,
"eval_note_type": eval_note_type,
"exchange_name": exchange_name,
"cryptocurrency": cryptocurrency,
"symbol": symbol,
"time_frame": time_frame
})

async def send_eval_note(self, evaluator_name, evaluator_type, eval_note, eval_note_type,
exchange_name=None, symbol=None, time_frame=None):
exchange_name=None, cryptocurrency=None, symbol=None, time_frame=None):
Matrix.instance().set_tentacle_value(
value_type=eval_note_type,
value=eval_note,
value_path=get_tentacle_path(exchange_name=exchange_name,
tentacle_type=evaluator_type,
tentacle_name=evaluator_name) + get_tentacle_value_path(symbol=symbol,
tentacle_name=evaluator_name) + get_tentacle_value_path(cryptocurrency=cryptocurrency,
symbol=symbol,
time_frame=time_frame)
)

Expand All @@ -78,6 +82,7 @@ async def send_eval_note(self, evaluator_name, evaluator_type, eval_note, eval_n
eval_note=eval_note,
eval_note_type=eval_note_type,
exchange_name=exchange_name,
cryptocurrency=cryptocurrency,
symbol=symbol,
time_frame=time_frame)

Expand All @@ -87,6 +92,7 @@ class MatrixChannel(Channel):
PRODUCER_CLASS = MatrixChannelProducer
CONSUMER_CLASS = MatrixChannelConsumer

CRYPTOCURRENCY_KEY = "cryptocurrency"
SYMBOL_KEY = "symbol"
TIME_FRAME_KEY = "time_frame"
EVALUATOR_TYPE_KEY = "evaluator_type"
Expand All @@ -100,26 +106,30 @@ def __init__(self):
async def new_consumer(self,
callback: object,
size=0,
cryptocurrency=CHANNEL_WILDCARD,
symbol=CHANNEL_WILDCARD,
evaluator_name=CHANNEL_WILDCARD,
evaluator_type=CHANNEL_WILDCARD,
exchange_name=CHANNEL_WILDCARD,
time_frame=CHANNEL_WILDCARD,
filter_size=False):
await self.__add_new_consumer_and_run(MatrixChannelConsumer(callback, size=size, filter_size=filter_size),
cryptocurrency=cryptocurrency,
symbol=symbol,
evaluator_name=evaluator_name,
evaluator_type=evaluator_type,
exchange_name=exchange_name,
time_frame=time_frame)

def get_filtered_consumers(self,
cryptocurrency=CHANNEL_WILDCARD,
symbol=CHANNEL_WILDCARD,
evaluator_type=CHANNEL_WILDCARD,
time_frame=CHANNEL_WILDCARD,
evaluator_name=CHANNEL_WILDCARD,
exchange_name=CHANNEL_WILDCARD):
return self.get_consumer_from_filters({
self.CRYPTOCURRENCY_KEY: cryptocurrency,
self.SYMBOL_KEY: symbol,
self.TIME_FRAME_KEY: time_frame,
self.EVALUATOR_TYPE_KEY: evaluator_type,
Expand All @@ -128,15 +138,14 @@ def get_filtered_consumers(self,
})

async def __add_new_consumer_and_run(self, consumer,
cryptocurrency=CHANNEL_WILDCARD,
symbol=CHANNEL_WILDCARD,
evaluator_name=CHANNEL_WILDCARD,
evaluator_type=CHANNEL_WILDCARD,
exchange_name=CHANNEL_WILDCARD,
time_frame=None):
if symbol:
symbol = CHANNEL_WILDCARD

consumer_filters: dict = {
self.CRYPTOCURRENCY_KEY: cryptocurrency,
self.SYMBOL_KEY: symbol,
self.TIME_FRAME_KEY: time_frame,
self.EVALUATOR_NAME_KEY: evaluator_name,
Expand Down
4 changes: 2 additions & 2 deletions octobot_evaluators/data/matrix.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ cdef class Matrix(Singleton):
cpdef list get_node_children_at_path(self, list node_path, EventTreeNode starting_node=*)
cpdef EventTreeNode get_node_at_path(self, list node_path, EventTreeNode starting_node=*)
cpdef list get_tentacle_nodes(self, str exchange_name=*, object tentacle_type=*, str tentacle_name=*)
cpdef list get_tentacles_value_nodes(self, list tentacle_nodes, str symbol=*, str time_frame=*)
cpdef list get_tentacles_value_nodes(self, list tentacle_nodes, str cryptocurrency=*, str symbol=*, str time_frame=*)

cpdef list get_tentacle_path(str exchange_name=*, object tentacle_type=*, str tentacle_name=*)
cpdef list get_tentacle_value_path(str symbol=*, str time_frame=*)
cpdef list get_tentacle_value_path(str cryptocurrency=*, str symbol=*, str time_frame=*)
11 changes: 8 additions & 3 deletions octobot_evaluators/data/matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,18 @@ def get_tentacle_nodes(self, exchange_name=None, tentacle_type=None, tentacle_na
tentacle_type=tentacle_type,
tentacle_name=tentacle_name))

def get_tentacles_value_nodes(self, tentacle_nodes, symbol=None, time_frame=None):
def get_tentacles_value_nodes(self, tentacle_nodes, cryptocurrency=None, symbol=None, time_frame=None):
"""
Returns the list of nodes related to the symbol and / or time_frame from the given tentacle_nodes list
:param tentacle_nodes: the exchange name to search for in the matrix
:param cryptocurrency: the cryptocurrency to search for in the given node list
:param symbol: the symbol to search for in the given node list
:param time_frame: the time frame to search for in the given nodes list
:return: nodes linked to the given params
"""
return [node_at_path for node_at_path in [
self.get_node_at_path(get_tentacle_value_path(symbol=symbol,
self.get_node_at_path(get_tentacle_value_path(cryptocurrency=cryptocurrency,
symbol=symbol,
time_frame=time_frame),
starting_node=n)
for n in tentacle_nodes
Expand All @@ -91,14 +93,17 @@ def get_tentacle_path(exchange_name=None, tentacle_type=None, tentacle_name=None
return node_path


def get_tentacle_value_path(symbol=None, time_frame=None) -> list:
def get_tentacle_value_path(cryptocurrency=None, symbol=None, time_frame=None) -> list:
"""
Returns the path related to symbol and / or time_frame values
:param cryptocurrency: the cryptocurrency to add in the path, ignored if None
:param symbol: the symbol to add in the path, ignored if None
:param time_frame: the time frame to add in the path, ignored if None
:return: a list of string that represents the path of the given params
"""
node_path: list = []
if cryptocurrency is not None:
node_path.append(cryptocurrency)
if symbol is not None:
node_path.append(symbol)
if time_frame is not None:
Expand Down
1 change: 1 addition & 0 deletions octobot_evaluators/evaluator/strategy_evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ async def matrix_callback(self,
eval_note,
eval_note_type,
exchange_name,
cryptocurrency,
symbol,
time_frame):
# To be used to trigger an evaluation
Expand Down
1 change: 1 addition & 0 deletions tests/channels/test_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ async def matrix_callback(evaluator_name,
eval_note,
eval_note_type,
exchange_name,
cryptocurrency,
symbol,
time_frame):
pass
Expand Down

0 comments on commit eb06b97

Please sign in to comment.