[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 241

 

Frage, wie man eine Reihe von Verlustaufträgen berechnet ????

Ich möchte wissen, wie viele Aufträge in einer Reihe bei einem Stopp geschlossen, um die Taktik zu testen ... und vor allem die letzte

Leute, ich brauche es wirklich .....

 
VOLDEMAR:

Frage, wie man eine Reihe von Verlustaufträgen berechnet ????

Ich möchte wissen, wie viele Aufträge in einer Reihe an einer Haltestelle geschlossen, um die Taktik zu überprüfen... und vor allem die letzte

Leute, ich brauche es wirklich .....


So berechne ich es für mich:

Iteration = wie oft ein Auftrag in einer Reihe bei einem Stop geschlossen wurde, wenn ein Stop in Ihrem Sinne ein verlustbringender Abschluss ist.

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 
Danke! Aber so wie ich es verstehe, findet dieser Code die gesamte Serie in der Historie, egal ob es vor 100 Trades oder 5 war ....
 
VOLDEMAR:
Danke! Aber so wie ich es verstehe, findet dieser Code die gesamte Serie in der Historie, unabhängig davon, ob es vor 100 Trades oder vor 5 war .....

Nein. Die Auswahl des nächstgelegenen geschlossenen Geschäfts geht tief in die Historie hinein, und wenn ein geschlossenes Geschäft zu einem Gewinn wird, wird die Serie mit der Ausgabe der Anzahl der aufeinanderfolgenden Verlustgeschäfte = Iteration unterbrochen.
 

Guten Tag.

Wäre dies die richtige Kombination?

  // заполним значениями сигнальные массивы и посчитаем их количество
  for(i=DisplayBars;i>=0;i--) 
  {

    
if (Prz0 == 0) 
       {
           f= GetBarNumWithZerroDist(i);// на этом баре пересечение
        if (f!=-1)
          {
           Price01 = iClose(Symbol_1,0,f);
           Price02 = iClose(Symbol_2,0,f);
           Prz0 = 1;
           i=f;
           }
       } 
   }
int GetBarNumWithZerroDist(int i)
{
double Smb1Cl0 = NormalizeDouble(iClose(Symbol_1,0,0),Digits);
double Smb2Cl0 = NormalizeDouble(iClose(Symbol_2,0,0),Digits2);
double Smb1Pnt = MarketInfo(Symbol_1, MODE_POINT);
double Smb2Pnt = MarketInfo(Symbol_2, MODE_POINT);
int    mBars   = MathMin(iBars(Symbol_1,0), iBars(Symbol_2,0));

    for (int f=i;f>=0;f--) 
    {
        Price1 =   NormalizeDouble(Lot*(Smb1Cl0 - iClose(Symbol_1,0,f)) / Smb1Pnt,0);
        Price2 = NormalizeDouble(K*Lot2*H*(Smb2Cl0 - iClose(Symbol_2,0,f)) / Smb2Pnt,0);
        Spread = Price1 - Price2; 
        //Print ("Price1="+Price1, " Price2="+Price2);
        if(MathAbs(Spread)== 0) return(f);
    }
    return(-1);
}
 

Das hat mir gefallen:)

if(MathAbs(Spread)== 0) return(f);
 
Roger:

Das gefällt mir:)


Liegt hier ein Fehler vor?

Ich muss den Wert des Balkens zurückgeben, bei dem Spread==0 ist,

Wenn kein solcher Wert gefunden wird, wird -1 zurückgegeben.

 

Hallo.

Frage: Kann OrderSend() nach der Ausführung einen Wert von "0" oder weniger als "-1" zurückgeben? Ist jemandem so etwas schon einmal passiert? Oder sind die Angaben in der "Dokumentation" korrekt?

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Grundfunktion zur Eröffnung einer Position oder zum Setzen eines schwebenden Auftrags.
Gibt die Ticketnummer zurück, die dem Auftrag vom Handelsserver zugewiesen wurde, oder -1 im Falle eines Fehlers.
P.S.: Ich arbeite als Telepath und suche nach einem Fehler im Code eines anderen...
 
Ich habe ein virtuelles Schleppnetz mit horizontalen Linien erstellt, im Tester funktioniert es gut, aber während der Optimierung funktioniert der Tester offenbar nicht mit diesen Linien, warum?
 
DimaMA:
Ich habe ein virtuelles Schleppnetz mit horizontalen Linien erstellt, das im Testgerät gut funktioniert, aber während der Optimierung funktioniert das Testgerät wahrscheinlich nicht mit diesen Linien, warum? und wie kann man das beheben?

Warum brauchen Sie eine horizontale Linie? Speichern Sie den Wert der Zeile in einer Variablen und Sie werden zufrieden sein!!! Und der Expert Advisor wird schneller "denken"! Sie können die horizontale Linie auch nur aus optischen Gründen belassen.

Und der Grund dafür ist folgender: Der Tester arbeitet mit grafischen Objekten nur im visuellen Modus! Beim Optimieren gibt es überhaupt keinen visuellen Modus... Sie können jedoch versuchen, den Chart mit "visual" in Klammern nach dem Namen des TF und des Paares zu verlassen... Aber ich weiß nicht, ob es helfen wird oder nicht. Ich habe es nicht überprüft. Ich dachte, es würde helfen, denn wir können sehen, wie Aufträge in diesem Diagramm (das zuvor für Visualisierungstests verwendet wurde) erscheinen und verschwinden (obwohl das Diagramm noch nicht aktiviert wurde)... Vielleicht wird uns das jemand sagen!

Mein Rat an Sie: Verwenden Sie nicht die Extraktion von Parametern aus grafischen Objekten. Diese Parameter sollen in Variablen gespeichert werden... Machen Sie das grafische Objekt nicht zu einer Variablen! :))))