Kann Preis != Preis ? - Seite 6

 

Das nenne ich eine doppelte Portion Würmer.... (Wortspiel beabsichtigt;)

Es klingt so, als ob von den verschiedenen vorgeschlagenen benutzerdefinierten Funktionen keine einen Konsens erreicht hat. Möchte jemand an dieser Stelle mitteilen (kein Wortspiel beabsichtigt), welche Funktion er als seine tägliche CompareDouble-Funktion verwendet?

Offensichtlich müssen wir eine benutzerdefinierte CompareDouble-Funktion verwenden, wenn wir zuverlässige Systeme wollen.

 

Das Problem kann ignoriert werden, es sei denn, der EXAKTE Wert ist wichtig.

Wenn ich oberhalb eines (möglicherweise nicht normierten) Auslösepreises eröffnen möchte, verwende ich Bid > Trigger. Wenn der Auslöser aufgrund von Rundungen zufällig bei diesem Preis liegt, ist mir das eigentlich egal.

Wenn ich bei oder um einen (möglicherweise nicht normalisierten) Auslösepreis eröffnen möchte, prüfe ich auf eine Lücke: Bid > trigger && Bid < trigger+3*pips2dbl. Der Markt kann sich innerhalb eines Ticks leicht um einen ganzen Pip bewegen, so dass Bid == Trigger immer falsch ist und MathAbs(bid-trigger) < Point/2 zwar korrekt ist, aber höchstwahrscheinlich nicht funktioniert.

Wenn die Gleichheit wichtig ist, z.B. wenn ich einen SL verschieben möchte, aber zu nahe am Markt bin(Stop Level), dann verwende ich Bid - newSL > StopLelvel - Point/2

 
WHRoeder:

Das Problem kann ignoriert werden, es sei denn, der EXAKTE Wert ist wichtig.

Wenn ich über einem (möglicherweise nicht normierten) Auslösepreis eröffnen möchte, verwende ich Bid > Trigger. Wenn der Kurs aufgrund von Rundungen zufällig zum Auslöser wird, ist mir das egal.

Wenn ich bei oder um einen (möglicherweise nicht normalisierten) Auslösepreis eröffnen möchte, prüfe ich auf eine Lücke: Bid > trigger && Bid < trigger+3*pips2dbl. Der Markt kann sich innerhalb eines Ticks leicht um einen ganzen Pip bewegen, so dass Bid == Trigger immer falsch ist und MathAbs(bid-trigger) < Point/2 zwar korrekt ist, aber höchstwahrscheinlich nicht funktioniert.

Wenn die Gleichheit wichtig ist, z.B. wenn ich einen SL verschieben möchte, aber zu nahe am Markt bin (Stop Level), dann verwende ich Bid - newSL > StopLelvel - Point/2


Danke! Nun, das ist, was ich decocted thread nennen würde...

In der Tat, was Sie erwähnt ist sehr nah an meiner Anwendung: Ich stelle fest, ob der neue TakeProfit anders ist (nach Broker- oder MQL4-Standards) als der ursprüngliche TakeProfit, der bereits gesetzt und gesendet wurde. Ich vergleiche zwei Indikatorwerte und zwei TakeProfit-Werte, bevor OrderModify aufgerufen wird.

if (Volume[0]>1)return;
 
       for(int b=OrdersTotal()-1;b>=0; b--)
       {
       if(atr2kTP == atr2kTPAdjust|| btphold==btp)) return;//-----------This is where I am comparing them, and where the function would go.
         if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
           if(OrderMagicNumber()==MAGICMA)
             if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)                                  
                  atr2kTPAdjust=atr2kTP; 
                       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
 
       }              
         for(int s=OrdersTotal()-1;s>=0; s--)
         {
          if(atr2kTP == atr2kTPAdjust|| stphold==stp) return;
           if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
             if(OrderMagicNumber()==MAGICMA)
               if(OrderSymbol()==Symbol())
                  if(OrderType()==OP_SELL)                      
                      atr2kTPAdjust=atr2kTP;                      
                        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
         }
 }
 

Dies war mein endgültiger OrderMod-Code, der den Point/2-Filter für den Vergleich von Double Order-Werten verwendet. Hat fehlerfrei funktioniert und die Aufträge jedes Mal geändert. Danke!

