Losberechnung durch Vince - Seite 8

 
Roman.:

Für diejenigen, die es interessiert - es war möglich, mit der Methode des geometrischen Mittels nach R. Vince im EA, der im Standardlieferumfang des MA-basierten MT enthalten ist, Arbeits- (Durchschnitts-) Werte der Variablen optimal f zu erreichen (siehe Screenshot). Basierend auf den Bedingungen und der Reihenfolge der Berechnung des optimalen f durch das Buch, ist sein Wert 0,36. Nachdem ich den Code fertiggestellt habe, werde ich die Funktion hier mit der Beschreibung und der Reihenfolge ihrer Verwendung posten, um die Volumina der Lose zu berechnen, die in zukünftigen Geschäften gemäß dem Buch von R. Vince geöffnet werden.

Herzlichen Glückwunsch zu Ihrem Erfolg! :))
 
MaxZ:
Herzlichen Glückwunsch zu Ihrem Erfolg! :))

Ich danke Ihnen. Sieht so aus, als müsste ich eine TWR-Anordnung machen, nur um sicher zu gehen, wie Sie mir geraten haben.
 
MaxZ:
Herzlichen Glückwunsch zu Ihrem Erfolg! :))


Wendepunkt f = 0,36, d. h. mit weiterem Anstieg von f nimmt die TWR-Variable - ab - R. Vince hat Recht! :-)))

 

Ähm, wie kann das alles an einen funktionierenden EA mit der einfachsten Definition der Losgröße in % des Depos angehängt werden? Oder vielleicht mache ich nicht genug Gewinn)))

Ich meine, sind das alles nur Gedankenspiele oder gibt es eine praktische Anwendung mit einer positiven Wirkung?

 
Dezil:

Ähm, wie kann das alles an einen funktionierenden EA mit der einfachsten Definition der Losgröße in % des Depos angehängt werden? Vielleicht mache ich nicht genug Gewinn)).

Ich meine, ist das alles ein Gedankenspiel oder hat es eine praktische Anwendung mit einer positiven Wirkung?


Sicher, lesen Sie R Vince - siehe die Beiträge oben im Trailer, ich habe es noch nicht einmal selbst auf einer Demo getestet... Wir werden sehen... :-)))

Sobald ich fertig bin, werde ich die Fiya mit einer Beschreibung hier einstellen.

 
Roman.:


Sicher, lesen Sie R. Vince - siehe die Beiträge oben im Trailer, ich habe es noch nicht einmal selbst auf einer Demo getestet... Wir werden sehen... :-)))

Sobald ich fertig bin, werde ich die Fic hier mit einer Beschreibung posten.


Können Sie mir sagen, was ich von Vince's Arbeit lesen soll? Wie lautet der Titel des Werks?
 
Dezil:

Können Sie mir sagen, was ich von Vince lesen soll? Wie lautet der Titel des Werks?

Laden Sie den Trailer aus meinem Beitrag auf Seite 2 des Threads von hier herunter - Seiten 30-32.
 
Roman.:

Ich glaube, ich habe herausgefunden, wo der Fehler liegt...

Kehren wir zum ursprünglichen Code zurück, den wir bereits ein paar Mal verdreht haben:

   for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
     {  
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
            {                                                // и считаем относительный конечный капитал (TWR)
             TWR = TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // TWR - это произведение всех HPR
             //if (TWR>TWR_Rez) {TWR_Rez = TWR; Print(" TWR = ",TWR_Rez, " при f = ", f);}  
             //   else break;       
            }
          if (TWR>TWR_Rez) {
              TWR_Rez = TWR;
              G=MathPow (TWR_Rez, 0.001988); // 1/503 сделки по данной торговой системе, как в книжке: в степени 1/N 
              Print(" TWR = ",TWR_Rez," G = ",G, " при f = ", f);} // если текущий TWR > результирующего, 
              else break;    // то результирующий делаем равным текущему, иначе переходим на след итерацию цикла по f                                  
      }    

Könnte es sein, dass die Variable TWR nicht bei jeder Iteration von f auf "1" zurückgesetzt wird?

 
MaxZ:

Ich glaube, ich habe herausgefunden, wo der Fehler liegt...

Kehren wir zum ursprünglichen Code zurück, den wir bereits ein paar Mal verdreht haben:

Vielleicht liegt es daran, dass die Variable TWR nicht bei jeder Iteration von f auf "1" zurückgesetzt wird?


Ja, ein kompetenter Punkt übrigens... Möglicherweise...sehr wahrscheinlich. Ich werde es heute Nachmittag überprüfen und hier posten. Ich danke Ihnen.

Dann ist es auch nicht notwendig, ein TWR-Array zu erstellen (wie dieses hier - die neue Version -)...

