Расчет лота по Винсу - страница 11

 

Поиск оптимального f с помощью среднего геометрического.

В реальной торговле размер проигрышей и выигрышей будут постоянно меняться. Поэтому формулы Келли не могут дать нам правильное оптимальное f. Как корректно с математической точки зрения найти оптимальное f, которое по­зволит нам определить количество контрактов для торговли? Попытаемся ответить на этот вопрос. Для начала мы должны изменить формулу для поиска HPR, включив в нее f:

далее см формулы с первого поста ветки

далее

Мы увидели, что лучшей торговой системой является система с наивыс­шим средним геометрическим. Для расчета среднего геометрического необ­ходимо знать f. Итак, давайте поэтапно опишем наши действия.

1. Возьмите историю сделок в данной рыночной системе.

2. Найдите оптимальное f, просмотрев различные значения f от 0 до 1. Опти­мальное f соответствует наивысшему значению TWR.

3. После того, как вы найдете f, возьмите корень N-й степени TWR (N — общее ко­личество сделок). Это и есть ваше среднее геометрическое для данной рыночной системы. Теперь можно использовать полученное среднее геометрическое, что­бы сравнивать эту систему с другими. Значение f подскажет вам, сколькими кон­трактами торговать в данной рыночной системе. После того, как найдено f, его можно перевести в денежный эквивалент, разделив наибольший проигрыш на отрицательное оптимальное/. Например, если наиболь­ший проигрыш равен 100 долларам, а оптимальное f = 0,25, тогда -100 долла­ров / -0,25 = 400 долларов. Другими словами, следует ставить 1 единицу на каж­дые 400 долларов счета. Для простоты можно все рассчитывать на основе единиц (например одна 5-долларовая фишка или один фьючерсный контракт, или 100 акций). Количество долларов, которое следует отвести под каждую единицу, мож­но рассчитать, разделив ваш наибольший убыток на отрицательное оптимальное f. Оптимальное f — это результат равновесия прибыльности системы (на основе 1 единицы) и ее риска (на основе 1 единицы). Многие думают, что оптимальная фиксированная доля — это процент счета, который отводится под ваши ставки. Это совершенно неверно. Должен быть еще один шаг. Оптимальное f само по себе не является процентом вашего счета, который отводится под торговлю, это дели­тель наибольшего проигрыша. Частным этого деления является величина, на ко­торую надо разделить общий счет, чтобы выяснить, сколько ставок сделать или сколько контрактов открыть на рынке.

Т.е. AccountFreeMargin()/H, при H=D/(-f).

Вот как это организовано в коде сОва - см. прицеп.

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. ...расчитываемый размер лота использованный при тестировании советников из этой ветки немного не верен.


1. Это Вам нужно сюда обратиться.

2. Вы не знакомы с математикой Винса, он рекомендует совершенно другой подход, ни о каких "долях", как Вы пишете у него речь не идет...

"

Оптимальное f само по себе не является процентом вашего счета, который отводится под торговлю, это дели­тель наибольшего проигрыша. Частным этого деления является величина, на ко­торую надо разделить общий счет, чтобы выяснить, сколько ставок сделать или сколько контрактов открыть на рынке.

"

3. Все строго по информации с первоисточника - читайте внимательнее, особенно со страницы 31, сравнивайте на своих сОвах, проверяйте, делитесь результатами.

 

Тема не закрыта, продолжение следует...

Функция расчета лота выложена здесь в советнике (см. прицеп) в открытый доступ.

Файлы:
 

Ребята, вы что-то явно перемудрили. 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,025 соответствует математическому ожида­нию в 2,5% за сделку). Многие трейдеры смотрят только на среднюю сделку ры­ночной системы, чтобы понять, стоит ли торговать по этой системе. Однако при принятии решения следует обращать внимание именно на среднюю геометри­ческую сделку (GAT).

где G = среднее геометрическое - 1;

f = оптимальная фиксированная доля.

(Разумеется, наибольший убыток всегда будет отрицательным числом).

 
Я бы на Вашем месте сильно не увлекался бы этой хренью. Вся математика Винса базируется на подгонке. Сама f не стабильна и имеет свойство коллапсировать во времени, к тому же крайне чувствительна к Z-Score или эффекту ассимитричности рычага, так же дает крайне не равномерное распределение прибыли: первые 90% времени уйдут на то, что бы заработать 10% прибыли.
 
C-4:
Я бы на Вашем месте сильно не увлекался бы этой хренью. Вся математика Винса базируется на подгонке. Сама f не стабильна и имеет свойство коллапсировать во времени, к тому же крайне чувствительна к Z-Score или эффекту ассимитричности рычага, так же дает крайне не равномерное распределение прибыли: первые 90% времени уйдут на то, что бы заработать 10% прибыли.


Благодарю, Василий за инфу, что это, и к чему может привести...я сильно и не увлекаюсь этими расчетами лота, просто интересно было забабахать все это и смотреть с разных сторон и сравнивать с другими подходами к ММ в том или ином сОве...

Он, тут, кстати, затрагивает и тему диверсификации с теорией портфеля...:-) Тем более, когда ТАКИЕ слова - выделено красным...:-) Есть книжка, есть формулы - как тут не переложить эту инфу в код и не посмотреть его расчет лота в действии на различных сОвах, мне интересно... Открываешь книжку - пишешь по ней систему, смотришь на ее поведение в тестере, на демо, для начала... то, се... :-) Копаю, в общем. Кстати, недавно замониторил демо-счет, по индикаторам МЕТА-СОТ, чисто по фундаменту, из Вашей статьи без тени прочих видов анализа поведения Рынка - пока все в профите...:-)

"

Чем лучше

система, тем выше f. Чем выше f, тем больше возможный проигрыш, так как максимальный проигрыш (в процентах) не меньше f. Парадокс ситуации заклю­чается в том, что если система способна создать достаточно высокое оптималь­ное f, тогда проигрыш для такой системы также будет достаточно высоким. С одной стороны, оптимальное f позволяет вам получить наибольший геометри­ческий рост, с другой стороны, оно создает для вас ловушку, в которую можно легко попасться.

Мы знаем, что если при торговле фиксированной долей использовать опти­мальное f, то можно ожидать значительных проигрышей (в процентах от балан­са). Оптимальное f подобно плутонию — оно дает огромную силу, однако и чрез­вычайно опасно. Эти значительные проигрыши — большая проблема, особенно для новичков, потому что торговля на уровне оптимального f создает опасность получить огромный проигрыш быстрее, чем при обычной торговле. Диверсифи­кация может сильно сгладить проигрыш. Плюсом диверсификации является то, что она позволяет делать много попыток (проводить много игр) одновременно, тем самым увеличивая общую прибыль. Справедливости ради следует отметить, что ди­версификация, хотя обычно она и является лучшим способом для сглаживания проигрышей, не обязательно уменьшает их и в некоторых случаях может даже увеличить убытки!

Существует ошибочное представление, что проигрышей можно полностью избежать, если провести достаточно эффективную диверсификацию. До не­которой степени верно, что проигрыши можно смягчить посредством эффек­тивной диверсификации, но их никогда нельзя полностью исключить. Не вводите себя в заблуждение. Не имеет значения, насколько хороша применяе­мая система, не имеет значения, как эффективно вы проводите диверсифика­цию, вы все равно будете сталкиваться со значительными проигрышами. При­чина этого не во взаимной корреляции ваших рыночных систем, поскольку бывают периоды, когда большинство или все рыночные системы портфеля работают против вас, когда, по вашему мнению, этого не должно происхо­дить. Попробуйте найти портфель с пятилетними историческими данными, чтобы все торговые системы работали бы при оптимальном f и при этом мак­симальный убыток был бы менее 30%! Это будет непросто. Не имеет значения, сколько при этом рыночных систем используется. Если вы хотите все сделать математически правильно, то надо быть готовым к проигрышу от 30 до 95% от баланса счета. Необходима строжайшая дисциплина, и далеко не все могут ее соблюдать.

Как только трейдер отказывается от торговли постоянным количеством кон­трактов, он сталкивается с проблемой, каким количеством торговать. Это проис­ходит всегда независимо от того, признает трейдер данную проблему или нет. Тор­говля постоянным количеством контрактов не является решением, так как таким образом никогда нельзя добиться геометрического роста. Поэтому, нравится вам это или нет, вопрос о том, каким количеством торговать в следующей сделке, будет неизбежен для всех. Простой выбор случайного количества может привести к серьезной ошибке. Оптимальное f является единственным математически верным решением.

Современная теория портфеля

Вспомните ситуацию с оптимальным f и проигрышем рыночной системы. Чем лучше рыночная система, тем выше значение f. Однако если вы торгуете с опти­мальным f, проигрыш (исторически) никогда не может быть меньше f. Вообще го­воря, чем лучше рыночная система, тем больше будут промежуточные проигрыши (в процентах от баланса счета), если торговать при оптимальном f. Таким образом, если вы хотите достичь наибольшего геометрического роста, то должны быть гото­вы к серьезным проигрышам на своем пути.

"