Vince'e göre lot hesaplama - sayfa 8

 
Roman. :

İlgilenenler için, MA bazında MT'nin standart teslimatında yer alan Expert Advisor'da R. Vince'e göre geometrik ortalama yöntemini kullanarak optimal f değişkeninin çalışmasına (ortalama değerlerine) ulaşmayı başardık (ekran görüntüsüne bakın). Kitaba göre optimal f'yi hesaplamak için koşullar ve prosedüre dayanarak, değeri 0.36'dır. Kod kesinleştikten sonra, R. Vince'in kitabına göre müteakip müzayedelerde açılan lotların hacimlerini hesaplamak için onu kullanma prosedürü ve bir açıklama ile işlevi buraya göndereceğim.

Başarın için tebrikler! :))
 
MaxZ :
Başarın için tebrikler! :))

Sayesinde. Tavsiye ettiğiniz gibi güvenilirlik için bir dizi TWR yapmanız gerekecek gibi görünüyor.
 
MaxZ :
Başarın için tebrikler! :))


bükülme noktası f = 0.36 , yani f'nin daha da büyümesiyle, TWR değişkeni - azalır - R. Vince haklı! :-)))

 

Um, tüm bunlar, deponun %'si olarak parti boyutunun en basit tespiti ile çalışan bir Uzman Danışmana nasıl bağlanabilir? Ya da belki hiç kar etmiyorum.

Yani tüm bunlar bir akıl oyunu mu yoksa olumlu etkisi olan pratik bir uygulaması var mı?

 
Dezil :

Um, tüm bunlar, deponun %'si olarak parti boyutunun en basit tespiti ile çalışan bir Uzman Danışmana nasıl bağlanabilir? Ya da belki hiç kar etmiyorum.

Yani tüm bunlar bir akıl oyunu mu yoksa olumlu etkisi olan pratik bir uygulaması var mı?


Tabii ki, R. Vince'i okuyun - fragmanda yukarıdaki gönderilere bakın, henüz demoya bakmadım bile... Bakalım... :-)))

Bitirdiğimde, işlevi burada bir açıklama ile yayınlayacağım.

 
Roman. :


Tabii ki, R. Vince'i okuyun - fragmanda yukarıdaki gönderilere bakın, henüz demoya bakmadım bile... Bakalım... :-)))

Bitirdiğimde, işlevi burada bir açıklama ile yayınlayacağım.


dürtmek yerine Vince'den tam olarak ne okunmalı? Eserin adı nedir?
 
Dezil :

dürtmek yerine Vince'den tam olarak ne okunmalı? Eserin adı nedir?

Fragmanı şubenin 2. sayfasındaki yazımdan buradan indirin - s.30-32.
 
Roman. :

Sanırım hatanın nerede olduğunu buldum...

Şimdiden birkaç kez büktüğümüz orijinal koda geri dönelim:

   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                                  
      }    

Belki de bütün mesele, TWR değişkeninin her f yinelemesinde "1" olarak sıfırlanmamasıdır?

 
MaxZ :

Sanırım hatanın nerede olduğunu buldum...

Şimdiden birkaç kez büktüğümüz orijinal koda geri dönelim:

Belki de bütün mesele, TWR değişkeninin her f yinelemesinde "1" olarak sıfırlanmamasıdır?


Evet, bu arada, yetkin bir açıklama ... Belki ... oldukça. Öğleden sonra kontrol edip buraya yazarım. Sayesinde.

O zaman bir TVR dizisi oluşturmak gerekli değildir (bunun gibi - yeni bir sürüm - gerekli değildir ...

Burada, her türlü şeytan çıkarma ile, optimal f'yi hesaplarken taşmayı önlemek için üründeki değerini orantılı olarak azaltmaya çalıştım (sonuçta mutlak değeri önemli değil, az / çok karşılaştırmak önemlidir), .

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

Kodu danışmana eklemek ve her şeyi kişisel olarak kontrol etmek için çok tembeldim! :)))

Evet, sanki normal bir danışman yokmuş gibi. Sadece gelişmeler... Bu yüzden standart Hareketli Ortalamayı aldım, optimize etmedim, karlı bir dönem seçtim ve kontrol etmeye başladım.

TWR'nin "1"e sıfırlanmadığını fark ettiğimde bulduğum son kod şuna benziyor:

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

TWR dizisi yoktu.

Taşma uzun süre bekleyecek! ;D Belki hiç var olmayacak olsa da...