Hier habe ich alle möglichen Exorzismen ausprobiert, um seinen Wert im Produkt proportional zu verringern (denn sein absoluter Wert ist nicht wichtig, es geht um den Vergleich durch mehr/kleiner), um einen Überlauf bei der Berechnung des optimalen f zu verhindern.

for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
     {  
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
            {                                                // и считаем относительный конечный капитал (TWR)
             //TWR = MathPow(TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))),0.33); // TWR - это произведение всех HPR                    
             Mas_TWR[orderIndex] = (1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // заполняем массив значениями HPR                               
            }
          //Print ("Mas_TWR[Qnt]= ", Mas_TWR[Qnt]); 
          
          for ( orderIndex = 1;orderIndex<Qnt; orderIndex++)         
              {
               TWR = MathSqrt(TWR*Mas_TWR[orderIndex]);}
               
          if (TWR>TWR_Rez)
              {
                TWR_Rez = TWR;               
                //G = MathPow(TWR_Rez, 1/N);
                     // G1 = G1*MathPow(Mas_TWR[orderIndex], 1/N);
                     //G=MathPow (TWR_Rez, 0.0054054); // 1/185 сделки по данной торговой системе, как в книжке: в степени 1/N 
                Print(" TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f); 
                                                       // если текущий TWR > результирующего
              } 
          else 
              {
                TWR_Rez = TWR;
               // G=MathPow (TWR_Rez, 1/N);
                Print(" А это уже меньше: TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f);                                                     
              }       
      }      
             
   Print("Закрытых позиций = ", Qnt, " Нетто Профит/лосс = ", SUMM, " У последней ",Qnt, " закрытой позы профит/лосс = ", 
        Mas_Outcome_of_transactions[Qnt]);     
 

Ich war zu faul, den Code in den EA einzufügen und ihn selbst zu überprüfen! :)))

Ich habe noch keinen richtigen Expert Advisor. Ich habe nur ein paar Ideen. Deshalb habe ich einen gleitenden Standarddurchschnitt genommen, ohne ihn zu optimieren, und einen profitablen Zeitraum gewählt.

Der letzte Code, den ich ausprobiert habe, als ich verstand, dass TWR nicht auf "1" zurückgesetzt wird, war wie folgt:

//+------------------------------------------------------------------+
//---------переменные для расчета лота по оптимальному f Ральфа Винса
int Mas_Outcome_of_transactions [10000]; // Массив профитов/убытков закрытых позиций

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//--- Расчет оптимального f ---
   int Qnt = 0, Orders = OrdersHistoryTotal();        // Счётчик количества ордеров   
   ArrayInitialize(Mas_Outcome_of_transactions, 0);   // Обнуление массива
   double f, D, SUMM, TWR, G, G_Rez, Pow = 1/NormalizeDouble(Orders, 0);
   int orderIndex;
   
   for (orderIndex = 0; orderIndex < Orders; orderIndex++)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
      {
         Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
         continue;
      }
   
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderCloseTime()==0)
         continue; 
         
      int lastType = OrderType();
      double lastLots = OrderLots();
      double lastProfit = OrderProfit() + OrderSwap();
      
      if (orderIndex == 0 || lastProfit < D)
         D = lastProfit;
      
      Mas_Outcome_of_transactions[Qnt] = lastProfit;  // Заполняем массив профитом/лоссом по всем закрытым позициям 
      SUMM=SUMM+lastProfit;
      Qnt++;                                          // увеличиваем счетчик закрытых ордеров    
   }
   
   Print("D = ", DoubleToStr(D, 2), " Pow = ", DoubleToStr(Pow, 8));
   
   for (f = 0.01; f<=1.0; f=f+0.01)                   // цикл перебора переменной f для поиска оптимального ее значения,
   {                                                  // при котором G - максимально
      G = 1;
      for ( orderIndex = 1; orderIndex < Qnt; orderIndex++) // при заданной f проходим по всем закрытым ордерам
      {                                                     // и считаем среднее геометрическое от TWR
         TWR = 1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D));
         G *= MathPow(TWR, Pow);
      }
      if (G > G_Rez)
      {
         G_Rez = G;
         Print("G = ", G, " при f = ", f);
      }           // если текущий G > результирующего, то результирующий делаем равным текущему
      else break; // иначе переходим на следующую итерацию цикла по f
   }
   
   Print("Закрытых позиций = ",   Qnt,
         " Нетто Профит/лосс = ", SUMM,
         " У последней ",         Qnt,
         " закрытой позы профит/лосс = ", Mas_Outcome_of_transactions[Qnt-1]);
   
   return(0);
}

Kein TWR-Array.

Sie werden noch lange auf einen Überlauf warten müssen! ;D Obwohl es vielleicht gar nicht passiert wäre...