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

 
Vinin:

Я только про количество анализируемых сделок. Реальных или виртуальных


Аааа, сейчас понял, возможно, это не совсем тот подход, т.к. выборка должна быть прежде всего - репрезентативной, т.е. чем больше, тем лучше...

У каждого, конечно, критерии свои - кому-то и 200 - достаточно, а кому-то и 500 - мало...

Продолжаю копать дальше по оптимальному решению поиска оптимального (извиняйте за тофтологию) f по Р.Винсу по его методу среднего геометрического.

 
MaxZ:
Я не совсем такие давал рекомендации. Это уже больше Ваш подход. Главное, чтобы он также оказался верным.


Ну, как же - ведь я именно это и сделал, только сразу по отношению к TWR -, но не к ее среднему геометрическому G.

"Ведь если корень степени K из числа_1 больше корня той же степени K из числа_2, то и число_1 больше числа_2! :))))))"

TWR — это «относитель­ный конечный капитал» (Terminal Wealth Relative),

 TWR = MathPow(TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))),0.33); // TWR - это произведение всех HPR    
 
Roman.:


Я делаю все расчеты в тетере по ценам открытия, сделок с 2002 по наст. вр. 2011 - 503, наиб. уб. сделка = -628.

Результаты выше. Сейчас проверяю на других вариантах советников.

Вот текст подхода к решению этой задачи из первоисточника - стр. 31.

Мы увидели, что лучшей торговой системой является система с наивыс­шим средним геометрическим. Для расчета среднего геометрического необ­ходимо знать 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 единицы). Многие думают, что оптимальная фиксированная доля — это процент счета, который отводится


Может есть смысл перейти к логарифмам. Заменить произведение на сумму
 
Vinin:

Может есть смысл перейти к логарифмам. Заменить произведение на сумму


Благодарю, Виктор, не исключено, надо будет попробовать, но я пока проверяю такой вариант уменьшения произведения - возведение его в степень 1/3.

//TWR — это «относительный конечный капитал» (Terminal Wealth Relative), 
 TWR = MathPow(TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))),0.33); // TWR - это произведение всех HPR    
 
Roman.:


Ну, как же - ведь я именно это и сделал, только сразу по отношению к TWR -, но не к ее среднему геометрическому G.

"Ведь если корень степени K из числа_1 больше корня той же степени K из числа_2, то и число_1 больше числа_2! :))))))"

TWR — это «относитель­ный конечный капитал» (Terminal Wealth Relative),

У Вас пропала операция:

TWR = TWR* ...

Не знаю, как это отразится на расчёте лота по Винсу, но Моя рекомендация не исключала данную операцию.

Я предлагал сделать массив TWR[]. А G считать так:

G *= MathPow(TWR[orderIndex], 1/N);


Roman.:


Благодарю, Виктор, не исключено, надо будет попробовать, но я пока проверяю такой вариант уменьшения произведения - возведение его в степень 1/3.

Да даже если и убрать корень третьей степени, то переполнение double всё равно происходить не будет.
 
Roman.:
for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
{                                                  // и считаем относительный конечный капитал (TWR)
   TWR = TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // TWR - это произведение всех HPR
}

А почему у Вас в цикле for() условие именно "orderIndex<Qnt"? Получается Вы последний элемент массива TWR пропускаете?
 
MaxZ:

У Вас пропала операция:

Не знаю, как это отразится на расчёте лота по Винсу, но Моя рекомендация не исключала данную операцию.

Я предлагал сделать массив TWR[]. А G считать так:


Да даже если и убрать корень третьей степени, то переполнение double всё равно происходить не будет.


У меня происходит переполнение при прочих равных условиях, включая общее значения: количества сделок = 503 и макс убыточную=-628...

Вы у себя то проверьте, на любом Вашем сове - код выложен на первой страничке - добавить во внешние переменные и в ф-ию де-инит... И все.

 

MaxZ:


А почему у Вас в цикле for() условие именно "orderIndex<Qnt"? Получается Вы последний элемент массива TWR пропускаете?


Массива TWR - нет вообще, его организовывать не обязательно, достаточно вычислить f и все, там интересует только сравнение TWR при различном f (в цикле) и все, дабы узнать значение f при максимальном TWR и все.

Там все нормально работает сравните - первую и последнюю строчки - значение профита по последней сделки вкладок "Журнал" и "Результат" соответственно...


Номера сделок разные, т.к. у меня в сове закрытие происходит от последнего ордера в рынке к первому. Главное, что количество бьет - 503 сделки - там (в тестере) и там (в расчетаХ) +

значение последней закрытой 503 сделки 1076 - перебор ордеров по истории в ф-ии де-инит происходит с начала до крайнего (последнего) закрытого.

 
Roman.:


Массива TWR - нет вообще, его организовывать не обязательно, достаточно вычислить f и все, там интересует только сравнение TWR при различном f (в цикле) и все, дабы узнать значение f при максимальном TWR и все.

Там все нормально работает сравните - первую и последнюю строчки - значение профита по последней сделки вкладок "Журнал" и "Результат" соответственно...


Запутался совсем. Я имел ввиду массив Mas_Qutcome_of_transactions[]. Ведь получается цикл один его элемент не досчитывает...

И зачем смотреть Мне отчёт, если Я вижу неточность в коде. Я в чудеса не верю! :D

И может сделки, закрытые тестером, учитывать не нужно?? Ведь это не по Вашей ТС они закрылись...

 
MaxZ:

Запутался совсем. Я имел ввиду массив Mas_Qutcome_of_transactions[]. Ведь получается цикл один его элемент не досчитывает...

И зачем смотреть Мне отчёт, если Я вижу неточность в коде. Я в чудеса не верю! :D

И может сделки, закрытые тестером, учитывать не нужно?? Ведь это не по Вашей ТС они закрылись...


Да, щас проверю с условием <=Qnt. Все сделки закрыты по ТС, тестером закрыты последние 10 (считаю это в пределах разумного допуска... :-)))).
Причина обращения: