Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1776

 
MakarFX #:

Sie haben die Möglichkeit, zwei auf einmal zu öffnen, wenn es keine offenen gibt.

Was ist das?

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

Dieses Ding zählt das aktuelle Los.

Dieser Parameter wird in den Einstellungen festgelegt: LotControl

bzw. wenn: GetLotSize()>LotControl - Ich brauche es, um vOrderOpenSell() auf bSignalBuy() Signal zu öffnen.

Ja, ich weiß, dass beide Aufträge durch die Bedingung eröffnet werden. Aber wie kann ich erreichen, dass vOrderOpenBuy() nicht geöffnet wird?

 
Mihail Matkovskij #:

Wenn der Roboter bereits in einer Richtung in den Markt eingestiegen ist, steigt er nicht noch einmal in dieselbe Richtung ein. Funktioniert Ihr Eingabealgorithmus so?

Wenn diese Bedingungerfüllt ist, wird Folgendes ausgelöst

Nach

Und auch, wenn es ein Verkaufssignal gibt.

Der Grund für den Eintritt in die entgegengesetzte Richtung ist dann, dass die Bedingung ausgelöst wird

Ja, das ist es, was ich brauche. ABER es muss ein Vorwärtseintrag durch diese Bedingung gestoppt/ausgeschlossen werden:

GetLotSize()>LotControl
 
Kedrov #:

Danke, Makar, dass du dich mit mir angelegt hast!

Hier ist ein Bildschirmfoto.

Ja, du hast ein Chaos angerichtet)

Benennen Sie nun in jedem Ordner nacheinander die Ordner Experts in _Experts und Indicators in _Indicators um.

In einem Ordner umbenannt - Terminal starten, wenn es nicht geholfen hat - wieder umbenennen und zum nächsten Ordner gehen.

P.S. Beim ersten Mal wird es etwas länger dauern, bis das Terminal gestartet ist als sonst.

 
законопослушный гражданин #:

dieses Ding zählt die aktuelle Losgröße

dieser Parameter wird in den Einstellungen festgelegt: LotControl

bzw. wenn: GetLotSize()>LotControl - Ich brauche vOrderOpenSell(), um auf das Signal bSignalBuy() zu reagieren.

Ja, ich weiß, dass beide Aufträge durch die Bedingung eröffnet werden. Aber wie kann ich erreichen, dass vOrderOpenBuy() nicht geöffnet wird?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

Ja, das ist es, was ich brauche. ABER sie muss den Eintritt in die Zukunft durch diese Bedingung stoppen/ausschließen:

Dieser Zustand verwirrt mich

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

mit dieser Bedingung

GetLotSize()=0
 
MakarFX #:

Danke, korrigiert, ich werde darüber nachdenken.

 
MakarFX #:

Dieser Zustand verwirrt mich

Unter dieser Bedingung.

Es sieht so aus, als hätten Sie Recht.

Richtig:

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

reagiert überhaupt nicht auf die Bedingung (GetLotSize()>LotControl)

 
законопослушный гражданин #:

Es sieht so aus, als hätten Sie Recht.

Richtig:

reagiert überhaupt nicht auf die Bedingung (GetLotSize()>LotControl)

GetLotSize() muss von der letzten geschlossenen genommen werden, dann bei

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl) wird funktionieren
 
MakarFX #:

GetLotSize() sollte von der letzten geschlossenen genommen werden, dann bei

(GetLotSize()>LotControl) wird funktionieren

herzlichen Dank!

 
законопослушный гражданин #:

Ja, das ist es, was ich brauche. ABER dabei müssen Sie die Vorwärtseintragung durch diese Bedingung stoppen/ausschließen:

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   for (int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }