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

 
HUNTERGOOD:

La solicitud, correctamente he creado de nuevo en la página 457 , en paost #4567 , y todo lo necesario: "indicador, lo que se necesita, y cómo exactamente" - allí, no es difícil de describir todo, establecer todo el corto y al punto, clara y distintamente, y lo que estaba mal en mi primer post, que mi una pequeña solicitud de este tipo, para el hombre que entiende en el código, ignoró seis páginas, y, finalmente, "bromear" mí en las "luces" - escribo aquí rechoncho.SOLICITUD DE DUPLICADO:

(((^^^^ Buenas tardes a todos. Estimados programadores, por favor ayúdenme a insertar una cadena con la capacidad de especificar el archivo de sonido para cada Alert3.Lv1;2;3, para activar un sonido diferente que se especifica. A mí tampoco se me da bien codificar y programar.^^))

¿Lo has probado en la carta, funciona?

 

Me pueden decir qué hacer: quiero colocar un stop y un take inmediatamente después de colocar cualquier orden. Si un EA abrió una orden, quiero establecer un stop y una toma. Siun operador abrió una orden, quiero establecer unstop y una toma. ¿Cómo debería describirlo con más precisión? Así, el Asesor Experto y el operador entienden dónde están estas órdenes.

Este código parece funcionar, pero ¿es correcto?

¿O es necesario organizar una acción para cada tipo de orden (Asesor Experto u operador) utilizando FOR?

Archivos adjuntos:
STOP_TAKE.txt  4 kb
 

Cómo hacerlo bien:1

2

 
Rewerpool:

Cómo hacerlo bien:

Los códigos se insertan normalmente aquí. La mayoría de la gente aquí es demasiado perezosa para analizar las imágenes.

 
Konstantin Nikitin:

Está bien pegar los códigos aquí. La mayoría de la gente aquí es demasiado perezosa para desmontar las fotos.

¡Pensé que había adjuntado el código completo primero! ¡Sólo el archivo! Mensaje. A continuación, describió más brevemente la situación en imágenes.

 

tipo de orden(Asesor Experto u operador) utilizando FOR?



//+------------------------------------------------------------------+

//| FUNCIÓN de Fijación de órdenes abiertas de Stops y Tomas
//+------------------------------------------------------------------+
void PARADA_TOMA()
{
int punta,Billete;
doble OOP,OSL,OTP;
int SPREAD = (int)MarketInfo(Symbol(),MODE_SPREAD);
si (stoploss<STOPLEVEL) stoploss=0;
si (takeprofit<STOPLEVEL) takeprofit=0;
for(int i=0; i<TotalPedidos(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
tip=Tipo de pedido();
//----------IfOrderTotal()
if(tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = OrderStopLoss();
OTP = OrderTakeProfit();
si ((OSL==0&stoploss!=0)||(OTP==0&&takeprofit!=0))
{
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY || tip==OP_BUYSTOP || tip==OP_BUYLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); si no SL=OSL;
si (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("SetStop ",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
else Print(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
if (tip==OP_SELL || tip==OP_SELLSTOP | tip==OP_SELLLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;
si (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
else Print(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
}
}
//----------If(tip<2 &&Order)
else if(tip<2 && OrderSymbol()==Symbol()&& OrderMagicNumber()!=Magic)
{
OSL = OrderStopLoss();
OTP = OrderTakeProfit();
si ((OSL==0&stoploss!=0)||(OTP==0&&takeprofit!=0))
{
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY || tip==OP_BUYSTOP || tip==OP_BUYLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); si no TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); si no SL=OSL;
si (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
else Print(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
if (tip==OP_SELL || tip==OP_SELLSTOP | tip==OP_SELLLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
if (stoploss!=0) SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;
si (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL," TP ",OTP," -> ",TP);
else Print(Symbol()," Error STOP_TAKE",GetLastError()," Ticket ",Ticket);
}
}
}
}
}
}
 
Rewerpool:

¡Pensé que había adjuntado el código completo primero! ¡Sólo el archivo! Mensaje. A continuación, describió más brevemente la situación en imágenes.

Bueno, por qué poner una foto aquí. Te lo cuento.

 
Rewerpool: Las órdenes colocadas manualmente tienen un número mágico de 0, el EA coloca con su propio número mágico. Esto es lo que debe utilizar como guía.
 

@Konstantin Nikitin ¡OK! ¿Es correcta la construcción del código para la apertura de la orden de toma de beneficios por el Asesor Experto o por el operador? Por eso he adjuntado una imagen para que la pregunta quede más clara.

 
Rewerpool:

@Konstantin Nikitin ¡OK! ¿Es correcta la construcción del código para la apertura de la orden de toma de beneficios por el Asesor Experto o por el operador? Por eso he adjuntado una imagen para que la pregunta quede más clara.

Yo lo habría hecho de la siguiente manera

for(int i=0; i<OrdersTotal(); i++)
{
     if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
     if(OrderSymbol()!=Symbol()) continue;
     
     int tip = OrderType();
     if(tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT) continue;
     
     // переменные которые будут использоваться в любых ордерах
     int Ticket = OrderTicket();
     double OOP = OrderOpenPrice();
     
     //---
     switch( OrderMagicNumber() )
     {
          case Magic:    // Ордера советника
               {
                    // что-то делаем
               }
               break;

          default:       // Все остальные
               {
                    // что-то делаем
               }
     }
}
Razón de la queja: