Graziani Garcia:
.....
vc precisa precisa checar os dois ativos...
eu fiz uma modificação no seu código, não esta otimizado e muito menos elegante. Mas deve funcionar.
//+------------------------------------------------------------------+ //| ajudaForum.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" double upBand_ativo_1[]; double middleBand_ativo_1[]; double lowBand_ativo_1[]; double upBand_ativo_2[]; double middleBand_ativo_2[]; double lowBand_ativo_2[]; string sHorAtu; string sMinAtu; string sSegAtu; bool falha; MqlRates rates_ativo_1[]; MqlRates rates_ativo_2[]; ENUM_TIMEFRAMES periodo_symbol_1 = PERIOD_M5; ENUM_TIMEFRAMES periodo_symbol_2 = PERIOD_M5; datetime lastbar_timeopen; int handle_1; int handle_2; string symbol_1="AUDUSD"; string symbol_2="EURUSD"; int My_Socket_Handle = INVALID_HANDLE; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { My_Socket_Handle = Socket_Connect(); handle_1 = iBands(symbol_1, periodo_symbol_1, 20, 0, 1.50, PRICE_CLOSE); handle_2 = iBands(symbol_2, periodo_symbol_2, 20, 0, 1.50, PRICE_CLOSE); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Socket_Close(My_Socket_Handle); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { datetime tm = TimeCurrent(); MqlDateTime stm; TimeToStruct(tm,stm); sHorAtu = (string)stm.hour; sMinAtu = (string)stm.min; sSegAtu = (string)stm.sec; ArraySetAsSeries(rates_ativo_1, true); ArraySetAsSeries(upBand_ativo_1, true); ArraySetAsSeries(middleBand_ativo_1, true); ArraySetAsSeries(lowBand_ativo_1, true); CopyRates(symbol_1, periodo_symbol_1, 0, 5, rates_ativo_1); CopyBuffer(handle_1, 0, 0, 5, middleBand_ativo_1); CopyBuffer(handle_1, 1, 0, 5, upBand_ativo_1); CopyBuffer(handle_1, 2, 0, 5, lowBand_ativo_1); ArraySetAsSeries(rates_ativo_2, true); ArraySetAsSeries(upBand_ativo_2, true); ArraySetAsSeries(middleBand_ativo_2, true); ArraySetAsSeries(lowBand_ativo_2, true); CopyRates(symbol_2, periodo_symbol_2, 0, 5, rates_ativo_2); CopyBuffer(handle_2, 0, 0, 5, middleBand_ativo_2); CopyBuffer(handle_2, 1, 0, 5, upBand_ativo_2); CopyBuffer(handle_2, 2, 0, 5, lowBand_ativo_2); //if((sMinAtu == 30) && (sSegAtu >= 30)){ //symbol 1 if(rates_ativo_1[0].close < lowBand_ativo_1[0] && rates_ativo_1[1].close >= lowBand_ativo_1[1]) { ObjectCreate(0, rates_ativo_1[0].time+"_", OBJ_ARROW_UP, 0, rates_ativo_1[0].time, rates_ativo_1[0].close); if(isNewBar()) { Print(symbol_1, " - COMPRA!!!"); Socket_Send(My_Socket_Handle, symbol_1 + ";" + "call" + ";" + rates_ativo_1[0].close); } } if(rates_ativo_1[0].close > upBand_ativo_1[0] && rates_ativo_1[1].close <= upBand_ativo_1[1]) { ObjectCreate(0, rates_ativo_1[0].time+"_", OBJ_ARROW_DOWN, 0, rates_ativo_1[0].time, rates_ativo_1[0].close); if(isNewBar()) { Print(symbol_1, " - VENDA!!!"); Socket_Send(My_Socket_Handle, symbol_1 + ";" + "put" + ";" + rates_ativo_1[0].close); } } //symbol 2 if(rates_ativo_2[0].close < lowBand_ativo_2[0] && rates_ativo_2[1].close >= lowBand_ativo_2[1]) { ObjectCreate(0, rates_ativo_2[0].time+"_", OBJ_ARROW_UP, 0, rates_ativo_2[0].time, rates_ativo_2[0].close); if(isNewBar()) { Print(symbol_2, " - COMPRA!!!"); Socket_Send(My_Socket_Handle, symbol_2 + ";" + "call" + ";" + rates_ativo_2[0].close); } } if(rates_ativo_2[0].close > upBand_ativo_2[0] && rates_ativo_2[1].close <= upBand_ativo_2[1]) { ObjectCreate(0, rates_ativo_2[0].time+"_", OBJ_ARROW_DOWN, 0, rates_ativo_2[0].time, rates_ativo_2[0].close); if(isNewBar()) { Print(symbol_2, " - VENDA!!!"); Socket_Send(My_Socket_Handle, symbol_2 + ";" + "put" + ";" + rates_ativo_2[0].close); } } //} } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Socket_Connect() { int h_socket = SocketCreate(SOCKET_DEFAULT); if(h_socket != INVALID_HANDLE) { if(SocketConnect(h_socket,"10.0.0.179",9090,2000)) { Print("Conectado ao Servidor Socket"); } else { Print("Falha ao conectar ao servidor de socket. Código do erro :", GetLastError()); } } else { Print("Falha no código de erro SocketCreate:", GetLastError()); } return h_socket; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Socket_Close(int socket_handle) { if(socket_handle != INVALID_HANDLE) { SocketClose(socket_handle); My_Socket_Handle = INVALID_HANDLE; Print("Soquete Fechado"); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Socket_Send(int socket_handle, string sInfPar) { if(socket_handle == INVALID_HANDLE) return 0; uchar bytes[]; int byte_size = StringToCharArray(sInfPar,bytes)-1; sInfPar =""; return SocketSend(socket_handle,bytes,byte_size); } //+------------------------------------------------------------------+ //| Retornando true quando aparece uma nova barra | //+------------------------------------------------------------------+ bool isNewBar(const bool print_log=true) { static datetime bartime=0; // armazenamos o tempo de abertura da barra atual //--- obtemos o tempo de abertura da barra zero datetime currbar_time=iTime(_Symbol,_Period,0); //--- se o tempo de abertura mudar, é porque apareceu uma nova barra if(bartime!=currbar_time) { bartime=currbar_time; lastbar_timeopen=bartime; //--- exibir no log informações sobre o tempo de abertura da nova barra if(print_log && !(MQLInfoInteger(MQL_OPTIMIZATION)||MQLInfoInteger(MQL_TESTER))) { //--- obtemos os dados do último tick MqlTick last_tick; if(!SymbolInfoTick(Symbol(),last_tick)) Print("SymbolInfoTick() failed, error = ",GetLastError()); } //--- temos uma nova barra return (true); } //--- não há nenhuma barra nova return (false); } //+------------------------------------------------------------------+
Obrigado Jonathan, vou testar o código que me passou e retorno com os resultados.
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Boa tarde,
Estou utilizando sockets para integrar mt5 ao python. A comunicação é realizada corretamente, porém, apenas me retorna a informação de apenas uma paridade.
Exemplo:
Caso o EURUSD atinja a banda de bollinger primeiro que o AUDUSD daí em diante o EA só retorna para o python as informação relativas ao EURUSD. Gostaria que a cada paridade que tocar a banda fosse retornada a respectiva informação.
Segue abaixo o um código de exemplo:
Caso alguém já tenha passado por esta situação e puder me ajudar, ficarei grato.