Resposta

SQ 3.8.0 Erro 129: preço inválido em negociações reais

14 respostas

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

9 anos atrás #113353

Olá Mark,

 

Criei, testei e exportei o MQL4 para uma estratégia que parece promissora no período de tempo EURUSD H1. Ela usa a opção de posição de mercado inversa, mas falha ao testar em uma conta real:

 

2015.02.16 17:59:59.599 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Erro ao abrir a ordem: 129 : preço inválido
2015.02.16 17:59:59.599 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:09 Ordem de abertura, direção: 0, preço: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:55.489 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Erro ao abrir a ordem: 129 : preço inválido
2015.02.16 17:59:55.489 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:05 Ordem de abertura, direção: 0, preço: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.067 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Erro ao abrir a ordem: 129 : preço inválido
2015.02.16 17:59:52.067 Estratégia 9.7 EURUSD,H1: 2015.02.16 20:00:01 Ordem de abertura, direção: 0, preço: 1.13572, Ask: 1.13572, Bid: 1.13548
2015.02.16 17:59:52.052 Estratégia 9.7 EURUSD,H1: fechar #164716296 vender 0,10 EURUSD a 1,14383 ao preço de 1,13572

 

Alguma ideia de por que o EA não parece ser capaz de abrir a direção de negociação oposta depois de fechar uma negociação?

 

Obrigado,

 

Mike

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

9 anos atrás #128868

Marca,

 

Observando a lógica de negociação no EA gerado, parece-me que ele tenta novamente, independentemente da causa do erro e, no caso do erro 129, ele deve atualizar a oferta de compra/venda, pois o preço se moveu além da derrapagem.

 

Ver http://forum.mql4.com/61528

 

 

Para meus próprios EAs, uso uma biblioteca chamada OrderReliable para lidar com o complicado tratamento de erros necessário. 

 

https://github.com/keyguy/TradersTech/blob/master/OrderReliable_2011.01.07.mqh

 

Talvez isso possa ser incluído na próxima versão do modelo SQ para o MQ4?

 

Cumprimentos,

 

Mike

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

9 anos atrás #128890

Obrigado por me informar sobre esse erro e a biblioteca, vou dar uma olhada.

Marcar
EstratégiaQuant arquiteto

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

9 anos atrás #129627

Estou vendo muito o erro de slippage em certas corretoras (olá FXDD :angry: ). Acho que a melhor solução é evitar essas corretoras com slippage ruim.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

9 anos atrás #129666

Esse erro é típico de corretores formadores de mercado, pois eles se recusam a aceitar sua ordem pelo preço que mostram no MT4. Isso é chamado de requotes e serve para que a corretora ganhe mais com suas perdas:) Isso nunca acontecerá em uma corretora ECN boa e honesta. Há muitas delas, e minha recomendação é a Global Prime, na Austrália.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_participant, comunidade, 300 respostas.

Perfil da visita

9 anos atrás #129687

Isso nunca acontecerá em uma corretora ECN boa e honesta.

 

Você está enganado... Há muitas outras coisas que causam requotes. Simplesmente, tente fazer uma negociação sem requotes com ping para o servidor de negociação > 300ms. Mesmo com um corretor honesto, você nunca obterá o preço que está vendo, porque esse preço já não existe. 

btn_viewmy_160x33.png

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

9 anos atrás #129701

Claro, mas isso não é uma recotação, é uma derrapagem e não gera um erro para o EA, como acontece com uma recotação - a negociação será aberta de qualquer forma, apenas com um preço derrapado. Ainda prefiro isso em comparação com os requotes. A propósito, está claro que você não deve ter um ping de 300 ms para o servidor da corretora. A propósito, estou trabalhando para uma corretora ECN e, mesmo para contas pequenas, você deve alugar um VPS para executar suas estratégias.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Matusiak Adrian

Cliente, bbp_participant, comunidade, 300 respostas.

Perfil da visita

9 anos atrás #129704

Mesmo para contas pequenas, você deve alugar um VPS para executar suas estratégias.

 

Concordo plenamente.

btn_viewmy_160x33.png

0

Dan

Cliente, bbp_participante, comunidade, 31 respostas.

Perfil da visita

8 anos atrás #133511

Olá Mark,

 

Estou recebendo o mesmo erro que MickeyC, em que algumas vezes, quando meu AE vai fazer uma negociação, recebo a mensagem "Erro ao abrir a ordem 129: preço inválido". Existe algum código para atualizar o preço quando ele tenta substituir a ordem que eu possa inserir e isso é algo que o SQ4 resolverá?

 

Obrigado por sua ajuda

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

8 anos atrás #133524

Dan,

 

Você pode carregar essa estratégia ou enviá-la para [email protected]?

0

Dan

Cliente, bbp_participante, comunidade, 31 respostas.

Perfil da visita

8 anos atrás #133528

Olá, Thomas,

 

