Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1855

 
Порт-моне тв a iOpen conta para Ask or Bid?

A questão é que comparar o preço aberto para hoje com o preço aberto para ontem parece levar à propagação da colocação e então eu me meto em problemas no código. Eu posso negociar apenas ofertas ou vendas porque os preços da iOpen não são corretos em alguns dias.

O gráfico é baseado no preço de licitação

 

Rapazes, por favor, avisem.

Estou escrevendo um EA com várias moedas, tudo funciona como planejado, exceto a abertura de pedidos. Por favor, diga-me qual é o problema.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Não recebo nenhum erro, apenas não abro pedidos

 
Sergey Dymov um EA com várias moedas, tudo funciona como planejado, exceto a abertura de pedidos. Por favor, diga-me qual é o problema.

Eu não recebo nenhum erro, apenas não abre pedidos

OrderSend

Valor retornado

Devolve o número do ticket atribuído ao pedido pelo servidor comercial ou -1 em caso de falha. Para obter informações sobre erros, você precisa ligar para GetLastError().

Até o compilador lhe diz que o Orderend deve ser verificado.

A compra é feita com a Ask. Mas também pode funcionar com Bid, se o deslize for pelo menos igual à propagação, o que pode tornar mais difícil encontrar este bug.

 

uma EA com várias moedas e tudo está funcionando como planejado, exceto a abertura de pedidos. Estou à procura de mensagens de erro.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Não está dando nenhum erro, apenas não está abrindo um pedido.

Você notou onde está o erro?

       if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         int nDigits = (int)MarketInfo("USDJPY", MODE_DIGITS);
         OrderSend("USDJPY", OP_SELL, 0.1, NormalizeDouble(Bid1, nDigits), 3, NormalizeDouble((Ask1-StopLoss*Point1), nDigits), NormalizeDouble((Ask1+TakeProfit*Point1), nDigits), NULL, magic, 0, 0);
        }

https://docs.mql4.com/ru/trading/ordersend

Примечание

Ao abrir uma ordem de mercado (OP_SELL ou OP_BUY), somente os últimos preços Bid (para venda) ou Ask (para compra) podem ser usados como preço de abertura. Se a operação for realizada para um instrumento financeiro, diferente do atual, então para obter as últimas cotações para este instrumento, deve-se usar a funçãoMarketInfo() com o parâmetro MODE_BID ou MODE_ASK.

Você não pode usar um preço estimado ou não-normalizado. Se o preço de abertura solicitado não estava no fluxo de preços, ou o preço solicitado não está normalizado de acordo com o número de casas decimais, será gerado o erro 129 (ERR_INVALID_PRICE). Se o preço de abertura solicitado estiver severamente desatualizado, será gerado um erro 138 (ERR_REQUOTE), independentemente do valor do parâmetro de escorregamento. Se, por outro lado, o preço solicitado estiver desatualizado mas ainda estiver presente no fluxo de preços, o pedido será aberto ao preço atual e somente se o preço atual cair dentro da faixa preço+deslizamento.

...

Também é desejável estabelecer uma magia única para o robô.

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
Mihail Matkovskij #:

o preço de abertura não estava no fluxo de preços ou o preço solicitadonão é normalizado de acordo como número de dígitos após o ponto decimal, então

.

Tanto quanto eu sei, Ask e Bid já estão normalizados. Uma questão semelhante já foi levantada e não houve contradição.

O magik e os dígitos de stoploss e lucro podem ser apropriados, mas a intenção do autor não é conhecida.

 
Andrey Sokolov #:

Tanto quanto eu sei, Ask e Bid já estão normalizados. Uma questão semelhante já foi levantada e não houve contradição.

Talvez seja apropriado mencionar magik e dígitos de stop-loss e lucro, mas eu não sei qual é a idéia do autor.

Tanto quanto eu sei, a documentação não diz uma palavra sobre isso. Portanto, é melhor tomar precauções. Isso não vai piorar as coisas.

Em relação ao SL e TP, eles são calculados. E, portanto, devem definitivamente ser normalizadas de acordo com o valor dos dígitos.

 

Olá amigos.

 
Você pode me dizer se o lucro da história está circulado em azul, isso inclui comissão e troca?
 

Boa tarde.

Como eu recebo o tempo de abertura da segunda e das ordens subseqüentes, porque o OpenOrderTime() dá apenas a primeira, e também como eu recebo o preço de abertura da segunda e das ordens subseqüentes, porque o análogo OpenOrderPrice() também dá o preço da primeira?

 
Порт-моне тв obter o tempo de abertura da segunda e subseqüentes ordens desde OpenOrderTime() só dá a primeira, e também como faço para obter o preço de abertura da segunda e subseqüentes ordens desde OpenOrderPrice() também dá o preço da primeira?

coletar (ou lembrar/conhecer) tudo, ordenar por tempo aberto. Isso é o que, mas o tempo aberto não muda :-)

Se a lógica EA contém mais de 1 ordem (por exemplo, grade), então você terá que se lembrar de todas elas. Ou você terá que diminuir a velocidade tentando se lembrar de todos eles a cada espirro