Vince'e göre lot hesaplama

 

Ertelenen

Roma 14.08.2011 06:37


Beyler, şimdi söyleyin bana, R. Vince'e göre, geometrik ortalama yöntemini kullanarak optimal f'yi (partinin hacmini hesaplamak için) arıyorum.

Görev: Siparişlerin geçmişini gözden geçirmek ve 0,01'den 1'e f = 0,01 adımıyla, koda kaydırırken TWR'nin maksimum olduğu optimal değerini bulmak gerekir.

iki alt formül ve işlemdeki en büyük kaybın değeri bilinir D=-458 :

hangi yineleme döngüleri, özellikle, en uygun f'yi bulmak ve ayrıca kodun neresinde organize etmek.

İşte int deinit() içindeki başlangıç kodu. Strateji test cihazında düzenli olarak kâr hakkında yazdırır.

 //+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//--- Расчет оптимального f ---

   double SUMM, MUL, HPR, TWR, G;   
   double D=-458;
   int orderIndex;
   for (orderIndex = ( OrdersHistoryTotal () - 1 ); orderIndex >= 0 ; 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 (); 
         SUMM=SUMM+lastProfit;    
    }           
    
   Print ( "Профит = " , SUMM);  
  
   return ( 0 );
  }

 
Vinin :

Ertelenen

R. Vince'in kitabında olduğu gibi optimal f'yi hesaplamak için aşağıdaki işlevi yaptım:

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

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   if (Monitor==true)
    {
     for ( int a= 0 ;a<= 3 ;a++)
      {
       string N= DoubleToStr (a, 0 );
       ObjectDelete (N);
      } 
    }
//----
//--- Расчет оптимального f ---
   int Qnt= 0 ;                                           // Счётчик количества ордеров   
   ArrayInitialize (Mas_Outcome_of_transactions, 0 );     // Обнуление массива
   double f= 0.01 , SUMM, MUL, HPR, TWR_Rez= 0 , TWR= 1.0 , G;
   int orderIndex;
   for (orderIndex = 0 ; orderIndex< OrdersHistoryTotal (); orderIndex++)
   {   
       if (! OrderSelect (orderIndex, SELECT_BY_POS, MODE_HISTORY))
      {
         Print ( "Ошибка при доступе к исторической базе (" , GetLastError (), ")" );
         continue ;
      }
   
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != magic) || ( OrderCloseTime ()== 0 ))
      {
         continue ;
      }  
         Qnt++;                               // увеличиваем счетчик закрытых ордеров
         int lastType = OrderType ();
         double lastLots = OrderLots ();
         double lastProfit = OrderProfit () + OrderSwap (); 
        
         Mas_Outcome_of_transactions[Qnt] = lastProfit; // Заполняем массив профитом/лоссом по всем закрытым позициям 
         SUMM=SUMM+lastProfit;    
         //TWR = TWR*(1+f*(-lastProfit/(D)));
    }           
 //  Print("Закрытых позиций = ", Qnt, " Профит/лосс = ", SUMM);  
 
   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                                  
      }      
             
   Print ( "Закрытых позиций = " , Qnt, " Нетто Профит/лосс = " , SUMM, " У последней " ,Qnt, " закрытой позы профит/лосс = " , 
        Mas_Outcome_of_transactions[Qnt]);     
  
   return ( 0 );
  }

Danışmanı test ettikten sonra, günlükte, üstten ikinci satırın, yani TWR=1.#INF'nin ne anlama geldiğini söyleyin?

Bu ne? - Menzil dışında çift mi?

Eğer öyleyse, optimal f nasıl hesaplanır?

 
Roman. :

R. Vince'in kitabında olduğu gibi optimal f'yi hesaplamak için aşağıdaki işlevi yaptım:

Danışmanı test ettikten sonra, üstten ikinci satırın, yani TWR=1.#INF 'nin günlükte ne anlama geldiğini söyleyin?

Bu ne? - Menzil dışında çift mi?

Eğer öyleyse, optimal f nasıl hesaplanır?


3289
Roş 26.10.2005 20:49
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

4464
Slava 27.10.2005 09:59
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

Evet kesinlikle. bunlar, kayan sıralı taşma (1.INF) ve çift sıralı taşmadır (1.IND). bölmeden önce böleni 0 ile kontrol et
 

