Vous devez rédiger un conseiller. J'ai une idée. - page 4

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

Cette opération s'effectue en deux étapes.

1) Ouvrir sur le marché TP = 0, SL = 0

2) Modifier SL, TP.

Ou est-ce que je me suis trompé ?

 
meta-trader2007 >> :

En fait, ce TS est rentable sur les échelles H1 et plus (mais pas toujours, et parfois - pendant une absence de tendance).

L'essentiel est de ne pas utiliser le TP et le chalut doit être 3 fois ou plus l'arrêt.

Je dois avoir testé au mauvais endroit =)

 
GarF1eld >> :

C'est fait en 2 étapes.

...

Ou est-ce que je me suis trompé ?

Il vaut mieux changer le DC pour un DC normal.

peut-être que je testais au mauvais endroit =)

Vous devez tester sur une histoire bâclée)

Et voici comment sur les points de contrôle :


 
J'ai un peu d'avance.)
 
meta-trader2007 >> :

Il est préférable de remplacer le DC par un DC normal.

Vous devez tester sur une histoire de mauvaise qualité)

Et voici comment sur les points de contrôle :


Pourriez-vous ajouter à l'Expert Advisor sur les ordres en attente de supprimer les ordres précédents lorsque la paire d'ordres suivante est ouverte ?

Ce serait très bien... et le flux commercial ne serait pas obstrué... les erreurs 418 apparaissent...

 
Et supprimer lorsque l'un des dossiers déjà ouverts est déclenché).
 
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, postez vos résultats de test ici.

 

j'ai exécuté ces EAs sur la démo, les ordres ne sont pas placés.... Quelle en est la raison ?

 
dimasik >> :

j'ai exécuté ces EAs sur la démo, les ordres ne sont pas placés.... quelle en est la raison ?

Les ordres en suspens sont placés au début de la formation d'une nouvelle barre, à condition qu'il n'y ait pas de positions ouvertes correspondantes.

Écrivez ici les résultats positifs du testeur avec la pile jointe.

 

Lorsque j'ai testé l'expert exp_Higt-Low.mq4 en temps réel sur la démo DAX (pendant 5 heures), il a d'abord affiché un bénéfice, puis il a commencé à perdre.

Je n'ai qu'une chose à dire : il est possible de travailler dans cette direction. Le seul problème est que mon conseiller expert essaie de charger un flux de transactions avec des ordres en attente, c'est pourquoi il a une tâche pour fermer les ordres en attente, par exemple, lorsque l'un des ordres en attente se déclenche ou lorsqu'une nouvelle paire d'ordres en attente s'ouvre.

à mql4com

Pourriez-vous ajouter le fichier exp_Higt-Low.mq4 que meta-trader2007 a posté plus tôt comme je l'ai décrit ci-dessus ?

Je vais continuer les tests demain.