Boa noite, queria ajuda de vocês nesse codigo, no testador ele não abre ordem.
Romeu,
qual linha? Você cortou a msg justamente onde diz a linha, no código, que o erro aconteceu.
Romeu,
qual linha? Você cortou a msg justamente onde diz a linha, no código, que o erro aconteceu.
Olá, geralmente esse erro se dá quando vc utiliza o dado do array antes dele carregar compltamente o buffer. Num projeto que eu tive esse problema, eu criei uma função que calcula todos os buffers, se algum deles desem erro retorna false, e se estiver tudo ok retorna true.
Utilizava a condição true da função pra seguir com a utilização do array.
exemplo.
bool carregaBuffers () // coloca no fim do programa
{ if(!SymbolInfoTick(_Symbol,latest_price))
{ Alert("Erro ao obter a última cotação de preço - erro:",GetLastError(),"!!"); return false; } // Obtenha dados das últimas 3 barras if(CopyRates(_Symbol,_Period,0,3,mrate)<0) { Alert("Erro ao copiar taxas / dados de histórico - erro:",GetLastError(),"!!"); ResetLastError(); return false; } // Copie os novos valores de nossos indicadores para buffers if(CopyBuffer(md1handle,0,0,1,md1array)<0) { Alert("Erro ao copiar buffers do indicador média 1 - error:",GetLastError(),"!!"); ResetLastError(); return false; } if(CopyBuffer(md2handle,0,0,1,md2array)<0) { Alert("Erro ao copiar o buffer do indicador média 2 - erro:",GetLastError()); ResetLastError(); return false; } return true: }if(carregaBuffers()) //adicionar no codigo { double p_open = mrate[1].open; // barra 1 preço de abertura double p_close = mrate[1].close; // barra 1 preço de fechamento double p_high = mrate[1].high; // barra 1 preço maximo double p_low = mrate[1].low; // barra 1 preço minimo double TickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); double smm = md1array[1] - md2array[1]; }else{ Print("Buffers não carregado corretamente"); }
Deve funcionar.
Outro motivo é que vc pode estar tentando recuperar um dado de uma posição inexistente de um array.
Ex:
Vc criou um array[3] e esta chamando a posição 4:
exdeerro = array[4];
No caso do seu código o problema deve estar na linha 210 como é apontado na log do erro:
double smm = md1array[1] - md2array[1];
Veja se esta correta essa lógica usando o valor 1 para eles.
.
Olá,
falta essas duas linhas.
mrequest.type_time =ORDER_TIME_GTC;
mrequest.expiration =0;
Olá @Rogerio Giannetti Torres, adicionei e fiz outras alterações, o EA compila e roda sem erros, porem não abre nenhuma ordem, para ficar de mais fácil entendimento, a estratégia consiste em quando um candle for "X" vezes maior que a media de tamanho dos últimos "Y" candles, e o corpo ocupar "Z%" do candle, o EA abre uma venda no rompimento da mínima desse candle se ele for negativo, ou uma compra no rompimento da máxima se o candle for positivo, os stops são a media de tamanho dos últimos "Y" candles projetados pra cima e para baixo da entrada, o EA só deve abrir ordem se o rompimento ocorrer no candle seguinte ao padrão.
Olá Romeu,
erro de lógica mano é com você, quebra a cabeça, bota uns prints, depura no metaeditor... Agora com relação ao type_time, na B3 para FUTUROS só são aceitos ORDER_TIME_DAY ou ORDER_TIME_GTC... Para ações na B3 é permitido especificar uma data expiração e você tá deixando 0(zero), desconheço o resultado disso.
Uma dúvida você quer fazer uma ordem SELL_STOP_LIMIT ?
mrequest.action=TRADE_ACTION_PENDING; mrequest.magic = EA_Magic_Number; mrequest.price = NormalizeDouble(p_low - TickSize ,_Digits); mrequest.stoplimit = p_close; mrequest.symbol = _Symbol; mrequest.volume = Lote; mrequest.sl = NormalizeDouble(p_low + smm*_Point,_Digits); mrequest.tp = NormalizeDouble(p_low - smm*_Point,_Digits); mrequest.type= ORDER_TYPE_SELL_LIMIT; mrequest.type_filling = ORDER_FILLING_RETURN; mrequest.type_time = ORDER_TIME_SPECIFIED; mrequest.deviation=5;
Olá Romeu,
erro de lógica mano é com você, quebra a cabeça, bota uns prints, depura no metaeditor... Agora com relação ao type_time, na B3 para FUTUROS só são aceitos ORDER_TIME_DAY ou ORDER_TIME_GTC... Para ações na B3 é permitido especificar uma data expiração e você tá deixando 0(zero), desconheço o resultado disso.
Uma dúvida você quer fazer uma ordem SELL_STOP_LIMIT ?
Não, uma sell limit. A logica acredito estar correta, penso que o erro esta na requisições de abertura de posições.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa noite, queria ajuda de vocês nesse codigo, no testador ele não abre ordem.