Обсуждение статьи "Моральное ожидание в трейдинге" - страница 2

 

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

Не попадал на предыдущие статьи автора. Надо будет ознакомиться. Еще раз спасибо.

Aleksej Poljakov
Aleksej Poljakov
  • www.mql5.com
Профиль трейдера
 

Спасибо за статью.

Я так понял, что сильно на размер лота будет влиять серия прибыльных и убыточных сделок, полученных на истории и используемых для расчета лота. Поэтому, интересно посмотреть на результаты случайным образом беря исход сделок. Предполагаю, что результаты метрик прохода  будут сильно отличаться.

 
Aleksey Vyazmikin #:

Спасибо за статью.

Я так понял, что сильно на размер лота будет влиять серия прибыльных и убыточных сделок, полученных на истории и используемых для расчета лота. Поэтому, интересно посмотреть на результаты случайным образом беря исход сделок. Предполагаю, что результаты метрик прохода  будут сильно отличаться.

В скриптах результат сделок генерируется случайно. При этом, сам скрипт при расчете лота не знает какая вероятность задана изначально. Самое плохое что может случиться - несколько идущих подряд убыточных сделок, особенно в конце серии. Самое простое - при расчетах брать не весь депозит, а какой-то процент от него... Скажем 5-10%, тогда кривая баланса будет устойчивей - больших убытков не будет, но и профиты тоже уменьшатся. 

 
Aleksej Poljakov #:

В скриптах результат сделок генерируется случайно. При этом, сам скрипт при расчете лота не знает какая вероятность задана изначально. Самое плохое что может случиться - несколько идущих подряд убыточных сделок, особенно в конце серии. Самое простое - при расчетах брать не весь депозит, а какой-то процент от него... Скажем 5-10%, тогда кривая баланса будет устойчивей - больших убытков не будет, но и профиты тоже уменьшатся. 

Я про заключительную часть статьи пишу :

Давайте вместе посмотрим, как риск может повлиять на трейдинг. Для проверки мы будем использовать простейший советник на пересечении двух скользящих средних. Тестирование советника происходило при следующих параметрах:

И, повторюсь, важно исследовать окно для расчета исторических успехов\неудач, в том числе как оно меняется. Не будите же Вы за 10 лет брать пропорцию после, допустим, отбора стратегии в тестере стратегий.

 
Превосходная работа.
Автор молодец, статью - в закладки.
 

Интересный подход. Но возник вопрос: имеет ли моральное ожидание такой же физический смысл как математическое ожидание? В статье две интерпретации математического ожидания - через сумму (например, 11 дукатов в начале статье), и через пункты (в формуле p*TP - (1-p)*SL). Про моральное ожидание пояснений нет, но судя по основной формуле - моральное ожидание это сумма, потому что корреспондирует с депозитом.

Тогда следующий вопрос. Хотелось бы рассмотреть, ИМХО, востребованную задачу, отсутствующую в статье. Дается депозит, дается желаемое моральное ожидание как часть депозита (Mr = Fraction * Deposit) и лот. При различных значениях вероятности выигрыша построить кривые SL/TP. Судя по всему, для вероятности 0.5 задача не определена.

Я попробовал это сделать навскидку, наверно с ошибками. Повсюду лезут либо странные числа, либо NaN-ы - вылет за область определения корней.

Вот например, со стороны из SL посчитать TP:

#property script_show_inputs

input double Amount = 10000;
input double MoralExpectationPercent = 0.01;
input double Lot = 0;
input double WinProbability = 0.75;

void OnStart()
{
   const double pv = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)
      * SymbolInfoDouble(_Symbol, SYMBOL_POINT) / SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   const double lot = (Lot == 0 ? SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN) : Lot);

   const double sls[] = {10, 100, 1000};

   for(int i = 0; i < ArraySize(sls); ++i)
   {
      const double sl = sls[i];
      const double slp = sl * lot * pv;
      const double y1 = (1 + MoralExpectationPercent) * Amount * MathPow(Amount - slp, WinProbability - 1);
      const double tp = (MathPow(y1, 1 / WinProbability) - Amount) / (lot * pv);
      Print(sl, " ", tp);
   }
}

Выводит:

10.0 13358.8842517167
100.0 13389.287146464994
1000.0 13693.516911708502
 
Stanislav Korotky #:

Интересный подход. Но возник вопрос: имеет ли моральное ожидание такой же физический смысл как математическое ожидание? В статье две интерпретации математического ожидания - через сумму (например, 11 дукатов в начале статье), и через пункты (в формуле p*TP - (1-p)*SL). Про моральное ожидание пояснений нет, но судя по основной формуле - моральное ожидание это сумма, потому что корреспондирует с депозитом.

