文斯的地段计算 - 页 11

 

利用几何平均数找到最佳 f

在真实的交易中,损失和收益的大小将不断变化。所以凯利的公式不能给我们提供正确的最优 F。从数学的角度来看,如何正确地找到最佳的 F,这将使我们能够确定交易的合同数量?让我们试着回答这个问题。首先,我们必须修改寻找 HPR公式 包括f。

进一步参见第一篇 文章中的公式

进一步

我们已经看到,最好的交易系统是具有最高几何平均数的系统。为了计算几何平均数,我们需要知道f。因此,让我们一步一步地描述我们的行动。

1.以给定的市场体系中的交易历史为例。

2.通过观察从0到1的各种f值,找到最佳的f值。

3.一 你找到f,取 TWRN度根 N 为交易总数) 现在你可以用得到的几何平均数将这个系统与其他系统进行比较。f值将告诉你在这个市场系统中要交易多少个合同。一旦找到f,就可以通过将最大的损失除以负的最优/来转换为货币等值。例 如,如果最大的损失等于100美元,最佳f=0.25,那么-100美元/-0.25=400美元。换句话说,你应该为每400美元的账户投注1个单位。为了简单起见,你可以以单位为基础计算一切(例如,一个5美元的筹码或一个期货合约,或100只股票)。 分配给每个单位的美元数可以通过将你的最大损失除以负的最佳f来计算。最佳f 平衡系统的盈利能力(基于1个单位)和其风险(基于1个单位)的结果 许多人认为,最佳的固定分数是将账户中的百分比分配给你的赌注。这完全是错误的。必须要有另一个步骤。最佳 f 本身并不是你账户中分配给交易的百分比,它是最大损失的除数 这种除法的商数是你必须将你的总账户除以的数值,以便找出要下多少赌注或在市场上开多少个合同。

即AccountFreeMargin()/H,H=D/(-f)。

以下是cov代码中的组织方式--见预告片。

if (optimal_f) //--- Расчет оптимального f ---
        {   
          
          double Mas_Outcome_of_transactions [10000];        // Массив профитов/убытков закрытых позиций
          int Qnt = 0, Orders = OrdersHistoryTotal();        // Счётчик количества ордеров   
          ArrayInitialize(Mas_Outcome_of_transactions, 0);   // Обнуление массива
          double f, D, SUMM, TWR, G, G_Rez, H,A,B, Pow;
          int orderIndex;
   
          for (orderIndex = 0; orderIndex < Orders; orderIndex++)
          {   
             if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
              {
                Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
                continue;
              }
   
             if (OrderSymbol() != Symbol() || OrderMagicNumber() != MAGICMA || 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++;                                          // увеличиваем счетчик закрытых ордеров    
          }   
   
         if (Transaction_number<Qnt) { //при репрезентативном кол-ве ордеров на истории открываемся объемом через оптим-ую f 
            Pow = 1/NormalizeDouble(Orders, 0);
            for (f = 0.01; f<=1.0; f=f+0.01)                   // цикл перебора переменной f для поиска оптимального ее значения,
            {                                                  // при котором TWR - максимально
               G= 1;
               for ( orderIndex = 1; orderIndex < Qnt; orderIndex++) // при заданной f проходим по всем закрытым ордерам
                {                                                     // и считаем среднее геометрическое от TWR
                  TWR = 1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D));
                  G *= NormalizeDouble (MathPow(TWR, Pow),8);
                }
               if (G > G_Rez)  G_Rez = G;// если текущий > результирующего, то результирующий делаем равным текущему
               else break;               // иначе переходим на следующую итерацию цикла по f
            }
               
            
            if (f>0) H=D/(-f); //денежный эквивалент фракций (оптимального f) для торговли 0,1 лотом.
            lot = NormalizeDouble((AccountFreeMargin()/H)*Min_Lot,1);
            if (lot==0)    lot=Min_Lot;
            Print("H=D/(-f): ", H, " lot = ", DoubleToStr (lot,1), "Transaction_number = ", Transaction_number);  
            Print("G_Rez максимальна = ", DoubleToStr (G_Rez,8), " при f = ", f);             
            Print(" Максимальный лосс по позиции, D = ", DoubleToStr(D, 2), " Pow (1/Orders)= ", DoubleToStr(Pow, 8));
            Print("Закрытых позиций = ",   Qnt,
                " Нетто Профит/лосс = ", SUMM,
                " У последней ",         Qnt,
                " закрытой позы профит/лосс = ", Mas_Outcome_of_transactions[Qnt-1]);  
                
            return(lot);         
          }    // Выход из  if (Transaction_number<Qnt)                   
          else {
             lot=Min_Lot; 
             Print("Закрытых позиций = ",   Qnt, " Transaction_number = ", Transaction_number);
             return(lot); 
          } 
  
      }  //Выход из расчета оптимального f     

所以这里的一切都很正确--严格按照书上的规定。

把这个功能转给你的妻子,测试它,检查它,在这里分享你的结果。

附加的文件:
 
ph3onix:

1.首先想到的是,手数大小应基于下一个仓位的止损

2.知道 文斯的数学建议在交易中使用的脱欧部分

3......本线程中测试EA时使用的手数有点错误


1.这是你需要去的地方

2.你不熟悉文斯的数学,他建议采用完全不同的方法,我们不是在讨论你写的 "分数"...

"

最佳 f 本身并不是你账户中 分配给交易 百分比 ,它是最大损失的除数 这个除法的商就是你需要除以你的总账户的值,以便找出要下多少赌注或在市场上开多少合同。

"

3.所有这些都严格按照来源的信息进行--仔细阅读,特别是第31页,根据你的想法进行比较,检查,分享结果。

 

该主题并没有结束,继续如下...

批量计算功能在这里的EA中是公开的(见拖车)。

附加的文件:
 

你们显然是想多了。TWR是衡量初始账户增加多少倍的标准。最佳的f是每笔交易的风险占存款的百分比。TWR是最佳F的导数。只需在策略测试器中 计算出每笔交易从1到100%的风险百分比。在某个数值之后,最终利润将停止增长。这个值将是f的最佳值。

如果你为简单的存款百分比弄得如此混乱,那么想象一下你如何开始计算最佳的G(是的,有这样一个东西)是很可怕的。

 
C-4:

你们显然是想多了。TWR是衡量初始账户增加多少倍的标准。最佳的f是每笔交易的风险占存款的百分比。TWR是最佳F的导数。只需在策略测试器中计算出每笔交易从1到100%的风险百分比。在某个数值之后,最终利润将停止增长。这个值将是f的最佳值。

如果你为简单的存款百分比制造了这样的混乱,那么想象一下你如何开始计算最佳的G 是很可怕的。


已经计算出来了--所有的节拍,所有的测试,先看看这个主题...:-)

"你如何计算出最佳的G..." - 一切都从源头上计算...

 if (Transaction_number<Qnt) { //при репрезентативном кол-ве ордеров на истории открываемся объемом через оптим-ую f 
            Pow = 1/NormalizeDouble(Orders, 0);
            for (f = 0.01; f<=1.0; f=f+0.01)                   // цикл перебора переменной f для поиска оптимального ее значения,
            {                                                  // при котором TWR - максимально
               G= 1;
               for ( orderIndex = 1; orderIndex < Qnt; orderIndex++) // при заданной f проходим по всем закрытым ордерам
                {                                                     // и считаем среднее геометрическое от TWR
                  TWR = 1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D));
                  G *= NormalizeDouble (MathPow(TWR, Pow),8);
                }
               if (G > G_Rez)  G_Rez = G;// если текущий > результирующего, то результирующий делаем равным текущему
               else break;               // иначе переходим на следующую итерацию цикла по f
            }
               
            
            if (f>0) H=D/(-f); //денежный эквивалент фракций (оптимального f) для торговли 0,1 лотом.
            lot = NormalizeDouble((AccountFreeMargin()/H)*Min_Lot,1);
 
C-4:

...

如果你为了一个简单的存款百分比而弄得如此混乱,想象一下 你将如何开始计算最佳的G(是的,有这样一个东西),这是很可怕的。

我还没有遇到过,我去查一下,这是什么鸟--最优G......?
 
最佳的G是投资组合的资本化系数。为了找到最佳的G,至少必须优化总投资组合的方差,并精通马科维茨的 投资组合理论。我在这些计算中没有看到这种情况。
 

C-4:
1. Оптимальное G - это фактор капитализации портфеля. Для поиска оптимального G нужно как минимум оптимизировать дисперсию совокупного портфеля и свободно разбираться в портфельной теории Марковица.

2.我不认为上述计算有什么问题。


1.我明白了--这更接近于计算和投资组合形成的顺序......。我对这个问题感兴趣。

2.这里不存在这种情况。我把最佳G和几何平均G 混淆了,其计算方法在这里出现了......:-)

见该主题第一页 的第一篇帖子。

"

几何平均贸易