void AutoAdjustTakeProfit()
{
if (Volume[0]>1 || atr2kTP == atr2kTPAdjust)return;  

       for(int b=OrdersTotal()-1;b>=0; b--)
          { 
            if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
               if(OrderMagicNumber()==MAGICMA)
                 if(OrderSymbol()==Symbol())
                    {          
                      if(OrderType()==OP_BUY)// buy ordeer section
                        {  
                          if((btphold-btp> Point/2) || (btphold-btp<-Point/2))  //--------------------------This is the DoubleCompare Code
                            {                                                                             
                              atr2kTPAdjust=atr2kTP; 
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
                            }
                        } 
                     
                      if(OrderType()==OP_SELL) // Sell ordeer section
                        {   
                          if((stphold-stp>Point/2) || (stphold-stp <-Point/2)) //--------------------------This is the DoubleCompare Code
                            {                                                  
                               atr2kTPAdjust=atr2kTP;                      
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
                            }
                        }
                    }
           }
}
 
  1. if (Volume[0]>1)return;
    Wenn Sie zu Beginn eines neuen Balkens einige Ticks verpassen, wird Ihr Code nicht ausgeführt. Immer die Zeit verwenden
  2.   if((stphold-stp>Point/2) || (stphold-stp <-Point/2))
      if( MathAbs(stphold - stp) > Point/2) // Simplified
    Noch einmal: Sind Ihnen die Gleichheitszeichen wirklich wichtig? Wenn Sie:
      if( MathAbs(stphold - stp) >= Point)
    verwenden, könnte es bei etwas weniger als einem Punkt ausgelöst werden. Das ist immer noch das Gleiche wie nicht gleich.
  3. Warum um einen Punkt verschieben, verschieben Sie sie um Pips und vermeiden Sie das Rundungsproblem und ERR_TOO_FREQUENT_REQUESTS
 

newBar funktioniert hervorragend.

MathAbs rockt, ich dachte, es konvertiert nur negative Werte auf der linken Seite von Gleichungen, ich wusste nicht, dass es auch die Differenz in einen positiven Wert konvertieren kann.

Die Genauigkeit von Punkt/2 ist für meine Signalzwecke nicht wichtig. Ich wollte nur Rundungsfehler vermeiden, um eine schwache Kodierung zu vermeiden.

Ich würde es vorziehen, Frequenzfehler genauso gut zu unterdrücken wie Rundungsfehler. Ich möchte also möglichst fehlerfreie, stabile Berechnungen verwenden, im Gegensatz zum genauesten Berechnungscode.

Wenn ich also meine TakeProfit MathAbs (stphold - stp) Vergleiche noch weiter auf >2*pips erhöhe, sollte ich die größte Chance haben, die Rundungsfehler und die Frequenzfehler zu eliminieren ?

Vielen Dank.

removed.

 
moneycode:

newBar funktioniert hervorragend.

Zuvor fand ich Probleme mit IsNewCandle, das ist, warum ich zu einem Volumen-Trigger gewechselt. Wenn die Verarbeitung von Volumen-Ticks langsam sein oder fehlen kann, dann könnten es auch die Kerzen sein. Also waren beide eine schlechte Idee...

Da newBar gut funktioniert, habe ich nun versucht, die IsNewCandle-Fail-Ereignisse mit dem folgenden Code zu identifizieren:

Der Aufruf der Funktion IsNewCandle() befindet sich innerhalb von start(), ÜBER der newBar-Codezeile. (Dieser Drucktest hat nicht funktioniert, stattdessen wurde bei jedem neuen Balken gedruckt.

Meiner Meinung nach ist es eine schlechte Idee, die Prüfung auf einen neuen Balken in eine Funktion zu packen, eine Funktion dient dazu, den Code wiederverwendbar zu machen ... Versuchen Sie, IsNewCandle() zweimal während desselben ersten Ticks eines neuen Balkens aufzurufen und sehen Sie, welche Antworten Sie erhalten ...

Wenn Sie die Diskussion fortsetzen möchten, verschieben Sie sie bitte in einen neuen Thread. Ich räume später auf...

 
WHRoeder:

....Da sich Preise nur um ein Vielfaches von Punkt ändern können, ist Punkt/2 genau das....


Wenn Sie Preise vergleichen, gut. Wenn Sie jedoch Doppelwerte vergleichen, z. B. Durchschnittspreise, wird Punkt/2 nicht ausreichen.
 
HarriMQL4:

Wenn Sie Preise vergleichen, ist das in Ordnung. Wenn Sie jedoch Doppelwerte vergleichen, z. B. Durchschnittspreise, reicht Punkt/2 nicht aus.


Ist Ihnen der Titel dieses Themas aufgefallen?

;)

 
HarriMQL4:

Wenn Sie Preise vergleichen, ist das in Ordnung. Wenn Sie jedoch Doppelwerte vergleichen, z. B. Durchschnittspreise, reicht Punkt/2 nicht aus.
Preise sind Doppelte . . .