Ошибки, баги, вопросы - страница 2319

 
Здравствуйте! Подскажите как исправить ошибку с неправильным отображением цены? Все индиааторы сбивает. eurusd
 
Slava:

Настройки символа, а не графика.

В обзоре рынка в контекстном меню символа выбрать «спецификация символа»

 
Igor Semyonov:

Спасибо.

Покажите пожалуйста логи терминала на момент проблемы от начала старта

 
Slava:

Спасибо.

Покажите пожалуйста логи терминала на момент проблемы от начала старта

Лог-файл направил личным сообщением.

 
Igor Semyonov:

Лог-файл направил личным сообщением.

Да, спасибо.

По логам всё чисто.

Скажите, описанная Вами ситуация продолжается?

 

Объем без DoubleToString(Volume, 2). На скрине EURUSD.

 
Slava:

Да, спасибо.

По логам всё чисто.

Скажите, описанная Вами ситуация продолжается?

После перезагрузки терминала пока все нормально.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

pantural, 2018.11.01 16:03

Здравствуйте уважаемые разрабы МТ, хочу сообщить об ошибке в алгоритме вычисления коэффициента Шарпа. В приложении отчет ув. господина Aleksey Vyazmikin где SR=0.29 однако по моим расчетам он равен примерно 3.7-3.8(в зависимости учитывать ли нулевые PnL) предполагаю что ошибка в отсутствии масштабирующего коэффициента при среднеквадратичном отклонении (sqrt(length)), так как средний ретурн не зависит от длинны ряда, он сходится, а СКО растет как sqrt(length)

C++

double SharpRatio(vector<double> pnl)

{

double avret = 0;

for (int i = 0; i < pnl.size(); ++i) avret += pnl[i];

avret /= pnl.size();


double var = 0;

for (int i = 0; i < pnl.size(); ++i) var += pow(pnl[i] - avret, 2);

var = sqrt(var / pnl.size()) / sqrt(pnl.size());


return  avret / var;

}

Возьмем две одинаковые ТС. Запустили их одновременно. Через сутки они обе показали массив pnl. Первую остановили, вторую - нет. Еще через сутки вторая показала точно такой же pnl.

Т.е. у первой pnl[], а у второй pnl[]+pnl[]. Т.е. вторые сутки торговля была идентична первым суткам.


Тогда по предложенной формуле коэффициент Шарпа у второй ТС будет в sqrt(2) (корень из двойки) меньше, чем у первой. Но торговали же они идентично!

 
fxsaber:

Возьмем две одинаковые ТС. Запустили их одновременно. Через сутки они обе показали массив pnl. Первую остановили, вторую - нет. Еще через сутки вторая показала точно такой же pnl.

Т.е. у первой pnl[], а у второй pnl[]+pnl[]. Т.е. вторые сутки торговля была идентична первым суткам.


Тогда по предложенной формуле коэффициент Шарпа у второй ТС будет в sqrt(2) (корень из двойки) меньше, чем у первой. Но торговали же они идентично!

Как там в анекдоте? "Их нужно убивать пока они маленькие" .

Ну давайте разберем на примере из файла, приложенного в . А то в теории всё выглядит устрашающе, пока руками не пощупаешь.

Там в этом файле 144 трейда, для которых Шарп получился 0.29 (на сайте показывается с точностью до 2 знаков, и то нормально - никому не нужно 5 знаков после запятой, в данном случае 2 знака хватает за глаза для сравнения двух стратегий).

Шарп считается как отношение K/STD, где:

  • K - средний коэффициент прироста за историю торговли
  • STD - это среднеквадратичное отклонение приростов за историю торговли

Пусть у нас стало в два раза больше трейдов, которые были копией предыдущих трейдов. Это означает, что теперь трейдов сталов 288 = 144*2. При этом K у нас не изменится. Значит, изменение Шарпа может происходить только за счет изменения STD.

Начальный STD=MathSqrt(X2/(n-1)), где:

  • X2 - сумма квадратов отклонений от среднего X_aver
  • n - количество тейдов == 144

То есть Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)

У нас стало в два раза больше трейдов, поэтому для истории в два раза больше новый Шарп вычисляется так:

SharpeNew=MathSqrt(X2_new/(2*144-1))

где  X2_new=2*X2. Поэтому отношение  SharpeNew/Sharpe = MathSqrt(X2/(144-1))  / MathSqrt(X2_new/(2*144-1))   =

MathSqrt(X2/(144-1))  / MathSqrt(2* X2/(2*144-1)) =  MathSqrt(X2/(143))  / MathSqrt(2* X2/(283))= MathSqrt(X2*283/(2*143*X2))= MathSqrt(283/286)= 0.994741 

Даже если я перепутал знаменатель с числителем, то SharpeNew будет находиться в интервале 0.292919 - 0.296025.   То есть разница будет где-то на третьем знаке.

Но никак в 10-20 раз. Проверьте сами, где я ошибся.

 
Rashid Umarov:

Как там в анекдоте? "Их нужно убивать пока они маленькие" .

Вы меня не поняли.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.11.06 13:23

Тогда по предложенной формуле коэффициент Шарпа у второй ТС будет в sqrt(2) (корень из двойки) меньше, чем у первой. Но торговали же они идентично!


Имелась в виду процитированная формула из C++.


ЗЫ А в используемой в MT формуле, конечно, единицу бы не отнимал. Тогда предложенный пример, сколько бы интервалов по 144 не наблюдалось, Шарп всегда бы совпадал.

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