Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1856

 

Un consejo. Estoy perplejo con una pregunta.

¿Cómo cuentaiOpen para el Ask o el Bid?

double DayOpenone = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 0), Digits);

double DayOpentwo = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 1), Digits); 

El asunto es que al comparar el precio de apertura de hoy con el precio de apertura de ayer parece que se produce una colocación de spreads y luego hay más problemas en el código. O bien sólo se negocian bai o ventas porque los precios de iOpen no son correctos en algunos días.

 
Порт-моне тв iOpen para el Ask o el Bid?

El asunto es que al comparar el precio de apertura de hoy con el de ayer parece que se produce una colocación de spreads y entonces tengo problemas en el código. Puedo negociar sólo ofertas o ventas porque los precios de iOpen no son correctos en algunos días.

El gráfico se basa en el precio de oferta

 

Chicos, por favor, aconsejadme.

Estoy escribiendo un EA multidivisa, todo funciona según lo previsto excepto la apertura de órdenes. Por favor, dígame cuál es el 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);
        }

No me da ningún error, simplemente no abro los pedidos

 
Sergey Dymov un EA multidivisa, todo funciona según lo previsto excepto la apertura de órdenes. Por favor, dígame cuál es el problema.

No me da ningún error, simplemente no abre los pedidos

PedirEnviar

Valor devuelto

Devuelve el número de ticket asignado a la orden por el servidor de comercio o -1 en caso de fallo. Para obtener información sobre el error, es necesario llamar a GetLastError().

Incluso el compilador te dice que hay que comprobar el orden.

La compra se hace con Ask. Pero también puede funcionar con Bid, si el deslizamiento es al menos igual al spread, lo que puede hacer más difícil encontrar este fallo.

 

un EA multidivisa y todo funciona según lo previsto excepto la apertura de órdenes. Estoy buscando mensajes de error.

      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);
        }

No da ningún error, simplemente no abre un pedido.

¿Te has dado cuenta de dónde está el error?

       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

Примечание

Cuando se abre una orden de mercado (OP_SELL u OP_BUY), sólo se pueden utilizar como precio de apertura los últimos precios Bid (para vender) o Ask (para comprar). Si la operación se realiza para un instrumento financiero, diferente del actual, entonces para obtener las últimas cotizaciones de este instrumento, se debe utilizar la funciónMarketInfo() con el parámetro MODE_BID o MODE_ASK.

No puede utilizar un precio estimado o no normalizado. Si el precio de apertura solicitado no estaba en el flujo de precios, o el precio solicitado no está normalizado según el número de decimales, se generará el error 129 (ERR_INVALID_PRICE). Si el precio de apertura solicitado está muy desfasado, se generará un error 138 (ERR_REQUOTE) independientemente del valor del parámetro de deslizamiento. Si, por el contrario, el precio solicitado está desfasado pero sigue presente en el flujo de precios, la orden se abrirá al precio actual y sólo si el precio actual se encuentra dentro del rango de precio+desplazamiento.

...

También es deseable establecer una magia única para el robot.

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

el precio de apertura no estaba en el flujo de precios o el precio solicitadono está normalizado segúnel número de dígitos después del punto decimal, entonces

.

Que yo sepa, Ask y Bid ya están normalizados. Ya se ha planteado una cuestión similar y no ha habido ninguna contradicción.

La magia y los dígitos del stoploss y el beneficio pueden ser apropiados, pero no se sabe la intención del autor.

 
Andrey Sokolov #:

Que yo sepa, Ask y Bid ya están normalizados. Ya se ha planteado una cuestión similar y no ha habido ninguna contradicción.

Tal vez sea apropiado mencionar el magik y los dígitos de stop-loss y profit, pero no sé cuál era la idea del autor.

Que yo sepa, la documentación no dice nada al respecto. Así que será mejor que tome precauciones. No lo hará peor.

En cuanto al SL y el TP, se calculan. Y, por lo tanto, deberían normalizarse definitivamente según el valor de los dígitos.

 

Hola amigos.

 
¿Puedes decirme si el beneficio de la historia está marcado con un círculo azul, incluye la comisión y el canje?
 

Buenas tardes.

¿Cómo obtengo la hora de apertura de la segunda y siguientes órdenes, porque OpenOrderTime() sólo da la primera, y también cómo obtengo el precio de apertura de la segunda y siguientes órdenes, porque el análogo OpenOrderPrice() también da el precio de la primera?