def GravaConfigTP(email, contatipo): contareal = False if contatipo == Idioma.traducao('Real'): contareal = True roboCtrl.instance().robo.saveConfigTP(email, contareal) cf = roboCtrl.instance().robo.loadConfig() roboCtrl.instance().robo.setConfig(cf)
def cancelProxSinal(self, operation, gale=0): if roboCtrl.instance().robo.usarsoros: time.sleep(2) try: B = operation dhInic = operation.hourOrig if gale == 0: dhTerm = operation.expirationDate elif gale == 1: dhTerm = operation.expirationGale1 else: dhTerm = operation.expirationGale2 for sinal in roboCtrl.instance().operContrl.agenda: if sinal.programmedHour >= dhInic: if sinal.programmedHour <= dhTerm: if sinal.op_id != operation.op_id: if not sinal.situacao == Idioma.traducao( 'Aguardando'): if sinal.situacao == Idioma.traducao( 'Agendado'): pass Agenda.cancelId(sinal.op_id) msg = 'ID:{0} {1} {2} Cancelado Sobreposto'.format( sinal.op_id, sinal.pair, sinal.programmedHour.strftime('%H:%M:%S')) A.warning(msg) print(msg) self.atualizarTela() except Exception as e: try: A.error(e) finally: e = None del e
def validarEditsNumeros(editname: str, values): try: if len(values[editname]): if values[editname][(-1)] not in '0123456789.': roboCtrl.instance().view.janela[editname].update( values[editname][:-1]) except: pass
def buy_gale2(self, operation, loopgale: bool = False): B = operation if P(B.gale2.replace(Q, K).replace(R, K)) == 0: A.warning('ID:{} GALE2 Desligado {}', B.op_id, B.pair) return valor = B.gale2 if loopgale: if roboCtrl.instance().robo.usarsoros: valor = BL.instance().sorosgale.valor_entrada else: if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.calcValorEntrada(B.payout) if BL.instance().sorosgale.valor_entrada > 0: if roboCtrl.instance().robo.qtdgales < 2: A.warning('ID:{} GALE2 Desligado {}', B.op_id, B.pair) return valor = BL.instance().sorosgale.valor_entrada if roboCtrl.instance().robo.percwinpos > 0: if roboCtrl.instance().robo.ultrapassoustopwin: valor = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, valor) if self.stop_operation(B, float(valor)): return if B.idIQgale2 > 0: A.error('ID:{} GALE2 Entrada Repetida Cancelada Cod: {}', B.op_id, B.idIQgale1) return S, C, tx = E.C(B, valor) if S: B.idIQgale2 = C if B.typepair == 'D': tipoent = 'Digital' else: tipoent = 'Binaria' A.debug( 'ID:{} GALE2 {} {}M Payout {} {} {} ${} Cod: {} criada com sucesso', B.op_id, B.pair, B.expirationMode, B.payout, tipoent, B.direction, round(float(valor), 2), C) roboCtrl.instance().operContrl.calculoTotal(B.op_id, 'Gale 2') self.atualizarTela() self.docancelProxSinal(B, 2) check, vret2 = self.resultIQ(B, C, 2) if check: if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.execute(vret2) if not vret2 == 0 or B.typepair != 'D': self.buy_gale2(B) else: if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.valor_lucro = 0 msg = 'ID:{0} GALE2 {1} ${2} - {3} {4}'.format( B.op_id, B.pair, round(float(valor), 2), Idioma.traducao('Resposta IQ:'), C) A.error(msg) print(msg)
def C(operations): FT = '%H:%M:%S' FD = '%d/%m/%y %H:%M:%S' roboCtrl.instance().operContrl.agenda = E.G(operations, roboCtrl.instance().robo.delay) B.clear() for A in roboCtrl.instance().operContrl.agenda: dhexpira = A.expirationDate - timedelta(seconds=35) B.every().days.at(A.programmedHour.strftime(FT)).do(G().dooperation, A).tag('agendaID' + str(A.op_id)) D.info('ID {}: {} | {} | {} | {}M', A.op_id, A.programmedHour.strftime(FD), A.pair, A.direction.upper(), A.expirationMode) B.every().days.at(A.pre_order.strftime(FT)).do(F.D, roboCtrl.instance().robo.manterConta, roboCtrl.instance().robo.tendusar, roboCtrl.instance().robo.tendvelas, roboCtrl.instance().robo.tendemasma, roboCtrl.instance().robo.priorid, A).tag('agendaPreID' + str(A.op_id)) B.every().days.at(dhexpira.strftime(FT)).do(VerifConnection).tag('agendaCnxID' + str(A.op_id))
def resultIQ(self, operation, id, gale): B = operation if gale == 1: vgale = 'Gale1' dhExp = B.expirationGale1 elif gale == 2: vgale = 'Gale2' dhExp = B.expirationGale2 else: vgale = '' dhExp = B.expirationDate check, win = E.D(id, B.typepair, dhExp) if check: win = round(win, 2) BL.instance().actual_balance = BL.instance().actual_balance + win if win > 0: msg = 'ID:{0} {1} {2} Payout {3} Cod:{4} WIN ${5}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), id, win) A.success(msg) msg = 'ID:{0} {1} {2} Payout {3} WIN ${4}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), win) print(msg) if gale == 0: roboCtrl.instance().operContrl.calculoTotal( B.op_id, 'Win', win) else: roboCtrl.instance().operContrl.calculoTotal( B.op_id, 'Win ' + vgale, 0, win) elif win < 0 or B.typepair == 'D': msg = 'ID:{0} {1} {2} Payout {3} Cod:{4} LOSS ${5}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), id, win) A.error(msg) msg = 'ID:{0} {1} {2} Payout {3} LOSS ${4}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), win) print(msg) if gale == 0: roboCtrl.instance().operContrl.calculoTotal( B.op_id, 'Loss', win) else: roboCtrl.instance().operContrl.calculoTotal( B.op_id, 'Loss ' + vgale, 0, win) else: msg = 'ID:{0} {1} {2} Payout {3} Cod:{4} DOJI ${5}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), id, win) A.success(msg) msg = 'ID:{0} {1} {2} Payout {3} DOJI ${4}'.format( B.op_id, vgale.upper(), B.pair, int(B.payout), win) print(msg) roboCtrl.instance().operContrl.calculoTotal(B.op_id, 'Doji') self.atualizarTela() self.mostrar_saldo() return (check, win)
def VerifConnection(): error_password = '******' conOK = False verAtivos = False try: log.debug(Idioma.traducao('Verificando conexão...')) conOK = APIConnection.instance().connection.check_connect() except Exception as e: try: log.error('Erro de conexão com a IQ:') log.error(e) finally: e = None del e try: if not conOK: verAtivos = True log.debug(Idioma.traducao('Recuperando conexão...')) print(Idioma.traducao('Recuperando conexão...')) check, reason = APIConnection.instance().connection.connect() if check: log.warning(Idioma.traducao('Conexão recuperada.')) print(Idioma.traducao('Conexão recuperada.')) conOK = True elif reason == '[Errno -2] Name or service not known': log.error( Idioma.traducao( 'Problema na conexão, verifique sua internet.')) print( Idioma.traducao( 'Problema na conexão, verifique sua internet.')) elif reason == error_password: log.error(Idioma.traducao('Login/Senha inválido.')) print(Idioma.traducao('Login/Senha inválido.')) else: conOK = True except Exception as e: try: log.error(e) finally: e = None del e if conOK: if roboCtrl.instance().dianoticias != datetime.now().date(): getNoticias() if verAtivos: roboCtrl.instance().robo.pesqAtviso.start_ativos() return conOK
def cancelId(id): try: B.clear('agendaID' + str(id)) B.clear('agendaPreID' + str(id)) B.clear('agendaCnxID' + str(id)) sitAceitas = [Idioma.traducao('Aguardando'), Idioma.traducao('Agendado')] roboCtrl.instance().operContrl.cancelAgendaId(id, Idioma.traducao('Cancelado'), sitAceitas) return True except Exception as e: try: D.error(e) return False finally: e = None del e
def WebNoticias(): try: data = [] roboCtrl.instance().__noticias = [] url = 'https://sslecal2.forexprostools.com?columns=exc_currency,exc_importance&importance=3&countries=110,17,29,25,32,6,37,36,26,5,22,39,14,48,10,35,7,43,38,4,12,72&calType=day&timeZone=12&lang=12' response = requests.get(url, headers={'User-Agent': 'Mozilla'}, timeout=5) if response.status_code is 200: soup = BeautifulSoup(response.content, 'html.parser') soup.prettify() table = soup.find_all(id='ecEventsTable')[0] linhas = table.find_all('tr') for lin in linhas: events = lin.find_all('td', class_='left event') if events: times = lin.find_all('td', class_='first left time') if not times: times = lin.find_all('td', class_='center time') flags = lin.find_all('td', class_='flagCur') sents = lin.find_all('td', class_='sentiment') if times: if flags: if sents: if events: moe = flags[0].get_text().replace( ' ', '').replace('\xa0 ', '') moe.strip() if moe != '': hor = times[0].get_text().strip() des = events[0].get_text().strip() item = [hor, moe, des] data.append(item) try: roboCtrl.instance().add_noticias = Noticia(hor, moe, des) except: pass roboCtrl.instance().dianoticias = datetime.now().date() roboCtrl.instance().view.janela['-TABLENOTICIAS-'].update(values=data) except: pass
def stop_operation(self, operation, valorProxEntrada: float): B = operation if BL.instance().actual_balance <= BL.instance().stop_limit: msg = ('ID:{0} [STOP LOSS] ' + Idioma.traducao('Lucro atual: $') + '{1}').format(B.op_id, round(BL.instance().actual_balance, 2)) A.info(msg) print(msg) Agenda.cancel(B.op_id) return True if BL.instance().actual_balance - valorProxEntrada <= BL.instance( ).stop_limit: if BL.instance().actual_balance != 0: if roboCtrl.instance().robo.prestop: msg = ('ID:{0} [PRE-STOP LOSS] ' + Idioma.traducao('Entrada: $') + '{1} ' + Idioma.traducao('Lucro previsto: $') + '{2}').format( B.op_id, valorProxEntrada, round( BL.instance().actual_balance - valorProxEntrada, 2)) A.info(msg) print(msg) Agenda.cancel(B.op_id) return True if BL.instance().actual_balance >= BL.instance().win_limit: msg = ('ID:{0} [STOP WIN] ' + Idioma.traducao('Lucro atual: $') + '{1}').format(B.op_id, round(BL.instance().actual_balance, 2)) A.info(msg) print(msg) if roboCtrl.instance().robo.percwinpos > 0: if not roboCtrl.instance().robo.ultrapassoustopwin: self.atualizaNovosValoresPosStopWin() return False Agenda.cancel(B.op_id) return True else: return False
def try_connection(self): while roboCtrl.instance().robo.iniciado: if self.first_check == 0: if roboCtrl.instance().dianoticias != datetime.now().date(): getNoticias() else: try: if not APIConnection.instance( ).connection.check_connect(): log.debug( Idioma.traducao('Recuperando conexão...')) print(Idioma.traducao('Recuperando conexão...')) APIConnection.instance().connection.connect() server_time = APIConnection.instance( ).connection.get_server_timestamp() local_time = time.time() diff = local_time - server_time self.first_check = diff log.debug( Idioma.traducao('Diferenca de horario:') + ' {}s', round(diff, 3)) roboCtrl.instance().view.janela['-status-'].update( Idioma.traducao('Diferenca de horario:') + ' {0}s'.format(round(diff, 3))) roboCtrl.instance().view.janela.Refresh() except Exception as e: try: log.error(e) finally: e = None del e time.sleep(0.5)
def cancelSinal(item): i = 0 for sinal in roboCtrl.instance().operContrl.agenda: if i == item: Agenda.cancelId(sinal.op_id) msg = 'ID:{0} {1} {2} Cancelado Sobreposto'.format( sinal.op_id, sinal.pair, sinal.programmedHour.strftime('%H:%M:%S')) logger.warning(msg) print(msg) break else: i += 1
def externalFunction(): roboCtrl.instance().robo.IniciarAgendamentos() data = [] for sinal in roboCtrl.instance().operContrl.agenda: item = [ '{:03d}'.format(int(sinal.op_id)), sinal.programmedHour.strftime('%d/%m/%y'), sinal.programmedHour.strftime('%H:%M:%S'), sinal.pair, sinal.direction.upper(), sinal.expirationMode, sinal.situacao, '{:18.2f}'.format(float(sinal.lucro)) ] data.append(item) roboCtrl.instance().view.janela['-TABLE-'].update(values=data) roboCtrl.instance().robo.ExecutaAgendamento()
def cancel(id): try: for sinal in roboCtrl.instance().operContrl.agenda: if not sinal.situacao == Idioma.traducao('Aguardando'): if sinal.situacao == Idioma.traducao('Agendado'): pass cancelId(sinal.op_id) HL.atualizaView() return True except Exception as e: try: D.error(e) return False finally: e = None del e
def apiconnect(user: str, passw: str): error_password = '******' apiconn = IQ_Option(user, passw) check, reason = apiconn.connect() if check == False: if reason == '[Errno -2] Name or service not known': log.error( Idioma.traducao( 'Problema na conexão, verifique sua internet.')) print( Idioma.traducao( 'Problema na conexão, verifique sua internet.')) roboCtrl.instance().view.janela['-status-'].update( Idioma.traducao( 'Problema na conexão, verifique sua internet.')) roboCtrl.instance().view.janela.Refresh() elif reason == error_password: log.error(Idioma.traducao('Login/Senha inválido.')) print(Idioma.traducao('Login/Senha inválido.')) roboCtrl.instance().view.janela['-status-'].update( Idioma.traducao('Login/Senha inválido.')) roboCtrl.instance().view.janela.Refresh() return return apiconn
def atualizaView(): try: roboCtrl.instance().operContrl.wins = 0 roboCtrl.instance().operContrl.hits = 0 data = [] for sinal in roboCtrl.instance().operContrl.agenda: item = [ '{:03d}'.format(int(sinal.op_id)), sinal.programmedHour.strftime('%d/%m/%y'), sinal.programmedHour.strftime('%H:%M:%S'), sinal.pair, sinal.direction.upper(), sinal.expirationMode, sinal.situacao, '{:18.2f}'.format(float(sinal.lucro)) ] data.append(item) if float(sinal.lucro) > 0: roboCtrl.instance().operContrl.wins += 1 else: if float(sinal.lucro) < 0: roboCtrl.instance().operContrl.hits += 1 elif 'win' in str(sinal.situacao).lower(): roboCtrl.instance().operContrl.wins += 1 if 'loss' in str(sinal.situacao).lower(): roboCtrl.instance().operContrl.hits += 1 try: roboCtrl.instance().view.janela['-TABLE-'].update(values=data) roboCtrl.instance().view.janela.Refresh() except Exception as e: try: log.error(e) finally: e = None del e roboCtrl.instance().view.janela['placarW'].update( value=(roboCtrl.instance().operContrl.wins)) roboCtrl.instance().view.janela['placarH'].update( value=(roboCtrl.instance().operContrl.hits)) roboCtrl.instance().view.janela['assertividade'].update( value=(roboCtrl.instance().operContrl.getAssertividade())) roboCtrl.instance().view.janela['saldolucro'].update( value=(round(roboCtrl.instance().operContrl.saldo, 2))) except Exception as e: try: pass finally: e = None del e
elif obrigarTemplate: sys.exit(0) Idioma.setlang(lang) for file in glob.glob('*.thm'): tema = file.replace('.thm', '') img_logo = os.path.join(os.getcwd(), 'logo.png') if nomeApp == 'JOBsPlay': oimg = LogoImg(img_logo) img_base64 = oimg.imagembase64 if img_base64: img_logo = img_base64 elif not os.path.isfile(img_logo): img_logo = None afiliado = 0 roboCtrl.instance().robo = RoboIQ(versaoapp) cf = roboCtrl.instance().robo.loadConfig() roboCtrl.instance().robo.setConfig(cf) roboCtrl.instance().view = JobsView(nomeApp, tema, versaoapp, img_logo, img_base64, afiliado) roboCtrl.instance().robo.View = roboCtrl.instance().view def externalFunction(): roboCtrl.instance().robo.IniciarAgendamentos() data = [] for sinal in roboCtrl.instance().operContrl.agenda: item = [ '{:03d}'.format(int(sinal.op_id)), sinal.programmedHour.strftime('%d/%m/%y'), sinal.programmedHour.strftime('%H:%M:%S'), sinal.pair,
def atualizarTela(self): B = ThreadOper(target=(self.atualView)) roboCtrl.instance().add_listThread = B B.start()
def start_operation(self, operation): H = '0' B = operation dhmax = B.programmedHour + timedelta(seconds=20) if C(date.today().day) == C(B.day): if datetime.now() >= B.programmedHour: if datetime.now() <= dhmax: if int(B.payout) < int(roboCtrl.instance().robo.payoutmin): if int(B.payout) > 0: if int(B.payout) == 0: msg = ( 'ID:{0} ' + Idioma.traducao('Expiração Indisponível') + ' ' + Idioma.traducao('Payout inferior:') + ' {1} ' + Idioma.traducao('atual:') + ' {2}' ).format( B.op_id, int(roboCtrl.instance().robo.payoutmin), int(B.payout)) A.warning(msg) print(msg) roboCtrl.instance().operContrl.calculoTotal( B.op_id, Idioma.traducao('Expiração Indisponível')) else: msg = ('ID:{0} ' + Idioma.traducao('Payout inferior:') + ' {1} ' + Idioma.traducao('atual:') + ' {2}').format( B.op_id, int(roboCtrl.instance().robo. payoutmin), int(B.payout)) A.warning(msg) print(msg) roboCtrl.instance().operContrl.calculoTotal( B.op_id, 'Payout {0}'.format(int(B.payout))) self.atualizarTela() return if BL.instance().moeda == 'BRL': if float(B.money) < 2: msg = ('ID:{0} ' + Idioma.traducao('Entrada: $') + '{1} ' + Idioma.traducao('inválido para a moeda') + ' [{2}] ' + Idioma.traducao('mínimo de $') + '2.00').format(B.op_id, float(B.money), BL.instance().moeda) A.info(msg) print(msg) return if BL.instance().moeda == 'USD': if float(B.money) < 1: msg = ('ID:{0} ' + Idioma.traducao('Entrada: $') + '{1} ' + Idioma.traducao('inválido para a moeda') + ' [{2}] ' + Idioma.traducao('mínimo de $') + '1.00').format(B.op_id, float(B.money), BL.instance().moeda) A.info(msg) print(msg) return if B.direction != B.trend: if B.trend != '': msg = ('ID:{0} {1} {2} ' + Idioma.traducao('Contra Têndencia') + ' {3}').format(B.op_id, B.pair, B.direction, B.trend) A.warning(msg) print(msg) roboCtrl.instance().operContrl.calculoTotal( B.op_id, Idioma.traducao('Contra Têndencia')) self.atualizarTela() return if roboCtrl.instance().robo.naonoticia: tem, noticia = PesquisaNoticia( B.programmedHour.strftime('%H:%M:%S'), B.pair) if tem: msg = ( 'ID:{0} {1} {2} ' + Idioma.traducao('Existe notícia de 3 touros') + '\n{3} {4} {5}').format( B.op_id, B.pair, B.programmedHour.strftime('%H:%M:%S'), noticia.hora, noticia.moeda, noticia.texto) A.warning(msg) print(msg) roboCtrl.instance().operContrl.calculoTotal( B.op_id, Idioma.traducao('Notícia')) self.atualizarTela() return self.buy(B) D.sleep(1)
def LeConfig(): roboCtrl.instance().view.janela['email'].update( roboCtrl.instance().robo.email) if roboCtrl.instance().robo.contareal: roboCtrl.instance().view.janela['contatipo'].update( value=(Idioma.traducao('Real'))) else: roboCtrl.instance().view.janela['contatipo'].update( value=(Idioma.traducao('Treinamento'))) roboCtrl.instance().view.janela['usarsoros'].update( value=(roboCtrl.instance().robo.usarsoros)) roboCtrl.instance().view.janela['prestop'].update( value=(roboCtrl.instance().robo.prestop)) if roboCtrl.instance().robo.esperarIQ: roboCtrl.instance().view.janela['esperarIQ'].update( value=(Idioma.traducao('Resultado Resp. IQ'))) else: roboCtrl.instance().view.janela['esperarIQ'].update( value=(Idioma.traducao('Resultado por Taxas'))) roboCtrl.instance().view.janela['naonoticia'].update( value=(roboCtrl.instance().robo.naonoticia)) roboCtrl.instance().view.janela['notminantes'].update( value=(roboCtrl.instance().robo.notminantes)) roboCtrl.instance().view.janela['notminapos'].update( value=(roboCtrl.instance().robo.notminapos)) roboCtrl.instance().view.janela['delay'].update( value=(roboCtrl.instance().robo.delay)) if roboCtrl.instance().robo.priorid == 0: roboCtrl.instance().view.janela['priorid'].update( value=(Idioma.traducao('Maior Payout'))) elif roboCtrl.instance().robo.priorid == 1: roboCtrl.instance().view.janela['priorid'].update( value=(Idioma.traducao('Digital'))) elif roboCtrl.instance().robo.priorid == 2: roboCtrl.instance().view.janela['priorid'].update( value=(Idioma.traducao('Binárias'))) roboCtrl.instance().view.janela['tendusar'].update( value=(roboCtrl.instance().robo.tendusar)) roboCtrl.instance().view.janela['tendvelas'].update( value=(roboCtrl.instance().robo.tendvelas)) roboCtrl.instance().view.janela['valinic'].update( value=(roboCtrl.instance().robo.valorinicial)) roboCtrl.instance().view.janela['payout'].update( value=(roboCtrl.instance().robo.payoutmin)) roboCtrl.instance().view.janela['qtdgale'].update( value=(roboCtrl.instance().robo.qtdgales)) if roboCtrl.instance().robo.ent_tipo == 'P': roboCtrl.instance().view.janela['percent'].update( value=(Idioma.traducao('Percentual'))) else: roboCtrl.instance().view.janela['percent'].update( value=(Idioma.traducao('Valor'))) roboCtrl.instance().view.janela['valor1'].update( value=(roboCtrl.instance().robo.ent_valor1)) roboCtrl.instance().view.janela['gale1'].update( value=(roboCtrl.instance().robo.ent_gale1)) roboCtrl.instance().view.janela['gale2'].update( value=(roboCtrl.instance().robo.ent_gale2)) roboCtrl.instance().view.janela['percentsoros'].update( value=(roboCtrl.instance().robo.percent)) if roboCtrl.instance().robo.modelo == 'A': roboCtrl.instance().view.janela['modelo'].update( value=(Idioma.traducao('Agressivo'))) elif roboCtrl.instance().robo.modelo == 'M': roboCtrl.instance().view.janela['modelo'].update( value=(Idioma.traducao('Moderado'))) elif roboCtrl.instance().robo.modelo == 'C': roboCtrl.instance().view.janela['modelo'].update( value=(Idioma.traducao('Conservador'))) if roboCtrl.instance().robo.tipostop == 'P': roboCtrl.instance().view.janela['tipostop'].update( value=(Idioma.traducao('Percentual'))) else: roboCtrl.instance().view.janela['tipostop'].update( value=(Idioma.traducao('Valor'))) roboCtrl.instance().view.janela['stopgain'].update( value=(roboCtrl.instance().robo.stopgain)) roboCtrl.instance().view.janela['stoploss'].update( value=(roboCtrl.instance().robo.stoploss)) ZeraPlacarTotal() roboCtrl.instance().view.janela['-Parar-'].update(disabled=True) getNoticias() roboCtrl.instance().view.janela.Refresh()
def dooperation(self, operation): B = ThreadOper(target=(self.start_operation), args=(operation, )) roboCtrl.instance().add_listThread = B B.start()
def main(): global afiliado roboCtrl.instance().view.Show() logging.basicConfig(level=(logging.DEBUG)) log_queue = queue.Queue() queue_handler = QueueHandler(log_queue) logger.addHandler(queue_handler) LeConfig() janelaDown = False while 1: event, values = roboCtrl.instance().view.janela.Read() if event == None: break else: if event == 'valinic': validarEditsNumeros('valinic', values) if event == 'delay': validarEditsNumeros('delay', values) if event == 'payout': validarEditsNumeros('payout', values) if event == 'qtdgale': validarEditsNumeros('qtdgale', values) if event == 'valor1': validarEditsNumeros('valor1', values) if event == 'gale1': validarEditsNumeros('gale1', values) if event == 'gale2': validarEditsNumeros('gale2', values) if event == 'percentsoros': validarEditsNumeros('percentsoros', values) if event == 'stopgain': validarEditsNumeros('stopgain', values) if event == 'stoploss': validarEditsNumeros('stoploss', values) if event == '-Iniciar-' and not roboCtrl.instance( ).view.appStarted: try: valido = True if values['senha'] == '': sg.popup((Idioma.traducao('Informe sua senha.')), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') valido = False if not os.path.isfile(values['arqlista']): if valido: sg.popup((Idioma.traducao( 'Arquivo da lista não foi localizado.')), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') valido = False if valido: GravaConfigTP(values['email'], values['contatipo']) roboCtrl.instance().robo.senha = values['senha'] ZeraPlacarTotal() threadedApp = ThreadOper(target=externalFunction) roboCtrl.instance().add_listThread = threadedApp appStarted = True roboCtrl.instance().robo.arqLista = values['arqlista'] if roboCtrl.instance().robo.Conectar(): Habilitar(True) if not threadedApp.is_alive(): threadedApp.start() except Exception as inst: try: print(inst) sg.popup_error((str(inst)), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') finally: inst = None del inst if event == '-Gravar-': try: GravaConfig(values) sg.popup( (Idioma.traducao('Atenção')), (Idioma.traducao('Parâmetros gravados com sucesso!')), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') except Exception as inst: try: sg.popup_error((str(inst)), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') finally: inst = None del inst if event == '-Ajuda-': Leiame = Idioma.traducaoLeiame() sg.popup_scrolled((Idioma.traducao('Leiame')), Leiame, size=(120, 20), font=('Helvetica', 8), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') if event == '-TABLE-': try: item = int(values['-TABLE-'][0]) cancelitem = sg.popup_yes_no( (Idioma.traducao('Cancelar este sinal?')), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') if cancelitem == 'Yes': cancelSinal(item) except: pass if event == '-Download-': if not janelaDown: janelaDown = True roboCtrl.instance().view.janela['-Iniciar-'].update( disabled=True) roboCtrl.instance().view.janela['-Parar-'].update( disabled=True) roboCtrl.instance().view.janela['-abrirlista-'].update( disabled=True) viewDown = JobsViewDownload() viewDown.Show() wslista = ListaSinais() wslista.getLista(afiliado) viewDown.atualizaGrid(wslista.lista) if janelaDown: ev2, vals2 = viewDown.janela.read() if ev2 is None or ev2 == '-CancLista-': janelaDown = False roboCtrl.instance().view.janela['-Iniciar-'].update( disabled=False) roboCtrl.instance().view.janela['-Parar-'].update( disabled=True) roboCtrl.instance().view.janela['-abrirlista-'].update( disabled=False) viewDown.janela.close() if ev2 == '-ConfLista-': janelaDown = False try: idx = int(vals2['-TABLELISTA-'][0]) nomelista = os.path.join(os.getcwd(), 'downloads') PathLogs.create_dir(nomelista) arq = wslista.lista[idx]['id'] + '_' + wslista.lista[ idx]['data'] + '_' + wslista.lista[idx][ 'nome'] + '.txt' arq = arq.replace('-', '_') arq = arq.replace(' ', '_') nomelista = os.path.join(nomelista, arq) arqlista = wslista.getArquivo( int(wslista.lista[idx]['id'])) if arqlista: with open(nomelista, 'wb') as f: f.write(arqlista) roboCtrl.instance().view.janela['arqlista'].update( value=nomelista) except Exception as inst: try: print(inst) sg.popup_error((str(inst)), no_titlebar=True, keep_on_top=True, text_color='black', background_color='#DFDDDD') finally: inst = None del inst roboCtrl.instance().view.janela['-Iniciar-'].update( disabled=False) roboCtrl.instance().view.janela['-Parar-'].update( disabled=True) roboCtrl.instance().view.janela['-abrirlista-'].update( disabled=False) viewDown.janela.close() if event in ('-Parar-', '-Fechar-'): if Agenda.cancel(0): appStarted = False roboCtrl.instance().robo.PararTudo() for th in roboCtrl.instance().add_listThread: if th.isAlive(): th.stop() if event == '-Parar-': print( Idioma.traducao( 'Agendamentos cancelados com sucesso!')) print('====================================') Habilitar(False) if event == '-Fechar-': break try: record = log_queue.get(block=False) except queue.Empty: pass else: msg = queue_handler.format(record) roboCtrl.instance().view.janela.close() del roboCtrl.instance().view.janela
def buy_gale1(self, operation, loopgale: bool = False): B = operation def resultado_candle(valorent, taxa): try: candle = E.getCandles(B.pair, int(B.expirationMode), 1) txclose = 0 velaPeq = False if candle: chkres = True if taxa <= 0: taxa = candle[0]['open'] txclose = candle[0]['close'] if txclose > taxa: cor = 'G' elif txclose < taxa: cor = 'R' else: cor = 'C' lucro = 0 if not (cor == 'G' and B.direction == 'call'): if not cor == 'R' or B.direction == 'put': lucro = round( float(valorent) * (int(B.payout) / 100), 2) else: lucro = float(valorent) * -1 velaPeq = self.tamanhoVela(taxa, txclose) else: chkres = False lucro = 0 except: chkres = False return (chkres, float(lucro), txclose, velaPeq) if P(B.gale1.replace(Q, K).replace(R, K)) == 0: A.warning('ID:{} GALE1 Desligado {}', B.op_id, B.pair) return valor = B.gale1 if loopgale: if roboCtrl.instance().robo.usarsoros: valor = BL.instance().sorosgale.valor_entrada else: if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.calcValorEntrada(B.payout) if BL.instance().sorosgale.valor_entrada > 0: if roboCtrl.instance().robo.qtdgales < 1: A.warning('ID:{} GALE1 Desligado {}', B.op_id, B.pair) return valor = BL.instance().sorosgale.valor_entrada if roboCtrl.instance().robo.percwinpos > 0: if roboCtrl.instance().robo.ultrapassoustopwin: valor = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, valor) if self.stop_operation(B, float(valor)): return if B.idIQgale1 > 0: A.error('ID:{} GALE1 Entrada Repetida Cancelada Cod: {}', B.op_id, B.idIQgale1) return S, C, tx = E.C(B, valor) if S: B.idIQgale1 = C if B.typepair == 'D': tipoent = 'Digital' else: tipoent = 'Binaria' A.debug( 'ID:{} GALE1 {} {}M Payout {} {} {} ${} Cod: {} criada com sucesso', B.op_id, B.pair, B.expirationMode, B.payout, tipoent, B.direction, round(float(valor), 2), C) roboCtrl.instance().operContrl.calculoTotal(B.op_id, 'Gale 1') self.atualizarTela() self.docancelProxSinal(B, 1) if not roboCtrl.instance().robo.esperarIQ: check = False dhexpira = B.expirationGale1 - timedelta( seconds=(self.SECOND_RESULT)) while not check: if datetime.now() >= dhexpira: vchkres1, vret1, vtxclose, vtamPeq = resultado_candle( float(valor), tx) check = True else: time.sleep(1) if not (check and vtamPeq or vchkres1): if vtamPeq: A.info( 'ID:{} GALE1 {} Tx({} x {}) Vela pequena, aguardar resultado IQ...', B.op_id, B.pair, tx, vtxclose) else: A.info( 'ID:{} GALE1 {} Não houve retorno de taxas, aguardar resultado IQ...', B.op_id, B.pair, tx, vtxclose) check, vret = self.resultIQ(B, C, 1) else: self.doresultIQ(B, C, 1) else: check, vret1 = self.resultIQ(B, C, 1) vtamPeq = False if check: if not roboCtrl.instance().robo.esperarIQ: if not vtamPeq: msg = 'ID:{0} GALE1 {1} Tx({2} x {3})'.format( B.op_id, B.pair, tx, vtxclose) A.info(msg) print(msg) if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.execute(vret1) if vret1 < 0: self.buy_gale2(B) elif not vret1 == 0 or B.typepair != 'D': self.buy_gale1(B) else: if roboCtrl.instance().robo.usarsoros: BL.instance().sorosgale.valor_lucro = 0 msg = 'ID:{0} GALE1 {1} ${2} - {3} {4}'.format( B.op_id, B.pair, round(float(valor), 2), Idioma.traducao('Resposta IQ:'), C) A.error(msg) print(msg)
def docancelProxSinal(self, operation, gale=0): B = ThreadOper(target=(self.cancelProxSinal), args=(operation, gale)) roboCtrl.instance().add_listThread = B B.start()
def Habilitar(iniciado: bool): roboCtrl.instance().view.janela['-Iniciar-'].update(disabled=iniciado) roboCtrl.instance().view.janela['-Parar-'].update(disabled=(not iniciado)) roboCtrl.instance().view.janela['-Gravar-'].update(disabled=iniciado) roboCtrl.instance().view.janela['-Download-'].update(disabled=iniciado) roboCtrl.instance().view.janela['-abrirlista-'].update(disabled=iniciado) roboCtrl.instance().view.janela['email'].update(disabled=iniciado) roboCtrl.instance().view.janela['senha'].update(disabled=iniciado) roboCtrl.instance().view.janela['contatipo'].update(disabled=iniciado)
def doresultIQ(self, operation, id, gale): B = ThreadOper(target=(self.resultIQ), args=(operation, id, gale)) roboCtrl.instance().add_listThread = B B.start()
def atualizaNovosValoresPosStopWin(self): roboCtrl.instance().robo.ultrapassoustopwin = True BL.instance().stop_limit = calcValorFatorReducao( 1 - roboCtrl.instance().robo.percwinpos, BL.instance().win_limit) BL.instance().win_limit = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, BL.instance().win_limit) roboCtrl.instance().robo.ent_valor1 = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, roboCtrl.instance().robo.ent_valor1) roboCtrl.instance().robo.ent_gale1 = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, roboCtrl.instance().robo.ent_gale1) roboCtrl.instance().robo.ent_gale2 = calcValorFatorReducao( roboCtrl.instance().robo.percwinpos, roboCtrl.instance().robo.ent_gale2) roboCtrl.instance().view.janela['stopgainv'].update( value=(round(C.instance().win_limit, 2))) roboCtrl.instance().view.janela['stoplossv'].update( value=(round(C.instance().stop_limit, 2))) if not roboCtrl.instance().robo.usarsoros: msg = Idioma.traducao('Entradas fixas:') A.info(msg) print(msg) msg = (Idioma.traducao('Entrada: $') + '{0}').format( round(roboCtrl.instance().robo.ent_valor1, 2)) A.info(msg) print(msg) if roboCtrl.instance().robo.ent_gale1 > 0: msg = (Idioma.traducao('Gale 1: $') + '{0}').format( round(roboCtrl.instance().robo.ent_gale1, 2)) A.info(msg) print(msg) if roboCtrl.instance().robo.ent_gale2 > 0: msg = (Idioma.traducao('Gale 2: $') + '{0}').format( round(roboCtrl.instance().robo.ent_gale2, 2)) A.info(msg) print(msg) else: roboCtrl.instance().sorosgale.config_ini( calcValorFatorReducao(roboCtrl.instance().robo.percwinpos, roboCtrl.instance().robo.valorinicial), roboCtrl.instance().robo.percent, roboCtrl.instance().robo.modelo)
def GravaConfig(values): def tratarFloat(value: str): try: return float(value) except: return 0 if values['usarsoros'] == True: roboCtrl.instance().robo.usarsoros = True else: roboCtrl.instance().robo.usarsoros = False if values['prestop'] == True: roboCtrl.instance().robo.prestop = True else: roboCtrl.instance().robo.prestop = False if values['esperarIQ'] == Idioma.traducao('Resultado por Taxas'): roboCtrl.instance().robo.esperarIQ = False elif values['esperarIQ'] == Idioma.traducao('Resultado Resp. IQ'): roboCtrl.instance().robo.esperarIQ = True if values['naonoticia'] == True: roboCtrl.instance().robo.naonoticia = True else: roboCtrl.instance().robo.naonoticia = False roboCtrl.instance().robo.notminantes = int( tratarFloat(values['notminantes'])) roboCtrl.instance().robo.notminapos = int(tratarFloat( values['notminapos'])) roboCtrl.instance().robo.delay = int(tratarFloat(values['delay'])) if values['priorid'] == Idioma.traducao('Maior Payout'): roboCtrl.instance().robo.priorid = 0 elif values['priorid'] == Idioma.traducao('Digital'): roboCtrl.instance().robo.priorid = 1 elif values['priorid'] == Idioma.traducao('Binárias'): roboCtrl.instance().robo.priorid = 2 if values['tendusar'] == True: roboCtrl.instance().robo.tendusar = True else: roboCtrl.instance().robo.tendusar = False roboCtrl.instance().robo.tendvelas = int(tratarFloat(values['tendvelas'])) if tratarFloat(values['valinic']) == 0: raise Exception(Idioma.traducao('Saldo Inicial não pode ser zero.')) if tratarFloat(values['payout']) == 0: raise Exception(Idioma.traducao('Payout não pode ser zero.')) roboCtrl.instance().robo.valorinicial = tratarFloat(values['valinic']) roboCtrl.instance().robo.payoutmin = int(tratarFloat(values['payout'])) roboCtrl.instance().robo.qtdgales = int(tratarFloat(values['qtdgale'])) if values['percent'] == Idioma.traducao('Percentual'): roboCtrl.instance().robo.ent_tipo = 'P' else: roboCtrl.instance().robo.ent_tipo = 'V' roboCtrl.instance().robo.ent_valor1 = tratarFloat(values['valor1']) roboCtrl.instance().robo.ent_gale1 = tratarFloat(values['gale1']) roboCtrl.instance().robo.ent_gale2 = tratarFloat(values['gale2']) roboCtrl.instance().robo.percent = tratarFloat(values['percentsoros']) if values['modelo'] == Idioma.traducao('Agressivo'): roboCtrl.instance().robo.modelo = 'A' elif values['modelo'] == Idioma.traducao('Moderado'): roboCtrl.instance().robo.modelo = 'M' if values['modelo'] == Idioma.traducao('Conservador'): roboCtrl.instance().robo.modelo = 'C' if values['tipostop'] == Idioma.traducao('Percentual'): roboCtrl.instance().robo.tipostop = 'P' else: roboCtrl.instance().robo.tipostop = 'V' if tratarFloat(values['stopgain']) == 0: raise Exception( Idioma.traducao('Valor do Stop Gain não pode ser zero.')) if tratarFloat(values['stoploss']) == 0: raise Exception( Idioma.traducao('Valor do Stop Loss não pode ser zero.')) if tratarFloat(values['stoploss']) > 100: if roboCtrl.instance().robo.tipostop == 'P': raise Exception( Idioma.traducao( 'Valor do Stop Loss não pode ser maior do que 100%.')) if tratarFloat(values['stoploss']) > tratarFloat(values['valinic']): if roboCtrl.instance().robo.tipostop == 'V': raise Exception( Idioma.traducao( 'Valor do Stop Loss não pode ser maior do que o Saldo Inicial.' )) roboCtrl.instance().robo.stopgain = tratarFloat(values['stopgain']) roboCtrl.instance().robo.stoploss = tratarFloat(values['stoploss']) roboCtrl.instance().robo.saveConfig() cf = roboCtrl.instance().robo.loadConfig() roboCtrl.instance().robo.setConfig(cf)
def ZeraPlacarTotal(): roboCtrl.instance().operContrl.zerar() roboCtrl.instance().view.janela['saldoatual'].update(value=0.0) roboCtrl.instance().view.janela['stopgainp'].update(value=0) roboCtrl.instance().view.janela['stopgainv'].update(value=0.0) roboCtrl.instance().view.janela['stoplossp'].update(value=0) roboCtrl.instance().view.janela['stoplossv'].update(value=0.0) roboCtrl.instance().view.janela['valorinic'].update(value=0.0) roboCtrl.instance().view.janela['placarW'].update(value=0) roboCtrl.instance().view.janela['placarH'].update(value=0) roboCtrl.instance().view.janela['assertividade'].update(value=0.0) roboCtrl.instance().view.janela['saldolucro'].update(value=0.0) roboCtrl.instance().view.janela.Refresh()
def geralista(arq, ent_valor1, ent_gale1, ent_gale2): W = [] tmp = [] cnt = 0 b = None try: with open(arq) as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') cnt = 0 line_count = 0 for B in csv_reader: if B: if str(B[0]) != 'Moeda': if str(B[0]) != 'Ativo': if str(B[0]) != '': A = X() hr = B[2].split(H) F = '{:02d}'.format(int(hr[0])) G = '{:02d}'.format(int(hr[1])) try: I = str(hr[2]) except: I = str('00') cnt += 1 try: A[K] = int(cnt) A[N] = remove_carespeciais(str(B[0]).strip()) A[O] = int(B[1].strip()) A[J] = str(F) + H + str(G) + H + str(I) A[P] = remove_carespeciais(str(B[3]).strip()) A[Q] = B[4].strip() A[R] = B[5].strip() A[S] = B[6].strip() A[T] = int(B[7]) A[U] = V except: A[K] = int(cnt) A[N] = remove_carespeciais(str(B[0]).strip()) A[O] = int(B[1].strip()) A[J] = str(F) + H + str(G) + H + str(I) A[P] = remove_carespeciais(str(B[3]).strip()) A[Q] = ent_valor1 A[R] = ent_gale1 A[S] = ent_gale2 A[T] = int(B[4].strip()) A[U] = V if roboCtrl.instance().robo.usarsoros: pesq = str(F) + H + str(G) if pesq in tmp: valid = False else: tmp.append(pesq) valid = True else: valid = True if valid: W.append(A) line_count += 1 WS = sorted(W, key=(lambda i: (i[O], i[J]))) b = Y.dumps(WS) except: raise Exception(Idioma.traducao('Layout inválido.\nLayout correto: ATIVO;DIA;HORARIO;DIRECAO;DURACAO')) return (cnt, b)