一个交易者可能对计算他的几何平均交易(即每笔交易的每份合同的平均利润)感兴趣,假设利润是再投资,并且可以交易小数合同。这是在固定分数基础上进行交易时的数学预期。在现实中,这是系统在使用账户的固定部分时每笔交易的大致回报。( 几何平均数实际上是指每笔交易中每份合同的数学期望值,即美元)。从几何平均数中减去1,你就得到了数学期望值。几何平均数1.025对应于每笔交易2.5%的数学预期)。 许多交易者只看市场系统的平均交易,看是否值得在这个系统上交易。然而,在做决定时,应该考虑的是几何平均交易(GAT

其中 G = 几何平均数-1

f = 最佳固定份额。

(当然,最大的损失将永远是一个负数)。

 
如果我是你,我就不会对这些废话太过在意。文斯的所有数学都是基于拟合的。f本身是不稳定的,往往会随着时间的推移而崩溃,对Z-Score或杠杆不对称效应也极为敏感,并给出了一个极其不均匀 的利润分配:前90%的时间需要赚取10%的利润。
 
C-4:
如果我是你,我就不会对这些废话太过在意。文斯的整个数学都是基于拟合。f本身并不稳定,往往会随着时间的推移而崩溃,此外,它对Z-Score或杠杆不对称效应极为敏感,它还会给出一个极其不均匀的利润分配:前90%的时间需要赚取10%的利润。


谢谢你,瓦西里提供的信息,它是什么,它可能会导致什么......我对这些地段的计算没有什么兴趣,只是很想把它全部敲出来,从不同的角度看,并与其他MM的方法进行比较,在一个或另一个公约......

顺便说一下,他还谈到了投资组合理论的多样化问题...:-)特别是当这些词以红色突出显示时...:-)有一本书,有公式--你怎么能不把这些信息放到代码中,看看它是如何在各个苏维埃的行动中计算出这批货的,我想知道......打开这本书--用它写一个系统,在测试器中看看它的行为,在一个演示中,作为一个开始...这个和那个...:-)挖掘,一般来说。顺便说一下,我最近用META-SOT指标监控了一个模拟账户,纯粹是基于 你的文章,没有其他类型的市场行为分析的影子--到目前为止一切都在盈利... :-)

"

越好

系统中,越高的 Ff越高 ,可能的损失就越大,因为最大的损失(作为一个百分比)不低于f这种情况的矛盾在于,如果一个系统能够产生足够高的最佳F,那么这样的系统的损失也会足够高。一方面,最佳F让你获得最高的几何增长,另一方面,它为你创造了一个陷阱,你很容易掉进去。

我们知道,如果你在交易固定份额时使用最佳f,你可以预期会有巨大的损失(占你余额的百分比)。 最佳f就像钚--它给人以巨大的力量,但它也是极其危险的。这些巨大的损失是一个很大的问题,特别是对于初学者来说,因为在最佳f水平上的交易比正常交易更快产生巨大损失的风险。多样化可以大大减轻损失。多样化的好处是,它允许你在同一时间进行许多尝试(运行许多游戏),从而增加你的整体利润。可 以说,分散投资虽然通常是平滑损失的最佳方式,但不一定能减少损失,在某些情况下甚至会增加损失!

有一种误解,认为只要分散投资足够有效,就可以完全避免损失。在某种程度上,确实可以通过有效的多样化来减轻损失,但永远不可能完全避免。不要被误导。无论应用的系统有多好,无论你如何有效地分散投资,你仍然会遇到重大损失。其原因不是因为你们的市场系统是相互关联的,因为有些时候,当你认为不应该的时候,投资组合的大部分或全部市场系统会对你不利。试着找到一个有五年历史数据的投资组合,以便所有的交易系统都能以最佳f工作,而且最大的损失还不超过30%!这将是不容易的。使用多少个市场系统并不重要。如果你想在数学上做一切正确的事情,你必须准备损失你账户余额的30-95%。需要严格的纪律,不是每个人都能遵守。

一旦交易者放弃交易恒定数量的合约,他/她就会面临交易数量的问题。无论交易员是否认识到这个问题,它总是发生。交易恒定数量的合同不是一个解决方案,因为这样你永远无法实现几何级数的增长。因此,无论你喜欢与否,在下一次交易中交易多少的问题对每个人来说都将是不可避免的。简单地选择一个随机的数量可能会导致一个严重的错误。 最优f是唯一在数学上正确的解决方案。

现代投资组合理论

想想看,有一个最佳的f和一个失败的市场系统的情况。 市场系统越好,f的值就越高。然而,如果你用最佳的f进行交易,损失(历史上)永远不可能小于f。一般来说,市场系统越好,如果你以最佳f交易,中间损失(占账户余额的百分比)就越大。因此,如果你想实现最高的几何增长,你必须准备好一路的严重损失。

"