Prefiro não compartilhar meu AE e solucionar o problema do ponto de vista de que se trata de um problema de lógica do SQ, em que ele deveria atualizar o preço quando ultrapassa o valor da derrapagem. MIckeyC apontou esse problema neste tópico anteriormente e Mark iria dar uma olhada nele. Por favor, veja acima. Mark fez alguma alteração para corrigir esse erro na próxima edição do SQ? Segui o link fornecido por MickeyC para o site MQL4  http://forum.mql4.com/61528 e diz que, para corrigir o código de erro 129 de preço inválido, é necessário colocar RefreshRates(); antes de enviar o pedido. Como não sou programador, tentei inserir isso no AE. Em negrito, na parte inferior, foi onde adicionei o código da taxa de atualização. Não tenho certeza se isso funcionará, e é aqui que preciso de sua experiência. Devo dizer que o erro só ocorreu duas vezes e ele tenta novamente fazer o pedido três vezes depois, sempre sem sucesso, com o erro de preço inválido 129. Espero que a inclusão do código RefreshRate corrija esse problema. 

 

Obrigado por sua ajuda

 

 // abrir ordem com tratamento de erros e novas tentativas
   int ticket = 0;
   int retries = 3;
   while(true) {
      tentativas-;
      if(retries < 0) return;
      if(getMarketPosition() != 0) return;

      se (sqIsTradeAllowed() == 1) {
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         se (ticket > 0) {
            se (tradeDirection > 0) {
                ObjectSetText("lines", "Last Signal: Long, ticket: "+ticket, 8, "Tahoma", LabelColor);
            {} else {
                ObjectSetText("lines", "Last Signal: Short, ticket: "+ticket, 8, "Tahoma", LabelColor);
            }
            retorno;
         }
      }

      if(ticket == -130 || ticket == -129) {
         // stops ou volume inválidos, não podemos abrir a negociação
         retorno;
      }

      Dormir(1000);
     
   }
   retorno;
}

//+——————————————————————+

int openOrderWithErrorHandling(int orderType, double orderLots, double openPrice, double stopLoss, double profitTarget, string comment, int magicNumber) {

   //—————————————
   // enviar pedido
   int error, ticket;
   Log("Opening order, direction: ", orderType,", price: ", openPrice, ", Ask: ", Ask, ", Bid: ", Bid);
   ticket = OrderSend(Symbol(), orderType, orderLots, openPrice, MaxSlippage, 0, 0, comment, magicNumber, 0, Green);
   if(ticket < 0) {
      // o pedido falhou, escreva o erro no registro
      error = GetLastError();
      Log("Error opening order: ",error, " : ", ErrorDescription(error));
      return(-error);
      Dormir(1000);
      //atualizar dados de preço  
      RefreshRates();

    
   }

   rettmp = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   Log("Order opened: ", OrderTicket(), " at price:", OrderOpenPrice());

   stopLoss = getSpecialSL(stopLoss);
   profitTarget = getSpecialPT(profitTarget);

   if(EmailNotificationOnTrade) {
      SendMail("GB Strategy - Order opened", getNotificationText());
   }

0

Dan

Cliente, bbp_participante, comunidade, 31 respostas.

Perfil da visita

8 anos atrás #133543

Oi Tomas, preciso de seu intelecto e orientação sobre o problema que tenho acima.

0

Dan

Cliente, bbp_participante, comunidade, 31 respostas.

Perfil da visita

8 anos atrás #133561

Thomas, não vou receber uma resposta? ????

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

8 anos atrás #133566

Desculpe-me pela resposta tardia. Infelizmente, não é tão simples assim, porque o preço de uma negociação é definido algum tempo antes de essa função ser chamada, inclusive para ordens de mercado.

Mas você pode adicionar o seguinte trecho de código logo após a chamada de sqIsTradeAllowed().

Ele atualizará o preço de mercado imediatamente antes de a ordem ser enviada.

 

 

   …
   // abrir ordem com tratamento de erros e novas tentativas
   int ticket = 0;
   int retries = 3;
   while(true) {
      tentativas-;
      if(retries < 0) return;
      if(getMarketPosition() != 0) return;
 
      se (sqIsTradeAllowed() == 1) {
         
         Se (orderType == OP_BUY || orderType == OP_SELL) {
            RefreshRates();
            openPrice = NormalizeDouble(getTradeOpenPrice(tradeDirection), Digits);
         }
 
         ticket = openOrderWithErrorHandling(orderType, orderLots, openPrice, stopLoss, profitTarget, comment, MagicNumber);
         se (ticket > 0) {
            se (tradeDirection > 0) {
                ObjectSetText("lines", "Last Signal: Long, ticket: "+ticket, 8, "Tahoma", LabelColor);
            {} else {
                ObjectSetText("lines", "Last Signal: Short, ticket: "+ticket, 8, "Tahoma", LabelColor);
            }
            retorno;
         }
      }

 

 

Marcar
EstratégiaQuant arquiteto

0

Dan

Cliente, bbp_participante, comunidade, 31 respostas.

Perfil da visita

8 anos atrás #133576

Olá Mark,

Obrigado por responder, adicionarei o trecho de código e verei se funciona........ Mais uma vez, obrigado

0

Visualizando 14 respostas - 1 até 14 (de um total de 14)