Sí. Pero por regla general no se escriben más de tres, porque ese código es difícil de leer después, sobre todo si ha pasado mucho tiempo desde que se escribió. Es mejor dividir estos muchos ifs anidados en funciones separadas. O bien, utilizar el operador del interruptor ... caso
¿hay alguna forma de hacer que si hago clic después de que entre un nuevo tick, no aparezca una nueva ventana, sino que se utilicen los valores de la primera ventana?
voidOnTick()
{
if (Orders()<1 && (1==message || !use_MessageBox)){
ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0;
}
if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
if(use_PlaySound) PlaySound ("tick");
message=-2;
message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
}
if (Orders()<1 && (1==message || !use_MessageBox)){
ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0;
}
}
void Trailing()
{
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
Print("error order modify");
}
}
}
}
}
}
if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
Print("error order modify");
}
}
}
}
//--------------------------------------------------------
Buenas tardes, en las pruebas el trailing funciona como se espera, pero en la vida real no, o solo de vez en cuando, de vez en cuando spamea con el error OrderModify error 4108, no puedo entender que es lo que está mal, por favor corríjanlo, entiendo que el EA no selecciona correctamente las órdenes para su modificación.
Me gustaría describir mi EA:
Cuando dos MAs se cruzan, abre 2 posiciones, una corta y otra larga por arte de magia. El corto se cierra en Takei o en el cruce de MA, el largo debe arrastrar. La selección de una posición larga para una red de arrastre se hace sobre el número mágico.
Tal vez haya cometido un error en alguna parte del código en la apertura de la posición:
//BUYif (fast1>slow1&&fast2<slow2)
{
if (StopLoss_1>0) sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits); else sl=0;
if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
}
//BUY_2if (fast1>slow1&&fast2<slow2)
{
if (StopLoss_2>0) sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits); else sl=0;
if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
}
//SELLif(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits); else sl=0;
if (StopLoss_1>0) tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
}
//SELL_2if(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits); else sl=0;
if (StopLoss_2>0) tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
}
No sé, ¿tal vez debería abrir las órdenes a través de un bucle? ¿Y cómo escribir correctamente este código para que se establezcan los stops y Take Profits correctos? Tal y como lo he escrito - funciona sólo para la Venta, para la Compra establece el Stop en 0.
(Por favor, ayúdenme a seguir el camino correcto))
¿Puedes detallar lo que entra? Lo que escribí fue una cita de un conocido. Lo he copiado y pegado. Está tratando de enseñarme MQL. Me estoy devanando los sesos, así que, por favor, escribe lo que entra.
¿Puedes detallar lo que entra? Lo que escribí fue una cita de un conocido. Lo he copiado y pegado. Está tratando de enseñarme MQL. Me estoy devanando los sesos, así que, por favor, escribe lo que entra.
a ) un signo de interrogación ( ?)
b ) barra invertida ( \ )
El uso de caracteres cirílicos es una característica no documentada
Caracteres que pueden utilizarse en los ID: dígitos 0-9, letras minúsculas y mayúsculas a-z y A-Z, reconocibles como caracteres diferentes, carácter de subrayado (_). El primer carácter no puede ser un número.
Hasta que te canses de escribirlas
en serio?)
Sí. Pero por regla general no se escriben más de tres, porque ese código es difícil de leer después, sobre todo si ha pasado mucho tiempo desde que se escribió. Es mejor dividir estos muchos ifs anidados en funciones separadas. O bien, utilizar el operador del interruptor ... caso
MessageBox()
¿hay alguna forma de hacer que si hago clic después de que entre un nuevo tick, no aparezca una nueva ventana, sino que se utilicen los valores de la primera ventana?
Buenas tardes, en las pruebas el trailing funciona como se espera, pero en la vida real no, o solo de vez en cuando, de vez en cuando spamea con el error OrderModify error 4108, no puedo entender que es lo que está mal, por favor corríjanlo, entiendo que el EA no selecciona correctamente las órdenes para su modificación.
Me gustaría describir mi EA:
Cuando dos MAs se cruzan, abre 2 posiciones, una corta y otra larga por arte de magia. El corto se cierra en Takei o en el cruce de MA, el largo debe arrastrar. La selección de una posición larga para una red de arrastre se hace sobre el número mágico.
Tal vez haya cometido un error en alguna parte del código en la apertura de la posición:
No sé, ¿tal vez debería abrir las órdenes a través de un bucle? ¿Y cómo escribir correctamente este código para que se establezcan los stops y Take Profits correctos? Tal y como lo he escrito - funciona sólo para la Venta, para la Compra establece el Stop en 0.
(Por favor, ayúdenme a seguir el camino correcto))
).
¿Puedes detallar lo que entra? Lo que escribí fue una cita de un conocido. Lo he copiado y pegado. Está tratando de enseñarme MQL. Me estoy devanando los sesos, así que, por favor, escribe lo que entra.
a ) signo de interrogación ( ?)
b) barra invertida (\ )
¿Puedes detallar lo que entra? Lo que escribí fue una cita de un conocido. Lo he copiado y pegado. Está tratando de enseñarme MQL. Me estoy devanando los sesos, así que, por favor, escribe lo que entra.
a ) un signo de interrogación ( ?)
b ) barra invertida ( \ )
El uso de caracteres cirílicos es una característica no documentada
Caracteres que pueden utilizarse en los ID: dígitos 0-9, letras minúsculas y mayúsculas a-z y A-Z, reconocibles como caracteres diferentes, carácter de subrayado (_). El primer carácter no puede ser un número.
sintaxis.
Hola, ¿podríais decirme por qué ZigD[0] no sale en algún momento?