Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 65

 

Guten Tag an Sie alle! Wenn ich versucht habe, einen Stop-Loss für ein Schleppnetz zu setzen, funktionierte das im Strategietester nicht, aber ich habe nie einen verloren. Im Strategy Tester, wenn der EA einen Stop Loss setzen sollte, tut er das nicht, aber manchmal tut er es, aber ich habe keine Regelmäßigkeiten gefunden und die Genauigkeit der Tests leidet sehr. Der gleiche Expert Advisor auf dem Demodepot zeigt, dass das Schleppnetz funktioniert. Das Terminal meldet keine Fehler. Ist dies ein Fehler im Code oder ein Fehler im Terminal? Können Sie mir helfen, es zu verstehen? Ich habe versucht, alle den Code und nicht verstehen, was falsch ist, ich will nicht, um die Spur Strategie zu ändern. Ich habe den vollständigen Code des Expert Advisors beigefügt und unten ist der Code des Schleppnetzes (leicht modifiziert Trailing auf Candlestick Schatten von Yury Dzyuban)

void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent) {  
   int i;
   double new_extremum;

   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET))) {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
   } 
   if (OrderType()==OP_BUY) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i); else if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
      }  
  
      if ((((new_extremum - indent*Point)>OrderStopLoss() + 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
   }
   if (OrderType()==OP_SELL) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i); else if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
      }         
      if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss() - 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());     
   }      
}

double getLots(double newSL) {
   int opnTime = 0; // время открытия трейда для цикла пересчета позиций
   double lotSum = 0; 
   for (int i = 0; i <= OrdersTotal()-1; i++) {
      OrderSelect(i, SELECT_BY_POS);     
      if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; }
      }
   }   
   return(lotSum);
}
Dateien:
avalanche.mq4  12 kb
 
In welchem Zeitrahmen und mit welcher Qualität testen Sie?
 

EURUSD, M1, 99%, 90%

Zunächst habe ich Standard-Tick-Geschichte verwendet, mit MT geladen, habe ich dieses Problem gefunden, sowie unerklärliche Lücken in den Kursen Geschichte, so habe ich auf Tick Data Suite umgestellt, lud ich Kurse von Dukascopy, die Qualität von 90 bis 99 erhöht, aber das Problem besteht weiterhin.

ZS: Wahrscheinlich die gleiche Situation im wirklichen Leben, oder ich habe nicht lange genug testen (ca. 3 Wochen), während dieser Zeit musste ich manuell mehrmals zu schließen, weil Schleppnetz nicht installiert war, aber ich dachte, es war, weil ich hatte, um Terminal-Maschine regelmäßig zu trennen und es irgendwie beeinträchtigt EA Betrieb, vor kurzem verschoben es auf VPS vielleicht vor einer Woche und jetzt scheint die gleiche Situation zu zeichnen

 

Wird der Test in einem Zeitrahmen durchgeführt, der dem Wert der Variablen tmfrm entspricht oder nicht?

Wenn nicht, sollten Sie sich vergewissern, dass es eine Historie über den tmfrm-Zeitrahmen gibt...

und die in der Variablen bars_n übermittelte Anzahl der Tanks dem in der Variablen tmfrm übermittelten Zeitrahmen entspricht ?

 
keekkenen:

Wird der Test in einem Zeitrahmen durchgeführt, der dem Wert der Variablen tmfrm entspricht oder nicht?

Wenn nicht, sollten Sie sich vergewissern, dass es eine Historie über den tmfrm-Zeitrahmen gibt...

und die Anzahl der Tanks, die in der Variablen bars_n übergeben wird, dem Zeitrahmen entspricht, der in der Variablen tmfrm ?


Ja, ich schätze, Sie haben Recht, ich habe den Code der Funktion eines anderen vernachlässigt, mich nicht eingehend damit befasst und diesen Parameter nicht berücksichtigt. Infolgedessen wurde der Stop-Loss für einen anderen Zeitraum festgelegt. Ich danke Ihnen für Ihre Hilfe.

ZS: Das ist immer so: irgendeine Kleinigkeit führt dazu, dass der Code nicht so funktioniert, wie ich es gerne hätte.

 

Guten Tag, wer weiß, was mit dem roten Ziegelstein im Baumstamm los ist!

2013.08.05 08:00:41 '9291791': Signal - Update-Signal nicht gefunden - 7400 in Basis

Mit meinem Code ist alles in Ordnung! Und auch mit Signalen! Was bedeutet das?

 
Mepkypuu:


Ja, es sieht so aus, als hättest du recht, ich habe den Code der Funktion eines anderen vernachlässigt, nicht genau hingeschaut und diesen Parameter nicht berücksichtigt. Infolgedessen wurde der Stop-Loss für einen anderen Zeitraum festgelegt. Ich danke Ihnen für Ihre Hilfe.

ZS: Es ist immer so: irgendeine Kleinigkeit führt dazu, dass der Code nicht so funktioniert, wie ich es gerne hätte.


Ich habe mich zu früh darüber gefreut, das Trailing hat angefangen, besser zu funktionieren, aber in der Historie gibt es immer noch Fälle, in denen es nicht funktioniert, d.h. das Problem ist nur teilweise gelöst.
 
splxgf:

Denn während der Läufe wird der aktuelle Spread genommen, aber während der Nachrichten und am Abend weicht er vom täglichen Spread ab.

Wie lässt sich die Streuung beheben? Schließlich gibt OrderSend entweder Ask oder Bid an.
 
Mepkypuu:

Ich bin noch nicht zufrieden damit, das Nachziehen funktioniert zwar besser, aber es gibt immer noch Fälle, in denen es nicht funktioniert, d. h. das Problem ist nur teilweise gelöst.

Was Sie als Trailing bezeichnen, ist kein wirkliches Trailing, es wird auf andere Weise berechnet und kann sich unlogisch verhalten.
 
Leo59:

Wie kann die Spanne behoben werden? Schließlich gibt OrderSend entweder Ask oder Bid an.
Im Testgerät unter dem TF!