文斯的地段计算 - 页 8

 
Roman.:

对于那些有兴趣的人来说,可以通过R.Vince在基于MA的MT标准交付的EA中的几何平均方法,达到变量最佳f的 工作(平均)值(见截图)。根据书中 最佳f 的计算条件和顺序,其值为0.36。完成代码后,我将在这里发布该函数的说明和使用顺序,根据R.Vince的书计算未来交易中的开仓量。

祝贺你的成功!:))
 
MaxZ:
祝贺你的成功!:))

谢谢你。看起来我必须做一个TWR阵列,为了安全起见,正如你所建议的。
 
MaxZ:
祝贺你的成功!:))


拐点f=0.36,即随着f的进一步增加,TWR变量--减少--R.文斯是对的! :-)))

 

嗯,所有这些怎么能附在一个工作的EA上,用最简单的手数定义,即depo的百分比?或者是我的利润不够)))。

我的意思是,这都是智力游戏,还是有实际应用,有积极作用?

 
Dezil:

嗯,这一切怎么能附在一个工作的EA上,只需简单地将手数定义为存款的百分比?也许我的利润还不够高))。

我的意思是,所有这些都是智力游戏,还是有实际应用的积极效果?


当然,阅读R文斯--请看上面预告片中的帖子,我甚至还没有亲自在演示中测试......我们会看到...:-)))

我一完成就会把fiya贴在这里,并附上说明。

 
Roman.:


当然,阅读R.文斯--请看上面预告片中的帖子,我甚至还没有在演示中亲自测试......我们会看到...:-)))

一旦我完成了,我将在这里发布小说,并附上描述。


你能告诉我从文斯的作品中读到什么吗?作品的标题是什么?
 
Dezil:

你能告诉我该从文斯那里读到什么吗?作品的标题是什么?

这里 下载我在第2页 的帖子中的预告片--第30-32页。
 
Roman.:

我想我已经发现了错误所在......。

让我们回到原来的代码,我们已经把它扭曲了几遍。

   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                                  
      }    

会不会是TWR变量在f的每次迭代中没有被重置为 "1"?

 
MaxZ:

我想我已经发现了错误所在......。

让我们回到原来的代码,我们已经把它扭曲了几遍。

也许这都是因为TWR变量在f的每次迭代中没有被重置为 "1"?


是的,顺便说一下,一个合格的观点...有可能......很有可能。我今天下午会检查一下,然后在这里发布。谢谢你。

那么就没有必要创建一个TWR阵列(像这个--新鲜版本--也...

在这里,我尝试了各种驱魔方法来按比例减少它在产品中的价值(因为它的绝对值 并不重要,重要的是通过更多/更小的比较),以便在计算最佳f时防止溢出。

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

我太懒了,没有把代码粘贴到EA中,自己检查一下!:)))

我还没有一个合适的专家顾问。我只有几个想法。这就是为什么我采取了一个标准的移动平均线,没有对其进行优化,而是选择了一个有利可图的时期。

当我明白TWR不会重置为 "1 "时,我最后尝试的代码如下。

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

你会等很久才会有溢出的机会!虽然也许根本就不会发生......。