· 6 years ago · Jul 05, 2019, 12:48 PM
1def scan_telegram(self):
2 # print ('scan_telegram')
3 pre = self.t.request
4 dic_modifyables = {'STRATEGYNAME' : 'strategyName',
5 'STRATEGYCONDITION': 'strategyCondition',
6 'TIME': 'time',
7 'TARGET': 'target',
8 'TRALING': 'traling',
9 'TRALING_SL': 'traling_sl',
10 'SL': 'sl',
11 'INVESTMENT': 'investment',
12 'TREND_PERCENTAGE': 'trend_percentage',
13 'ISUSERTRADING': 'isUserTrading',
14 'ISTRADING': 'isTrading',
15 'TRALING_STARTED': 'traling_started',
16 'AUTOTRADING': 'autotrading'
17 }
18 dic_actions = {'*DATA*': '*DESPLIEGA LA DATA SYMBOL EN SYMBOL SETTINGS* \nEjemplo: `BREG,DATA,BTC/USDT`\n',
19 '*TRADING*': '*DESPLIEGA LA LISTA DE MERCADOS ACTIVOS EN SISTEMA EJEMPLO:* \n`BREG,TRADING`\n',
20 '*CAMBIO DE DATOS*': '*CAMBIO DE VALORE EN SYMBOL DATA*\nBREG,UPDATES,SIMBOLO,ELEMENTO DE CAMBIO, NUEVO VALOR\n `BREG,UPDATES,BTC/USDT,TIME,15`\n',
21 '*SELL*': '*VENTA AL MERCADO* \n`BREG,SELL,BTC/USDT`\n',
22 '*STOCKDATA*': '*CAMBIO DE VALORES EN STOCKDATA*, `BREG,STOCKDATA,SYMBOL,ATT (LOWER CASE),VALUE`\n',
23 'NEWKEYS': '*NEW KEYS PERMITE HACER UPDATE A LAS LLAVES DESDE FUERA* \n`BREG,NEW KEYS, APIKEY, SECRETKEY` \n',
24 'COLOCAR ORDENES': '*ACTIVA LA COLOCACION DE ORDENES EN EL SOFTWARE* \n`BREG,COLOCAR ORDENES,TRUE`\n',
25 'CONFIG':'*CAMBIA UN VALOR EN CONFIG FILE*, \n`BREG,CONFIG,entry_price,1265`\n',
26 'MARKET CHANGES':'*ENVIA LA LISTA DE MERCADOS AL ALZA*, \n`BREG,MARKETCHANGES,MARKET,BTC,PERDIFF,3`\n',
27 'CAMBIAR TARGET': '*CANCELARA LA ORDER ACTUAL Y GENERAR UNA NUEVA*, \n`BREG,CAMBIARTARGET,BTC/USDT,3`',
28 'GET': '*MUESTRA TODOS LOS MERCADOS QUE SE ENCUENTRAN CON EL INDICADOR ESPECIFICADO EN POSICION POSITIVA*, \n `BREG,GET,BTC,WILLIAMS`,\n OPCIONES PUEDEN SER \n _WILLIAMS\nSMA\nMACD_\n',
29 'BUY': '*FUERZA UNA COMPRA*\n`BREG,BUY,BTC/USDT`\n',
30 'ORDERS': '*MUESTRA LA LISTA DE POSICIONES ABIERTAS* \n`BREG,OPENORDERS`\n',
31 'CHANGE STRATEGY': 'CAMBIA LA ESTRATEGIA POR COMPLETO, \n`BREG,CHANGE STRATEGY,BTC/USDT, MIX`\nOPCIONES: _MIX, SIGNAL_\n',
32 'PRINT MARKET DATA': 'IMPRIME UNA VALOR DEL MERCADO QUE SE ENCUENTRA EN STOCKDATA, `BREG,PRINTMARKETDATA,BTC/USDT,att`\n',
33 'CONVERT BTC': 'CONVIERTE UNA CANTIDAD DE USDT A BTC\n`BREG,CONVERTBTC,1000`\n',
34 'CHECK ORDER': 'NOS PERMITE VERIFICAR EL ESTADO DE UNA ORDER DE BTC,\nBREG,CHECKORDER,BTC/USDT,123456(ORDER ID)\n',
35 'CANCELORDER': 'NOS PERMITE CANCELA UNA ORDEN DE FORMA MANUAL,\n BREG,CANCELORDER,BTC/USDT/123123'
36 }
37
38 if pre == self.t.request and pre != None:
39 for i in range(0,1):
40 try:
41 if len(self.t.request) > 1 and self.t.request[0].upper() == 'BREG' and self.t.isNewMessage == True:
42
43 # print ('last message in main {} '.format(self.t.request))
44
45 self.lastMessage = self.t.request
46 self.t.isNewMessage = False
47 if self.t.request[1].upper() == 'DATA':
48 list = ''
49 try:
50 for symbol in Main.symbol_data:
51 if symbol == self.t.request[2].upper():
52 data = (Main.symbol_data[symbol])
53 for i in data:
54 list += ('`{}` ---- > *{}* \n'.format(i, data[i]))
55 if list != '':
56 self.send_telegram_message(cm.removeUnderScore(list=list, remove='_'))
57 else:
58 self.send_telegram_message('EL MERCADO QUE BUSCAS NO EXITE `MODIFICA` |---> *{}*'.format(self.t.request[2]))
59 except Exception as e:
60 print ('MARKET QUE BUSCA NO EXISTE {}'.format(e))
61 elif self.t.request[1].upper() == 'TRADING':
62 self.system_active_markets()
63 elif self.t.request[1].upper() == 'SHOW':
64 new = '*ESTAS SON LAS OPCIONES QUE PUEDES CAMBIAR ... >*' + '\n\n'
65 for i in dic_modifyables:
66 new += dic_modifyables[i] + '\n'
67 # new = cm.removeUnderScore(new, remove='/')
68
69 new += '\n*ESTAS SON ACCIONES DIRECTAS QUE SE PUEDEN EJECUTAR DESDE TELEGRAM* \n\n'
70 for i in dic_actions:
71 new += dic_actions[i] + '\n'
72 self.send_telegram_message(cm.removeUnderScore(new, remove='_'))
73 elif self.t.request[1].upper() == 'SELL':
74 symbol = self.t.request[2].upper()
75 if symbol in StockData.symbol_list:
76 id = StockData.symbol_instance_dict[symbol].target_order_id
77 amount = StockData.symbol_instance_dict[symbol].sell_amount
78 if symbol in StockData.open_positions and \
79 StockData.symbol_instance_dict[symbol].buy_order_filled:
80 self.fdb.cancel_order(symbol, id)
81 time.sleep(3)
82 StockData.symbol_instance_dict[symbol].target_order_id = \
83 new_order_id = self.fdb.place_market_sell_order(symbol, amount)
84 if new_order_id is not None:
85 StockData.symbol_instance_dict[symbol].target_order_id = new_order_id
86 self.dbon.update_one(table='BREG_TRADE_GOING', symbol=symbol, \
87 UpdateName='target_order_id', UpdateValue=int(new_order_id), \
88 LookforName='symbol', LookforValue=symbol)
89 else:
90 for i in range(0,3):
91 self.send_telegram_message('{} \n ORDER PUEDE ESTAR CANCELDA PERO NO SE VENDIO AL MERCADO !!!'.format(symbol))
92 time.sleep(0.5)
93 else:
94 self.send_telegram_message('{} PARECE NO EXISTIR EN LAS BASES DE DATOS DE BREG'.format(symbol))
95 elif self.t.request[1].upper() == 'STOCKDATA':
96 try:
97 symbol = self.t.request[2].upper()
98 att = self.t.request[3]
99 getType = type(getattr(StockData.symbol_instance_dict[symbol], att))
100 pre = (getattr(StockData.symbol_instance_dict[symbol], att))
101 if getattr(StockData.symbol_instance_dict[symbol], att) == None:
102 value = (self.t.request[4])
103 else:
104 value = getType(self.t.request[4])
105
106 if getType == bool:
107 if self.t.request[3][0].upper() == 'T':
108 value = True
109 else:
110 value = False
111 setattr(StockData.symbol_instance_dict[symbol], att, value)
112 print ('symbolo modificado {} Valor anterior {} valor actual {}'.format(symbol, pre, (getattr(StockData.symbol_instance_dict[symbol], att))))
113 except Exception as e:
114 self.send_telegram_message ('EL ATT QUE QUIERES CAMBIAR NO ES MODIFICABLE {}'.format(e))
115 elif self.t.request[1].upper() == 'NEWKEYS':
116 print ('new keys update')
117 with open('keys.json', 'r') as f:
118 data = json.loads(f.read())
119 f.close()
120 data['api_key'] = self.t.request[2]
121 data['api_secret'] = self.t.request[3]
122
123 with open('keys.json', 'w') as outfile:
124 #for i in new:
125 str_ = json.dumps(data,
126 indent=4,
127 separators=(',', ': '),
128 ensure_ascii=False)
129 outfile.write(to_unicode(str_))
130 elif self.t.request[1].upper() == 'UPDATES':
131 '''
132 # XXX:
133 breg,updates,btc/usdt,time,15
134 '''
135
136 for i in range(0,1):
137 try:
138 symbol = self.t.request[2].upper()
139 to_change = self.t.request[3].upper()
140 getType = type(Main.symbol_data[symbol][dic_modifyables[to_change]])
141 value = getType(self.t.request[4])
142
143 if getType == bool:
144 if self.t.request[4] == '1':
145 value = True
146 elif self.t.request[4] == '0':
147 value = False
148 try:
149 self.modify_symbol_data(symbol=symbol, to_change=[dic_modifyables[to_change]], value=[value])
150 print (dic_modifyables[to_change], value)
151 self.send_telegram_message(cm.removeUnderScore(list='{} VALUE HAS BEEN CHANGED TO {}'.format(dic_modifyables[to_change], value), remove='_'))
152 except Exception as e:
153 print ('EL VALOR QUE QUIERES CAMBIAR NO ES MODIFICABLE {} \nENVIA BREG,DATA,BTC/USDT \nY PODRAS VER LOS DATOS QUE PUEDES CAMBIAR'.format(e))
154 except Exception as e:
155 self.send_telegram_message('`{}` NO SE ENCUETRA EN NUESTRO SISTEMA'.format(e))
156 continue
157 elif self.t.request[1].upper() == 'COLOCARORDENES':
158 with open('config.json', 'r') as f:
159 config_data = json.loads(f.read())
160 f.close()
161
162 try:
163 if self.t.request[2][0].upper() == 'T':
164 value = True
165 else:
166 value = False
167
168 config_data['place_orders'] = value
169
170
171 with open('config.json', 'w') as outfile:
172 #for i in new:
173 str_ = json.dumps(config_data,
174 indent=4,
175 separators=(',', ': '),
176 ensure_ascii=False)
177 outfile.write(to_unicode(str_))
178 f.close()
179 self.send_telegram_message('TU SERVIDOR ESTA AHORA ACTIVO ...!!! :)')
180 except Exception as e:
181 pass
182
183
184
185 config_data = {}
186 elif self.t.request[1].upper() == 'CONFIG':
187 config_data = {}
188 with open('config.json', 'r') as f:
189 config_data = json.loads(f.read())
190 f.close()
191 try:
192 name = self.t.request[2]
193 getType = type(config_data[name])
194 value = getType(self.t.request[3])
195
196
197 if getType == bool:
198 if self.t.request[3] == '1':
199 value = True
200 elif self.t.request[3] == '0':
201 value = False
202
203 config_data[name] = value
204
205
206 with open('config.json', 'w') as outfile:
207 #for i in new:
208 str_ = json.dumps(config_data,
209 indent=4,
210 separators=(',', ': '),
211 ensure_ascii=False)
212 outfile.write(to_unicode(str_))
213 f.close()
214 self.send_telegram_message('SE HA CAMBIADO {} A {}'.format(name, value))
215 except Exception as e:
216 self.send_telegram_message('NO SE PUDO CAMBIAR EL VALOR EN CONFIG\n`SE SUGIERE REVISAR LA GRAMATICA`')
217 config_data = {}
218 elif self.t.request[1].upper() == 'MARKETCHANGES':
219 per_diff = 0
220 asset = None
221 try:
222 if self.t.request[2].upper() == 'MARKET':
223 asset = self.t.request[3].upper()
224 except Exception as e:
225 Main.print_error(id='M_ST12001', error=e, requested_by='MARKET CHANGES, MARKET NOT FOUND')
226 asset = 'BTC'
227
228 try:
229 if self.t.request[4].upper() == 'PERDIFF':
230 per_diff = float(self.t.request[5])
231 except Exception as e:
232 Main.print_error(id='M_ST12002', error=e, requested_by='MARKET CHANGES, PER_DIFF NOT SET')
233 per_diff = 3
234
235 self.t.main.get_on_trend_symbol_list(asset=asset, per_diff=per_diff, t_request=True)
236 elif self.t.request[1].upper() == 'CAMBIARTARGET':
237 symbol = self.t.request[2].upper()
238 if symbol in StockData.symbol_list:
239 id = StockData.symbol_instance_dict[symbol].target_order_id
240 if symbol in StockData.open_positions and \
241 StockData.symbol_instance_dict[symbol].buy_order_filled:
242 target, cancelled, deleted, newOrderFilled = False, False, False, False
243 try:
244
245 target = True
246 self.modify_symbol_data(symbol=symbol, to_change=['target'], value=[value])
247 cancelled = True
248 self.fdb.cancel_order(symbol, id)
249 time.sleep(1.5)
250 deleted = True
251 self.dbon.deleterow(table='BREG_TRADE_GOING', order=symbol)
252 time.sleep(1.5)
253 StockData.symbol_instance_dict[symbol].target_order_id = '123456789'
254 self.buy_order_filled(symbol)
255 newOrderFilled = True
256 value = float(self.t.request[3])
257 self.send_telegram_message('SE HA MODIFICADO EL TARGET DE LA ORDEN {} A {}'.format())
258 except Exception as e:
259 self.send_telegram_message ('LA ORDEN NO HA SIDO MODIFICADA\nmodificada {}\ncancelada {}\ndeleted {}\newOrderFilled'.format(e,target, cancelled, deleted, newOrderFilled))
260
261 else:
262 self.send_telegram_message('{} PARECE NO EXISTIR EN LAS BASES DE DATOS DE BREG'.format(symbol))
263 elif self.t.request[1].upper() == 'GET':
264 asset = None
265 getName = None
266 try:
267 if self.t.request[2].upper() == 'BTC' or self.t.request[2].upper() == 'USDT':
268 asset = self.t.request[2].upper()
269 except Exception as e:
270 Main.print_error(id='M_GET12001', error=e, requested_by='GET MARKET DID NOT WORK')
271 self.send_telegram_message('EL MERCADO QUE BUSCAS NO EXISTE Y TE DARA LA INFORMACION DE *BTC*')
272 asset = 'BTC'
273
274 try:
275 if self.t.request[3].upper() == 'WILLIAMS' or self.t.request[2].upper() == 'SMA' or self.t.request[2].upper() == 'MACD':
276 getName = self.t.request[3].upper()
277 except Exception as e:
278 Main.print_error(id='M_GET12001', error=e, requested_by='GET INDICATOR DID NOT WORK')
279 self.send_telegram_message('EL MERCADO QUE BUSCAS NO EXISTE Y TE DARA LA INFORMACION DE *BTC*')
280 getName = 'MACD'
281
282 self.t.main.getName = getName
283 self.t.main.getAsset = asset
284 self.t.main.get = True
285 elif self.t.request[1].upper() == 'BUY':
286 symbol = self.t.request[2].upper()
287 try:
288 if symbol in StockData.open_positions:
289 self.send_telegram_message('NO SE PUEDE FORZAR LA ORDEN PORQUE YA EXISTE UNA ORDEN ABIERTA EN EL SISTEMA')
290 if symbol in StockData.symbol_list:
291 try:
292 df = StockData.symbol_instance_dict[symbol].df
293 if df == None:
294 Main.symbol_data[symbol]['isUserTrading'], Main.symbol_data[symbol]['isTrading'] = True, True
295 self.fetch_kline(symbol)
296 df = StockData.symbol_instance_dict[symbol].df
297
298 except Exception as e:
299 Main.symbol_data[symbol]['isUserTrading'], Main.symbol_data[symbol]['isTrading'] = True, True
300 self.fetch_kline(symbol)
301 df = StockData.symbol_instance_dict[symbol].df
302
303 df = self.get_new_df(symbol, df)
304 self.set_buying_conditions(symbol)
305 self.check_confirmed_signal(df, symbol)
306 self.send_telegram_message('SE ESTA FORZANDO UNA COMPRA MANUAL \nSE SUGIERA VERIFICAR ISTRADING TO TRUE')
307 else:
308 self.send_telegram_message('EL MERCADO QUE QUIERES FORZAR LA COMPRA NO ESTA EN LA LISTA DE TRADING')
309 except Exception as e:
310 Main.print_error(id='M_BUY12001', error=e, requested_by='BUY')
311 elif self.t.request[1].upper() == 'ORDERS':
312 orders = '*LISTA DE POSICIONES ABIERTAS* \n\nMARKET STOCK ID DB ID'
313 if len(StockData.open_positions):
314 for symbol in StockData.open_positions:
315 current_order_id = self.dbon._query_values_by_symbol(table='BREG_TRADE_GOING', symbol=symbol, data=[0])
316 orders += '{} {} {} \n'.format(symbol, StockData.symbol_instance_dict[symbol].target_id, current_order_id)
317 self.send_telegram_message(orders)
318 else:
319 self.send_telegram_message(orders + 'NONE')
320
321
322 elif self.t.request[1].upper() == 'CHANGESTRATEGY':
323 symbol = self.t.request[2].upper()
324 message = 'LA ESTRATEGIA PARA EL MERCADO {} HA SIDO MODIFICADO A {}'.format(self.t.request[3])
325 if self.t.request[3].upper() == 'MIX':
326 Main.symbol_data[symbol]['strategyName'] = 'mixlong'
327 Main.symbol_data[symbol]['strategyCondition'] = 'macdstorsi'
328 self.send_telegram_message(message)
329 elif self.t.request[3].upper() == 'SIGNAL':
330 Main.symbol_data[symbol]['strategyName'] = 'signal'
331 Main.symbol_data[symbol]['strategyCondition'] = 'ac'
332 self.send_telegram_message(message)
333
334 else:
335 self.send_telegram_message('LA ESTRATEGIA {} NO ESTA DISPONIBLE'.format(self.t.request[3]))
336 self.save_changes()
337 elif self.t.request[1].upper() == 'PRINTSTOCKDATA':
338 symbol = self.t.request[2].upper()
339 att = self.t.request[3]
340 try:
341 self.send_telegram_message('{} TIENE COMO ATRIBUTO {} EL VALOR {}'.format(symbol, att, (getattr(StockData.symbol_instance_dict[symbol], att))))
342 except Exception as e:
343 self.send_telegram_message('TENEMOS EL SIGUIENTE PROBLEMA \n{}'.format(e))
344 elif self.t.request[1].upper() == 'CONVERTBTC':
345 # NOTE: breg,convertbtc,1000
346 symbol = 'BTC/USDT'
347 preInvesment = Main.symbol_data[symbol]['investment']
348 Main.symbol_data[symbol]['investment'] = float(self.t.request[2])
349 last_price = data['BTC/USDT']['info']['askPrice']
350 amount = self.decide_buy_quantity_entry(symbol, float(last_price))
351 amount = cm.price_myround_down(amount, base=StockData.symbol_instance_dict[symbol].min_quantity)
352 Main.symbol_data[symbol]['autotrading'] = False
353 Main.symbol_data[symbol]['investment'] = preInvesment
354 self.save_changes()
355 order_id = self.fdb.place_limit_buy_order(symbol=symbol, amount=amount, price=last_price)
356 self.send_telegram_message('YOUR ORDER ID IS `{}`\nPARA REVISAR ESTA ORDEN ENVIA\n`BREG,CHECKORDER,{}`'.format(order_id, order_id))
357 elif self.t.request[1].upper() == 'CHECKORDER':
358 # NOTE: breg,checkorder,btc/usdt,123456
359
360 report = 'EL ESTADO DE LA ORDEN ES: \n'
361 symbol = self.t.request[2].upper()
362 target_id = self.t.request[3]
363 status = self.fdb.order_status(symbol, target_id)
364 try:
365 if status is not None:
366 filled = status['filled']
367 amount = status['amount']
368 else:
369 self.send_telegram_message('ORDEN {} NO EXISTE POR FAVOR VERIFIQUE EL NUMERO'.format(target_id))
370 break
371
372 if status['status'].lower() == 'closed' and status['info']['status'].lower() == 'filled':
373 report += 'TU ORDEN HA SIDO `COMPLETADA` \n CUENTAS CON {} BTC PARA TRABAJAR'.format(str(status['amount']))
374 elif status['status'].lower() == 'open' and status['info']['status'].lower() == 'new':
375 if status['filled'] > 0:
376 report += '`PARCIALMENTE` COMPLETA TIENES {} DE {}\n\nSI DESEAS CANCELAR LA ORDEN PUEDES ENVIAR\nBREG,'.format(status['filled'], status['remaining'])
377 self.send_telegram_message(report)
378 elif status['filled'] == 0:
379 report += 'LA ORDEN ESTA A 0\n\nSI DESEAS CANCELAR LA ORDEN PUEDES ENVIAR\n`BREG,CANCELORDER,BTC/USDT,12312313`'
380 self.send_telegram_message(report)
381
382 except Exception as e:
383 raise
384 elif self.t.request[1].upper() == 'CANCELORDER':
385 # NOTE: breg,cancelorder,symbol,id
386 symbol = self.t.request[2]
387 id = self.t.request[3]
388 try:
389 self.fdb.cancel_order(symbol, id)
390 self.send_telegram_message('ORDEN {} HA SIDO CANCELADA\nSI QUIERES CONFIRMAR EL STATUS ENVIA\n`BREG,CHECKORDER,{},{}`'.format(symbol,id))
391 except Exception as e:
392 raise
393
394
395
396
397 else:
398 self.send_telegram_message('*POR FAVOR REVISA EL FORMATO DE TU REQUEST....>*')
399 except Exception as e:
400 print (e)
401 continue