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

 
artmedia70:
Eröffnen wir nicht den Kauf zum Briefkurs ???????


Das habe ich geschrieben: "Kaufaufträge werden zum Briefkurs eröffnet".

In der Grafik sehen Sie jedoch den Geldkurs.

 
PapaYozh:


Das habe ich geschrieben: "Kaufaufträge werden zum Briefkurs eröffnet".

In der Grafik sehen Sie jedoch den Geldkurs.

Ich habe immer beide Preise in der Tabelle... In den Terminaleinstellungen habe ich mit F8 die Anzeige der Ask-Preise aktiviert... Ich habe auch den vorherigen Beitrag über die Spanne ein wenig korrigiert - so kann es nicht sein.
 
artmedia70:
Eröffnen wir nicht einen Kauf auf Ask ??????? Und es kann keinen Spread von 60 Pips geben (wenn man ihn nach dem Gap nimmt), und wenn man ihn vorher nimmt ... dann ist der Spread auf den EUR von 325 Pips gleichbedeutend mit ... :)

Ihr Bild zeigt keine Punkte.
 
PapaYozh:

Auf Ihrem Bild sind die Punkte nicht zu erkennen.
Ja, ich bereue .... sie kann irreführend sein (wie die Klammern in Ihrem Beitrag, bei denen ich den Sinn Ihrer Antwort auf die Fragen nicht verstanden und falsch geantwortet habe... :) )
 
artmedia70:
Ich habe immer beide Preise in der Tabelle... In den Terminaleinstellungen habe ich die Anzeige von Ask`ts mit F8 aktiviert... Und korrigiert ein wenig die vorherigen Beitrag über die Verbreitung - es kann nicht sein.


Der Briefkurs ist jedoch nicht in den Balken sichtbar.

Über die Verbreitung. Handelt es sich um einen fünfstelligen Betrag? Wenn ja, ausgeweiteter Spread auf Nachrichten + Slippage = das sind 6 volle (60 fünfstellige) Pips für Sie

 
PapaYozh:


Der Briefkurs ist jedoch nicht in den Balken sichtbar.

Über die Verbreitung. Ist es ein fünfstelliger Betrag? Wenn ja, dann erweiterter Spread auf Nachrichten + Slippage = das sind 6 volle (60 fünfstellige) Pips

Das ist die Sache: Vier... :(
 
PapaYozh:

Wenn ich Ihr Problem richtig verstanden habe, sollten Sie sich nicht an der Abschlusszeit der Bestellung orientieren. Sie müssen am Anfang des Balkens beginnen, an dem das Signal zum Öffnen und die Position eröffnet wurde. Ich persönlich würde wie folgt vorgehen:

1) eine Variable vom Typ datetime erstellen, in die ich den Wert Time[0] eingeben würde, wenn die Bestellung erfolgreich aufgegeben wurde;

2) in der Funktion init() diese Variable mit dem Wert "0" initialisieren. Ich bevorzuge eine explizite Initialisierung, da dies bei der Überprüfung des Codes klarer ist;

3) Wenn die Bedingungen für die Eröffnung einer Position eintreten, vergleichen Sie vor dem Senden der OrderSend(...)-Anforderung den Wert dieser Variablen mit dem Wert Time[0], und wenn sie nicht gleich sind, senden Sie eine Anforderung.

4) Wenn die Position geöffnet wurde, würde ich den Wert von Time[0] in derselben Variablen speichern.


Vielen Dank für die Klarstellung - aber denken Sie, dass anstelle des Vergleichs mit Time[0] Wert, versuchen, diese Aufgabe vor der OrderSend(...) Anfrage geben: prüfen, ob es ein StopLoss-y schließen auf dem aktuellen bar? Dann muss ich duble StopLoss() Funktion eingeben, die mit StopLoss Variable arbeiten wird ich angekündigt? Oder ist es prinzipiell NICHT MÖGLICH? Es ist mir wichtig, dass eine neue Position nicht auf dem Balken eröffnet wird, der einen Verlust eingefangen hat, auch wenn sie den Parametern der Eröffnung entspricht.

extern double Stoploss           =1000;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
    
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }
//----
  }

Das Problem ist, dass die zeitlichen Faktoren als letztes berücksichtigt werden sollten - sehr oft verrutschen sie - oder die Auslegung einer Anordnung stellt sich irgendwie anders (mehrdeutig) heraus.

 
obla4ko, erstellen Sie eine Datetime-Variable x und lassen Sie sie die Eröffnungszeit des Balkens sein, in dem der Stop-Loss aufgetreten ist. Und in der offenen Bedingung setzen, dass (Time[0]!=x). In diesem Fall sollte x bei einer neu ausgelösten Stoppschleife aktualisiert werden. Dies ist die erste Variante. Und die zweite, wie ich zum dritten Mal schreibe, nach einem ausgelösten Stop-Schalter auf das Warten auf 1 bar, wäre dies genau das gleiche, ist es nicht logisch?
 
PapaYozh:


Der Briefkurs ist jedoch nicht in den Balken sichtbar.

Über die Verbreitung. Ist es ein fünfstelliger Betrag? Wenn ja, dann hat sich der Spread bei Nachrichten + Slippage ausgeweitet = das sind 6 volle (60 fünfstellige) Pips

Meiner Meinung nach kann es auch eine "Haarnadel" geben, die nachträglich bereinigt wird :)), aber "im Speicher" kleinerer Zeiträume gespeichert ist, die Sie nicht erreichen werden...

Und die Frage nach den Tests in der Vergangenheit :

kann ein Expert Advisor (ein einfacher!) - ...) für denselben Zeitraum der Geschichte mit denselben Parametern zu völlig anderen Ergebnissen führen würde?

Das Einzige, was ich zwischen diesen beiden Tests gemacht habe, war die Aktualisierung des Zitate-Archivs... und das könnte zu einem solchen Ergebnis geführt haben!? - dann stellt sich heraus, dass die ganze Geschichte Blödsinn ist!?

 

Kann mir jemand sagen, warum MathRound() sich seltsam verhält. Große Werte zählen, kleine nicht...

Es gibt einen einfachen Code, um die Werte einiger Variablen um 10% zu erhöhen:

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/10*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/10*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

Die berechneten Werte werden protokolliert. Wenn alle Zeilen außer der ersten durch 10 geteilt werden, dann zählt diese Zeile als Nummer 100 und es gibt kein Problem damit:

2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Funktion der Berechnung: SLs = 11 und TPs = 66, TStartS = 60, TStop.Sell = 20, TStopLastPosS = 60, TStop.SellLP = 25

Was grün markiert ist, zählt in der ersten Zeile des Codes.

Aber wenn Sie die Division durch 100 (wie es sein sollte)

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/100*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10 0*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/100*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

... dann werden alle Zeilen außer der obersten überhaupt nicht gezählt - die Anfangswerte bleiben erhalten, als ob sie nicht hinzugefügt worden wären

zehn Prozent:

2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Funktion der Berechnung: SLs = 11 und TPs = 66, TStartS = 30, TStop.Sell = 10, TStopLastPosS = 30, TStop.SellLP = 15

Helfen Sie mir zu verstehen, was und wo zum Teufel das ist... :)