EA kollidiert bei Verwendung mehrerer Paare... - Seite 3

 
Ah, ich habe es herausgefunden!

Ich musste die Ordermodifikation von der Funktion "int start()" aus aufrufen, wenn auch "If(IsNewCandle())" aufgerufen wird. Daher wird bei JEDEM Stundenschluss die "void OrderModify", die die PENDING-Order modifiziert, wenn der Orderstoploss > iMA-ATR ist, modifiziert und entsprechend kalibriert.

So, das macht jetzt seine Arbeit richtig :) Jetzt lese ich, bis mir die Augen bluten... :)
 
RaptorUK:

Das ist das Problem... (ähnlich für OP_SELL)

. . . und wenn Sie eine Fehlermeldung 1 erhalten, liegt das daran, dass OrderStopLoss() == BuyStopPrice ist, so dass Sie die Order so ändern, dass sie denselben StopLoss-Wert hat, daher Fehlermeldung 1, und jetzt fragen Sie sich, wie einerseits OrderStopLoss() == BuyStopPrice und andererseits OrderStopLoss() < BuyStopPrice

Sind Sie dem Link im Beitrag gefolgt und haben ihn gelesen, bis Ihnen die Augen bluteten? Ich wette, das haben Sie nicht... https://www. mql5.com/en/forum/146380 wenn Sie dieses Problem weiterhin ignorieren, wird es Sie immer wieder einholen und Sie werden weiterhin Zeit verschwenden... setzen Sie sich damit auseinander, verstehen Sie es, leiden Sie nicht länger darunter, seien Sie glücklich


except with zero never compare doubles for equality < Könnte das sein, wonach ich bei WHRoeder gesucht habe...?
if (a > b)
if (a - b > Point / 2.)
if (a >= b)
if (a - b > -Point)
if (a != b)
if (MathAbs(a - b) > Point / 2.)
 
DomGilberto:

außer mit Null niemals Doppelgänger auf Gleichheit vergleichen < Könnte dies das sein, was ich von WHRoeder gesucht habe...?
Sicherlich wird das funktionieren, verstehen Sie, warum und was das Problem ist?
 
Um ganz ehrlich zu sein, nein, das verstehe ich nicht... Ich habe allerdings damit experimentiert, es auszuschreiben und die Vergleiche auszudrucken...
 
DomGilberto:
Um ganz ehrlich zu sein, nein, das verstehe ich nicht... Ich habe allerdings damit experimentiert, es aufzuschreiben und die Vergleiche auszudrucken...

1.51234000001 ist nicht dasselbe wie 1.51234000002, aber vom Standpunkt eines Preises aus gesehen sind beide 1.51234, also gleich ... sie sind also gleich, aber eine ist größer als die andere. Das hat alles mit der Art und Weise zu tun, wie Fließkommazahlen im Binärformat dargestellt werden, es ist ungenau, so dass es im Allgemeinen hier und da einen kleinen Fehler gibt. . .

Sehen Sie sich das an: Fließkommazahlen

 

Aber warum würde NormalizedDouble, Digits das nicht ausgleichen? Warum werden die zusätzlichen unnötigen Dezimalstellen mit einbezogen? Ich verstehe die Tatsache, dass man NormalizeDouble nicht auf vordefinierte Variablen anwenden muss, aber welchen Sinn hat es, NormalizeDouble auf nicht vordefinierte Variablen anzuwenden und dann zu versuchen, sie zu vergleichen, wenn sie niemals übereinstimmen werden :s?

Seltsam!

Wenn ich "If(Bid > OrderOpenPrice())" machen wollte, würde das nicht funktionieren, oder? Müsste ich die oben genannten Regeln für jede Vergleichsanweisung anwenden, d. h. "If(Bid - OrderOpenPrice() > Point / 2.)"?


Oh, und was If(Bid == OrderOpenPrice()), gibt es etwas, das ich mit dieser Anweisung tun müssen?

 
DomGilberto:

Aber warum würde NormalizedDouble, Digits das nicht ausgleichen? Warum werden die zusätzlichen unnötigen Dezimalstellen mit einbezogen? Ich verstehe die Tatsache, dass man NormalizeDouble nicht auf vordefinierte Variablen anwenden muss, aber welchen Sinn hat es, NormalizeDouble auf nicht vordefinierte Variablen anzuwenden und dann zu versuchen, sie zu vergleichen, wenn sie niemals übereinstimmen werden :s?

NormalizeDouble behebt das Problem nicht, es verwandelt 1 .51234000001 nicht in 1.51234, sondern "verwirrt" es nur auf eine andere Art und Weise ... wenn du es also verwendest, hoffst du, dass es alle deine Werte auf dieselbe Art und Weise verwirrt.

DomGilberto:


Wenn ich "If(Bid > OrderOpenPrice())" machen wollte, würde das nicht funktionieren, oder? Müsste ich die oben genannten Regeln für jede Vergleichsanweisung anwenden, d. h. "If(Bid - OrderOpenPrice() > Point / 2.)"?

Ja, wenn Sie sicher sein wollen, dass Ihr Vergleich ein genaues Ergebnis liefert, ja.

DomGilberto:

Oh, und was If(Bid == OrderOpenPrice()), gibt es irgendetwas, was ich mit dieser Anweisung tun muss?

Ja, es wird unter genau demselben Problem leiden...
 
Ok danke - ich habe dramatisch reduziert die OrderModify Fehler 1 - jedoch bin ich immer noch ein wenig hin und wieder? Scheint, wie es ist die MA_trail ungültig? Auch, wie würde ich richtig schreiben "If(Bid == OrderOpenPrice())?
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//Moving Average Trailing Stop Function
//+----------------------------------------------------------------------------------------------------------------------------------------+   
void MA_Trail()

{

   double ATR = iATR(NULL,60,14,1);
   double MA = iMA(NULL,60,MA_Period,0,1,0,1);
   
   double BuyStopPriceMath = MA - ATR;
   double SellStopPriceMath = MA + ATR;
   
   double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5);
   double SellStopPrice = NormalizeDouble(SellStopPriceMath,5);

   for(int b=OrdersTotal()-1; b>=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==MagicNumber)
            if(OrderSymbol()==Symbol())
               {

               if(OrderType()==OP_BUY)
                  {
                  if(OrderStopLoss() - BuyStopPrice > Point / 2.) continue;
                  if(BuyStopPrice - OrderStopLoss() > Point / 2.)
                     bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE);
                   if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError());
                   }     

    
               if(OrderType()==OP_SELL)
                  {
                  if(SellStopPrice - OrderStopLoss() > Point / 2. ) continue;
                  if(OrderStopLoss() - SellStopPrice > Point / 2. )
                     bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE);
                  if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError());
                  }
              }   
      }
} 
 
DomGilberto:
Ok, danke - ich habe den OrderModify-Fehler 1 drastisch reduziert - aber ich bekomme immer noch ab und zu ein bisschen? Scheint es, wie es die MA_trail void ist? Auch, wie würde ich richtig schreiben "If(Bid == OrderOpenPrice())?

Deine Augen bluten nicht genug...

Du könntest etwas in der Art machen:

!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )

Vorsicht mit dem !

Von hier: https://www.mql5.com/en/forum/136997/page4#781986

 
Soll dies im Zusammenhang mit dem obigen Code oder mit "If(Bid == OrderOpenPrice())" geschehen ?