Anton Trefolev http://forum.alpari.ru/member.php?u=56027 optimal f üzerinde çalıştı, ona sorabilirsiniz. Bir zamanlar (hatırladığım kadarıyla) 3 ayda % 11.000 toplayan tanınmış bir kişi. Ardından gece haçındaki yayılma genişletilerek oksijeni kesildi. Bununla birlikte, hesabı 100.000'den fazla dağıtmak mümkündü, ardından pamm'ın kapatılması gerekiyordu.

 
Vinin :

3289
Roş 26.10.2005 20:49
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

4464
Slava 27.10.2005 09:59
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

Evet kesinlikle. bunlar, kayan sıralı taşma (1.INF) ve çift sıralı taşmadır (1.IND). bölmeden önce böleni 0 ile kontrol et


İşin aslı, bölme, sürekli çarpma yoktur (R. Vince formülüne göre ve bu kadar).

Onlar. mql, bu sorunun (TWR'nin doğru hesaplanması) çözülemeyeceği anlamına mı geliyor?

Onlar. ddl, matkad, vb. aracılığıyla çözmek?

 
Vinin :

3289
Roş 26.10.2005 20:49
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

4464
Slava 27.10.2005 09:59
Ve "1.INF", "1.IND" sayıları, ya modül olarak çok büyük değerler ya da 0/0 gibi tanımsız bir değer anlamına gelir (bence öyle).

Evet kesinlikle. bunlar, kayan sıralı taşma (1.INF) ve çift sıralı taşmadır (1.IND). bölmeden önce böleni 0 ile kontrol et


Float sırası (1.INF) taştığında ne olur?

Döngünün f üzerindeki sonraki yinelemeleri mevcut sonucu veriyor mu? veya daha fazla döngü sayar? TWR'nin sayısal değeriyle ilgilenmiyorum, f'nin TWR'nin kümülatif toplamı ile çarpılmasıyla elde edilen değeriyle ilgileniyorum.

Bu kod parçasında:

 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;
              G= MathPow (TWR_Rez, 0.001988 ); // 1/503 сделки по данной торговой системе, как в книжке: в степени 1/N 
               Print ( " TWR = " ,TWR_Rez, " G = " ,G, " при f = " , f);} // если текущий TWR > результирующего, 
               else break ;     // то результирующий делаем равным текущему, иначе переходим на след итерацию цикла по f                                  
      }      
 
Roman. :


İşin aslı, bölme, sürekli çarpma yoktur (R. Vince formülüne göre ve bu kadar).

Onlar. mql, bu sorunun (TWR'nin doğru hesaplanması) çözülemeyeceği anlamına mı geliyor?

Onlar. ddl, matkad, vb. aracılığıyla çözmek?


Çarparken, bir taşma da alabilirsiniz.
 
Vinin :

Çarparken, bir taşma da alabilirsiniz.

Bunu biliyorum. O halde geometrik ortalama yöntemiyle optimal f nasıl hesaplanır? Tüm formülleri yazdım, kodda her şey doğru.
 
Roman. :

Bunu biliyorum. Ve o zaman geometrik ortalama yöntemiyle optimal f nasıl hesaplanır? Tüm formülleri yazdım, kodda her şey doğru.

Muhtemelen sadece optimallik hakkında düşünmeniz gerekir. Hesaplama seçenekleri bulunabilir.
 

Ve TWR'yi önceki değerle (TWR_Rez) değil, geometrik ortalamalarını G ve bazı G_Rez ile karşılaştırırsak? Sonuçta, eğer_1 sayısından gelen K derecesinin kökü, sayı_2'den gelen aynı K derecesinin kökünden büyükse, o zaman _1 sayısı,_2 sayısından büyüktür ! :)))))))

Ve zaten kökü (değişken G) hesaplarken, ürün gerçekten öğelere bölünmüşse (neden parçalarla uğraşıyorsunuz) ve her öğeden kök alıyorsa taşma olmayacaktır. Sonuçta, ürünün kökü, faktörlerinin köklerinin ürününe eşittir ! :)))

Hesaplama süresi önemli ölçüde artacak, ancak onunla taşma ve yaygara olmayacak. Ayrıca, hesaplamaların doğruluğu önemli ölçüde artacaktır.

Ve TWR değişkenini görüntülemeye karar verirseniz, bitliğini int türünde ek bir değişkende saklamanız ve TWR bitliğini Print'te yazdırmanız gerekir, örneğin: "89605994539435e+1234121". Ama buna ihtiyacın var mı?

 
Roman. :
Bunu biliyorum. Peki, geometrik ortalama yöntemiyle optimal f nasıl hesaplanır? Tüm formülleri yazdım, kodda her şey doğru.
Geometrik ortalamanın hesaplanması ile şaman.
Neden: