[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 751

 
ToLik_SRGV:

Der Fehler liegt auf der Hand: Es werden bei jedem Tick Positionen eröffnet, da der Verlustauftrag in der Historie nirgendwo hingeht, also wird er bei jedem Tick gefunden und die Werte der Kontrollvariablen mit denselben Werten gefüllt, und dann wird der Block der Eröffnungsgeschäfte ausgelöst.


Wie kann man es so einrichten, dass es nicht mehr danach sucht, oder besser gesagt, dass es nicht mehr nach etwas sucht, das bereits ausgearbeitet wurde?

 
FoxUA:

Wie kann ich es so einrichten, dass es nicht noch einmal danach sucht, oder besser gesagt, dass es nicht nach etwas sucht, das bereits bearbeitet wurde?

Nehmen Sie diesen Block heraus:

for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
 OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; 
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
            
            
         }
      }

Und ersetzen Sie sie durch diese:

   for(int cnt=OrdersHistoryTotal();cnt>0;cnt--){
      static int num_ticket;
      if(!OrderSelect(cnt-1, SELECT_BY_POS, MODE_HISTORY))break;
      if(OrderMagicNumber()== mag && OrderSymbol()==Symbol()){      
      if(num_ticket != OrderTicket())num_ticket = OrderTicket(); else break;
         if(OrderType() == OP_BUY){
            b=1;
            if(OrderClosePrice()==OrderTakeProfit())bt=1;
            if(OrderClosePrice()==OrderStopLoss())bs=1;
            bl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
         if(OrderType() == OP_SELL){
            s=1;
            if(OrderClosePrice()==OrderTakeProfit())st=1; 
            if(OrderClosePrice()==OrderStopLoss())ss=1;
            sl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
      }
   }

Es unterscheidet sich unter anderem dadurch, dass es sich die Ticketnummer des letzten Verlustgeschäfts merkt bzw. prüft und eine Eröffnung mit demselben Signal nicht zulässt.

 
ToLik_SRGV:

Werfen Sie dieses Gerät weg:


Vielen Dank für den Test, er scheint zu funktionieren.

 
Abzasc:

So etwas in der Art, denke ich.

SZY Die Taste zum Einfügen des Codes "SRC" ist umständlich zu bedienen, sie ist nicht leicht zu lesen.


Vielen Dank! Ich habe int für UseHourTrade2 statt boole geschrieben ))
 

Guten Tag, Freunde.

Ich würde Sie gerne zu diesem Thema konsultieren:

Ich arbeite derzeit an einem Indikator, der in das Fenster des ersten Währungspaares Messwerte (ZigZag) überträgt, die auf dem zweiten Währungspaar gebildet werden.

Aber ich bin auf ein Problem gestoßen:

zum Beispiel, wenn es eine große "Lücke" in Anführungszeichen: ein Paar ist als 1,4237 notiert, und die andere als 0,8345, dann diese Indikatoren erscheinen "verstreut" über den Bildschirm, die nicht sehr bequem visuell ...

Wie würden Sie die Konvertierung des Indikators "Koordinaten" aus dem zweiten Paar durchführen, unter Berücksichtigung der Notierungen des ersten Paares (wie man den Preis "relativ" zu machen)?

Vielen Dank im Voraus für den Rat und die Empfehlung.

 
Morzh09:

Guten Tag, Freunde.

Ich würde Sie gerne zu diesem Thema konsultieren:

Ich arbeite derzeit an einem Indikator, der in das Fenster des ersten Währungspaares Messwerte (ZigZag) überträgt, die auf dem zweiten Währungspaar gebildet werden.

Aber ich bin auf ein Problem gestoßen:

zum Beispiel, wenn es eine große "Lücke" in Anführungszeichen: ein Paar ist als 1,4237 notiert, und das andere als 0,8345, dann diese Indikatoren erscheinen "verstreut" über den Bildschirm, die nicht sehr bequem visuell ...

Wie würden Sie die Konvertierung des Indikators "Koordinaten" aus dem zweiten Paar durchführen, unter Berücksichtigung der Notierungen des ersten Paares (wie man den Preis "relativ" zu machen)?

Vielen Dank im Voraus für den Rat und die Empfehlung.

Sehen Sie sich den Link an. Die Skalierung selbst wird dort auf originelle Weise vorgenommen.

https://www.mql5.com/ru/code/7933

 

Hallo!

Können Sie mir sagen, wie ich das vereinfachen kann?

wenn (Saldo > 600)

{

Lot_mod = 0.1;

}

wenn (Saldo > 700)

{

Lot_mod = 0,11;

}

wenn (Saldo > 800)

{

Lot_mod = 0,12;

}

wenn (Saldo > 900)

{

Lot_mod = 0,13;

}

Und so weiter.... Weil es in dieser Form zu weitläufig ist.

Ich danke Ihnen!

 
Lim1:

Hallo!

Können Sie mir bitte sagen, wie das vereinfacht werden kann?

Und so weiter.... Es ist in dieser Form zu weitläufig.

Ich danke Ihnen!





Eine Gleichung der Form y=a*x+b ist hilfreich
 
Lim1:

Hallo!

Können Sie mir bitte sagen, wie ich das vereinfachen kann?





die Formel für die Berechnung des Loses festlegen und das war's, sonst müssen Sie sich um
 

Lim1, versuchen Sie es so:

int BalanceExcessIn100s = MathFloor( ( Balance - 600 ) / 100.01 );
Lot_mod = BalanceExcessIn100s * 0.01 + 0.1;