Tienes que escribir un asesor. Tengo una idea. - página 4

 
dimasik >>:
lascu.roman, ты можешь сделать чтобы ордера открывались не с рынка, а отложенниками??? Это важно, потому что брокер с рынка не принимает сразу установку SL и TP. Вот.

Esto se hace en 2 pasos.

1) Apertura en el mercado TP = 0, SL = 0

2) Modificar SL, TP.

¿O me he equivocado?

 
meta-trader2007 >> :

En realidad esta TS es rentable en los marcos de tiempo H1 y superiores (pero no siempre, y a veces - durante una no-tendencia).

Lo principal es no usar TP y el arrastre tiene que ser 3 o más veces de parada.

debo haber estado probando en el lugar equivocado =)

 
GarF1eld >> :

Se hace en 2 pasos.

...

¿O me he equivocado?

Mejor cambiar la CC por una normal.

tal vez estaba probando en el lugar equivocado =)

Tienes que probar en una historia de mala calidad)

Y así es como en los puntos de control:


 
Tengo un poco de ventaja).
 
meta-trader2007 >> :

Es mejor cambiar la CC por una normal.

Hay que probar en una historia de mala calidad)

Así es como en los puestos de control:


¿Podría añadir al Asesor Experto en órdenes pendientes que se eliminen las órdenes anteriores cuando se abra el siguiente par de órdenes?

Sería muy bueno... y el flujo comercial no se obstruiría... los 418 errores están surgiendo

 
Y eliminar cuando se dispara una de las que ya están abiertas)
 
extern bool Limits = TRUE; // TRUE - LIMIT orders; FALSE - STOP orders
extern double Distance = 10; // Probably less than zero
extern double TP = 144;
extern double SL = 55;
extern double TralSL = 34;
extern double Lots = 0.1;

double Spread;

void init()
{
  Distance *= Point;
  TP *= Point;
  SL *= Point;
  TralSL *= Point;
  
  Spread = Point * MarketInfo(Symbol(), MODE_SPREAD);
  
  return;
}

void TrailingOrders()
{
  int i, Total = OrdersTotal();
  double Difference, tp, sl;
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
   
    if (OrderType() == OP_BUY)
    {
      sl = Bid - TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference > 0)
      {
        sl = NormalizeDouble( sl, Digits);
        
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
    else if (OrderType() == OP_SELL)
    {
      sl = Ask + TralSL;
      Difference = NormalizeDouble( sl - OrderStopLoss(), Digits);
        
      if ( Difference < 0)
      {
        sl = NormalizeDouble( sl, Digits);
       
        OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);
      }
    }
  }
  
  return;
}

bool OrderScan( int TypeOrder )
{
  int i, Total = OrdersTotal();
  
  for ( i = 0; i < Total; i++)
  {
    OrderSelect( i, SELECT_BY_POS);
    
    if (OrderType() == TypeOrder)
      return(TRUE);
  }
  
  return(FALSE);
} 

void MyOrderSend( int TypeOrder, double open, double sl, double tp )
{
  if ( OrderScan( TypeOrder))
    OrderModify(OrderTicket(), open, sl, tp, 0);
  else
    OrderSend(Symbol(), TypeOrder, Lots, open, 0, sl, tp);
      
  return;
}

void OpenOrders( double H, double L )
{
  double open, tp, sl;
  
  if ( Limits)
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( L - Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYLIMIT, open, sl, tp);
    }
  
    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( H + Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLLIMIT, open, sl, tp);
    }
  }
  else
  {
    if (! OrderScan(OP_BUY))
    {
      open = NormalizeDouble( H + Distance + Spread, Digits);
      tp = NormalizeDouble( open + TP, Digits);
      sl = NormalizeDouble( open - SL, Digits);
  
      MyOrderSend(OP_BUYSTOP, open, sl, tp);
    }

    if (! OrderScan(OP_SELL))
    {
      open = NormalizeDouble( L - Distance, Digits);
      tp = NormalizeDouble( open - TP, Digits);
      sl = NormalizeDouble( open + SL, Digits);
  
      MyOrderSend(OP_SELLSTOP, open, sl, tp);
    }
  }
  
  return;
}

void start()
{
  static int PrevTime = 0;

  TrailingOrders();
  
  if ( PrevTime == Time[0])
    return;
    
  PrevTime = Time[0];
  
  OpenOrders(High[1], Low[1]);
  
  return;
}


mpeugep, publica aquí los resultados de tus pruebas.

 

corrió estos EAs en la demo, las órdenes no se colocan.... ¿Cuál es la razón?

 
dimasik >> :

corrió estos EAs en la demo, las órdenes no se colocan.... ¿cuál es la razón?

Las órdenes pendientes se colocan al principio de la formación de una nueva barra, siempre que no haya posiciones abiertas correspondientes.

Escriba aquí sobre los resultados positivos del probador con la pila adjunta.

 

Cuando probé el experto exp_Higt-Low.mq4 en tiempo real en la demo del DAX (durante 5 horas), al principio mostró un beneficio, y luego empezó a perder.

Sólo tengo una cosa que decir: es posible trabajar en esta dirección. El único problema es que mi Asesor Experto intenta cargar un flujo de operaciones con órdenes pendientes, por eso tiene una tarea para cerrar las órdenes pendientes, por ejemplo, cuando una de las órdenes pendientes se dispara o cuando se abre un nuevo par de órdenes pendientes.

a mql4com

¿podría añadir el exp_Higt-Low.mq4 que meta-trader2007 publicó anteriormente como he descrito anteriormente?

Mañana seguiré haciendo pruebas.

Razón de la queja: