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

 
Vitalie Postolache:

A continuación, pasar el argumento a la función, ya que se proporciona. Aunque es mejor quitarlo, es una tautología.

Y no todos los pedidos del bucle se recalcularán.

for(i=OrdersTotal()-1; i>=0; i--)
Me parece bien que los comparen con sus propios EAs, porque no tienen tan buen precio.
Lo corregí, inserté un argumento, lo puse en el ámbito global, ahora genera una advertencia de que este argumento ya se utiliza como entrada en otras funciones

El billete con sobreescritura, trabajando desde la última orden con un Martin.

y luego cómo eliminar la declaración global de 'count' hides en la línea...

es interesante hacer que funcione como debería.

Hasta ahora, el probador muestra resultados bastante buenos, y a veces "errores insuperables en el Asesor Experto".

 

Saludos.

Me encontré con una grabación en este formato:

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

Es decir, aquí se ha sustituido la sentencia condicional if por una función comercial de tipo bool en lugar de una expresión. ¿Entiendo correctamente que dicha escritura es igual a :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

He buscado tanto en la Ayuda como en el tutorial, pero no he encontrado dicho formato.

¿Puedo utilizar este modo para escribir directamente funciones de otro tipo en lugar de una expresión? Y si es así, ¿cuál sería el algoritmo?

 
trader781:
Lo arreglé, puse un argumento, lo puse en el ámbito global, ahora genera una advertencia de que este argumento ya se utiliza como entrada en otras funciones

Billete con sobreescritura, trabajo desde el último pedido con martin

y luego cómo eliminar la declaración de 'count' oculta la declaración global en la línea...

Es interesante hacer que funcione como debería.

Hasta ahora, el probador muestra resultados bastante buenos, y a veces "errores insuperables en el Asesor Experto".

Por favor, muéstrame la versión corregida, porque adivinar sale sin el código.
 
spoiltboy:

Saludos.

Me encontré con una grabación en este formato:

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

Es decir, aquí se ha sustituido el operador condicional por una función comercial de tipo bool en lugar de una expresión. ¿Entiendo correctamente que dicha escritura es igual a :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

He buscado tanto en la Ayuda como en el tutorial, pero no he encontrado dicho formato.

¿Puedo utilizar este modo para escribir directamente funciones de otro tipo en lugar de una expresión? Si es así, ¿cuál sería el algoritmo?

Asísi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; no funcionará. La condición no debe ser lanzada fuera de los paréntesis.

Perosi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; puede.

 
Vitalie Postolache:

Asísi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; no funcionará. La condición no debe ser lanzada fuera de los paréntesis.

Perosi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; puede.

Sí, se me escapó un error de imprenta con un paréntesis. Por lo demás, la pregunta es pertinente.
 
Vitalie Postolache:
Por favor, muéstrame la versión corregida, porque sin el código es adivinar.

De acuerdo.

Terminé lo que pude. La descripción está hecha. El objetivo es entender por qué no funciona como quiero.

Archivos adjuntos:
count.mq4  19 kb
 
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 1000; //Стоплосс ордера  
extern double TakeProfit   = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =200;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b,s,p,res;
   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP) b++;
        if (OrderType()==OP_SELLSTOP) s++;        
      }  
    }
      double SL,TP;
//---- buy stop
   if(RSI0>50&&RSI1<50)
     {
          
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50)
     {

      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
     }
//---- buy stop делете
      if(RSI0<50&&RSI1>50)
    {
     OrderDelete( OrderTicket());
    
    }
//---- sell stop делете
      if(RSI0>50&&RSI1<50)
    {
     OrderDelete( OrderTicket());
    
    }
//----
   return(0);
  }
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------

void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
        
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }  
   }
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
Los pedidos no se borran, por favor, ayuda
 

Los pedidos no se borran, por favor, ayuda
¿cómo ha conseguido un ticket de un pedido sin abrir?
 
trader781:
¿y cómo consiguió el billete para el pedido no abierto?
¿Verdad? No puedo meterlo ahí.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
 
Movlat Baghiyev:
¿Verdad? No puedo meterlo ahí.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
No sé cómo explicarlo. Pero sin duda es una obra maestra.