Sie müssen einen Ratgeber schreiben. Ich habe eine Idee. - Seite 4

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

Dies geschieht in 2 Schritten.

1) Eröffnung auf dem Markt TP = 0, SL = 0

2) Ändern Sie SL, TP.

Oder habe ich es falsch verstanden?

 
meta-trader2007 >> :

Eigentlich ist dieser TS auf H1-Zeitrahmen und höher profitabel (aber nicht immer, und manchmal - während eines No-Trend).

Die Hauptsache ist, nicht zu verwenden TP und Schleppnetz hat 3 oder mehr mal der Haltestelle sein.

Ich muss an der falschen Stelle getestet haben =)

 
GarF1eld >> :

Es wird in 2 Schritten durchgeführt.

...

Oder habe ich es falsch verstanden?

Es ist besser, den Gleichstrom durch einen normalen Gleichstrom zu ersetzen.

vielleicht habe ich an der falschen Stelle getestet =)

Sie müssen eine schlampige Geschichte testen)

Und so geht es an den Kontrollpunkten:


 
Ich habe einen kleinen Vorsprung.)
 
meta-trader2007 >> :

Es ist besser, den Gleichstrom durch einen normalen Gleichstrom zu ersetzen.

Sie müssen eine Geschichte von schlechter Qualität testen)

Und so geht es an den Kontrollpunkten weiter:


Könnten Sie dem Expert Advisor bei ausstehenden Aufträgen hinzufügen, dass vorherige Aufträge gelöscht werden, wenn das nächste Auftragspaar geöffnet wird?

Das wäre sehr gut... und der Handelsfluss wäre nicht verstopft... die 418 Fehler tauchen auf

 
Und löschen, wenn eine der bereits geöffneten ausgelöst wird)
 
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, stellen Sie Ihre Testergebnisse hier ein.

 

diese EAs in der Demo laufen lassen, werden keine Aufträge erteilt.... Was ist der Grund dafür?

 
dimasik >> :

diese EAs in der Demo laufen lassen, werden keine Aufträge erteilt.... Was ist der Grund dafür?

Schwebende Aufträge werden zu Beginn eines neuen Balkens platziert, wenn es keine entsprechenden offenen Positionen gibt.

Schreiben Sie hier über die positiven Ergebnisse des Testers mit dem angebrachten Stapel.

 

Als ich den Experten exp_Higt-Low.mq4 in Echtzeit auf der DAX-Demo getestet habe (5 Stunden lang), zeigte er zunächst einen Gewinn an, und dann begann er zu verlieren.

Ich habe nur eines zu sagen: Es ist möglich, in dieser Richtung zu arbeiten. Das einzige Problem ist, dass mein Expert Advisor versucht, einen Handelsfluss mit schwebenden Aufträgen zu laden, weshalb er eine Aufgabe hat, schwebende Aufträge zu schließen, zum Beispiel, wenn einer der schwebenden Aufträge ausgelöst wird oder wenn ein neues Paar schwebender Aufträge eröffnet wird.

zu mql4com

Könnten Sie die von meta-trader2007 gepostete exp_Higt-Low.mq4 hinzufügen, wie ich es oben beschrieben habe?

Ich werde die Tests morgen fortsetzen.