Calcul du lot par Vince - page 8

 
Roman.:

Pour ceux qui sont intéressés - il a été possible d'atteindre des valeurs de travail (moyennes) de la variable optimale f, par la méthode de la moyenne géométrique selon R. Vince dans l'EA incluse dans la livraison standard de la MT basée sur la MA (voir capture d'écran). Sur la base des conditions et de l'ordre de calcul de l' optimum f par le livre, sa valeur est de 0,36. Après avoir terminé le code, je posterai la fonction ici avec la description et l'ordre d'utilisation pour calculer les volumes de lots ouverts dans les futures transactions selon le livre de R. Vince.

Félicitations pour votre succès ! :))
 
MaxZ:
Félicitations pour votre succès ! :))

Merci. On dirait que je vais devoir faire une matrice TWR, juste pour être sûr, comme vous l'avez conseillé.
 
MaxZ:
Félicitations pour votre succès ! :))


point d'inflexion f = 0,36, c'est-à-dire que plus f augmente, plus la variable TWR - diminue - R. Vince a raison ! :-)))

 

Hum, comment tout cela peut-il être rattaché à un EA fonctionnel avec une simple définition de la taille du lot en % du dépôt ? Ou peut-être que je ne fais pas assez de profit)))

Je veux dire, est-ce un jeu d'esprit ou une application pratique avec un effet positif ?

 
Dezil:

Hum, comment tout cela peut-il être rattaché à un EA fonctionnel avec une simple définition de la taille du lot en % du dépôt ? Peut-être que je ne fais pas assez de bénéfices)).

Je veux dire que tout cela est un jeu d'esprit ou a une application pratique avec un effet positif ?


Bien sûr, lisez R Vince - voir les posts ci-dessus dans le trailer, je ne l'ai même pas encore testé moi-même sur une démo... Nous verrons bien... :-)))

Je posterai le fiya ici dès que j'aurai terminé, avec une description.

 
Roman.:


Bien sûr, lisez R. Vince - voir les posts ci-dessus dans le trailer, je ne l'ai même pas encore testé sur une démo moi-même... Nous verrons bien... :-)))

Dès que j'aurai terminé, je posterai la fic ici avec une description.


Pourriez-vous me dire ce qu'il faut lire dans l'œuvre de Vince ? Quel est le titre de l'œuvre ?
 
Dezil:

Pouvez-vous me dire ce que je dois lire de Vince ? Quel est le titre de l'œuvre ?

Téléchargez la bande-annonce à partir de mon message sur la page 2 du fil de discussion d'ici - pages 30-32.
 
Roman.:

Je pense que j'ai trouvé où se trouve l'erreur...

Revenons au code original, que nous avons déjà tordu plusieurs fois :

   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                                  
      }    

Se pourrait-il que la variable TWR ne soit pas remise à "1" à chaque itération de f ?

 
MaxZ:

Je pense que j'ai trouvé où se trouve l'erreur...

Revenons au code original, que nous avons déjà tordu plusieurs fois :

Peut-être est-ce dû au fait que la variable TWR n'est pas réinitialisée à "1" à chaque itération de f ?


Oui, une remarque compétente d'ailleurs... Possible... tout à fait possible. Je vais le vérifier cet après-midi et le poster ici. Merci.

Alors il n'est pas nécessaire de créer un tableau TWR (comme celui-ci - la version fraîche - non plus....

Ici, j'ai essayé toutes sortes d'exorcismes pour réduire proportionnellement sa valeur dans le produit (car sa valeur absolue n'est pas importante, c'est la comparaison par plus/petit qui compte), afin d'éviter un débordement lors du calcul du f optimal.

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]);     
 

J'étais trop paresseux pour coller le code dans l'EA et le vérifier moi-même ! :)))

Je n'ai pas encore de véritable conseiller expert. Je n'ai que quelques idées. C'est pourquoi j'ai pris une moyenne mobile standard sans l'optimiser et choisi une période rentable.

Le dernier code que j'ai essayé, lorsque j'ai compris que le TWR ne se remettait pas à "1", était le suivant :

//+------------------------------------------------------------------+
//---------переменные для расчета лота по оптимальному 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);
}

Pas de réseau TWR.

Vous attendrez longtemps pour un débordement ! ;D Mais peut-être que ça ne serait pas arrivé du tout...