Тогда следующий вопрос. Хотелось бы рассмотреть, ИМХО, востребованную задачу, отсутствующую в статье. Дается депозит, дается желаемое моральное ожидание как часть депозита (Mr = Fraction * Deposit) и лот. При различных значениях вероятности выигрыша построить кривые SL/TP. Судя по всему, для вероятности 0.5 задача не определена.

Я попробовал это сделать навскидку, наверно с ошибками. Повсюду лезут либо странные числа, либо NaN-ы - вылет за область определения корней.

Вот например, со стороны из SL посчитать TP:

Выводит:

строка const double y1 = (1 + MoralExpectationPercent) * Amount * MathPow(Amount - slp, WinProbability - 1);

WinProbability - 1 - отрицательное значение всегда... а оно должно быть строго неотрицательным

так правильнее

Файлы:
 
Stanislav Korotky #:

Интересный подход. Но возник вопрос: имеет ли моральное ожидание такой же физический смысл как математическое ожидание? В статье две интерпретации математического ожидания - через сумму (например, 11 дукатов в начале статье), и через пункты (в формуле p*TP - (1-p)*SL). Про моральное ожидание пояснений нет, но судя по основной формуле - моральное ожидание это сумма, потому что корреспондирует с депозитом.

Тогда следующий вопрос. Хотелось бы рассмотреть, ИМХО, востребованную задачу, отсутствующую в статье. Дается депозит, дается желаемое моральное ожидание как часть депозита (Mr = Fraction * Deposit) и лот. При различных значениях вероятности выигрыша построить кривые SL/TP. Судя по всему, для вероятности 0.5 задача не определена.

Я попробовал это сделать навскидку, наверно с ошибками. Повсюду лезут либо странные числа, либо NaN-ы - вылет за область определения корней.

Вот например, со стороны из SL посчитать TP:

Выводит:

вторая ошибка - мы не можем назначить какое угодно моральное ожидание...

Моральное ожидание всегда меньше математического. Они приближаются друг к другу при росте депозита. Поэтому задача сводится строго к следующим условиям: при положительном математическом ожидании получить положительное моральное ожидание

 
Aleksej Poljakov #:

строка const double y1 = (1 + MoralExpectationPercent) * Amount * MathPow(Amount - slp, WinProbability - 1);

WinProbability - 1 - отрицательное значение всегда... а оно должно быть строго неотрицательным

так правильнее

Я вроде следовал строгим мат.преобразованиям - не вижу, где ошибка? Пока оставим за скобками смысл самой величины и просто смотрим формулу как абстракцию.

Исходная, с подставленной частью F депозита D вместо оригинального Mr: F * D = (D + L * TP * PV)^p * (D - L * SL *PV)^(1-p) - D

У нас же получались числа морального ожидания в несколько десятков, почему мы не можем любое число обозначить как % от депозита? Можем.

Далее получаем:

(1+F)*D = (...)^p * (...)^(1-p)

(1+F)*D / (...)^(1-p) = (...)^p

Обращаем внимание, что 1 / x^y -> x^-y, так можно избавиться от дроби, хотя для компьютера не принципиально, что считать, но формула без дроби проще читается.

(1+F)*D * (...)^(p-1) = (...)^p

[ (1+F)*D * ( D - L * SL *PV )^(p-1) ] ^ (1/p) =  ( D + L * TP * PV )

У меня в коде в переменной y1 находится то, что в квадратных скобках.

В вашем варианте кода неполная формула.

 
Stanislav Korotky #:

Я вроде следовал строгим мат.преобразованиям - не вижу, где ошибка? Пока оставим за скобками смысл самой величины и просто смотрим формулу как абстракцию.

Исходная, с подставленной частью F депозита D вместо оригинального Mr: F * D = (D + L * TP * PV)^p * (D - L * SL *PV)^(1-p) - D

У нас же получались числа морального ожидания в несколько десятков, почему мы не можем любое число обозначить как % от депозита? Можем.

Далее получаем:

(1+F)*D = (...)^p * (...)^(1-p)

(1+F)*D / (...)^(1-p) = (...)^p

Обращаем внимание, что 1 / x^y -> x^-y, так можно избавиться от дроби, хотя для компьютера не принципиально, что считать, но формула без дроби проще читается.

(1+F)*D * (...)^(p-1) = (...)^p

[ (1+F)*D * ( D - L * SL *PV )^(p-1) ] ^ (1/p) =  ( D + L * TP * PV )

У меня в коде в переменной y1 находится то, что в квадратных скобках.

В вашем варианте кода неполная формула.

Если мы назначили какое-то желаемое нам моральное ожидание сделки, то мы (из свойства моральное ожидание меньше математического) получаем такое неравенство:

p* L * TP * PV - (1-p) *L * SL *PV > F*D

то есть, вместо того, чтобы найти значение TP при котором моральное ожидание становится положительным, мы начинаем искать значение TP такое, что математическое ожидание становится больше заданной величины

Причина обращения: