Обсуждение статьи "R-квадрат как оценка качества кривой баланса стратегии" - страница 4

 

Выводы о какой-то статистической связи могут быть неверными, если не проведена работа с выбросами - outliers detection. 

 
Dennis Kirichenko:

Выводы о какой-то статистической связи могут быть неверными, если не проведена работа с выбросами - outliers detection. 

Если делать R^2 критерием Оптимизации (OnTester), то в топку какой-либо анализ остатков ЛР и их коэффициентов.

Поскольку доп. анализ увеличивает столь драгоценное время Оптимизации, а толку с гулькин нос - ситуация кардинально не изменится: наверху будут все те же "гладкие" кривые эквити, которые и желали изначально получить.

 
СанСаныч Фоменко:

Автор проявляет полное не понимание СЛУЧАЙНЫХ ПРОЦЕССОВ. Все выводы статьи не имеют отношения к самому понятию СЛУЧАЙНОСТИ, вводят людей в заблуждение.

Поясню это свое мнение.

В самом начале статьи дано определение:

Линейной регрессией называется линейная зависимость одной переменной y от другой независимой переменной x, выраженная формулой y = ax+b. В этой формуле а — множитель, b — коэффициент смещения

Линейная регрессия НЕ выражается формулой 

y = ax+b  - это формула линейного уравнения,

а выражается формулой

y = ax+b +ошибка

Ошбика должна быть НОРМАЛЬНО РАСПРЕДЕЛЕНА, а если это не так, то возникает множество нюансов, которые очень сильно ограничивают применение линейной регрессии.

Крайне важно понимать, что коэффициенты линейной регрессии, в отличии от линейного уравнения, НЕ являются константами, а являются СЛУЧАЙНЫМИ величинами и если взять стандартную подгонку линейной регрессии, например в R,  то всегда для коэффициентов линейной  регрессии указывается отклонение от той величины коэффициентов,  а также вероятность (вероятность в нулевой гипотезе НЕ СУЩЕСТВОВАНИЯ ЭТОГО КОЭФФИЦИЕНТА). Еще раз: в отличии от линейного уравнения коэффициенты линейной регрессии  могут вообще не существовать. Именно поэтому коэффициент  R2, который обсуждается в статье,  имеет смысл только для регрессий. в которых вероятность НЕ СУЩЕСТВОВАНИЯ коэффициентов этой самой регрессии ниже хотя бы 10%. На финансовых рядах я ни разу не видел, чтобы коэффициенты линейной регрессии были знАчимы и, следовательно, можно было бы пользоваться этой самой линейной регрессией.

СанСаныч не мешайте. Лепим как умеем!

p.s. Видно, что по диагонали прочитали. R^2 рассчитывается не для графиков котировок, а equity. Его основная задача показать ровную эквити. Все. Соответствует она случайной или не соответствует - это пусть решает юзер:

fxsaber:

Если делать R^2 критерием Оптимизации (OnTester), то в топку какой-либо анализ остатков ЛР и их коэффициентов.

Поскольку доп. анализ увеличивает столь драгоценное время Оптимизации, а толку с гулькин нос - ситуация кардинально не изменится: наверху будут все те же "гладкие" кривые эквити, которые и желали изначально получить.

+
 

Короче, не правильный знак берется отсюда:

Начинали со 100 000. Комиссия 0. Сумма по сделкам +513, но итоговый баланс 99 755.90, т.е. где-то не хватает 757.1$

Как так?

 
Vasiliy Sokolov:

Короче, не правильный знак берется отсюда:

Я бы несколько переформулировал. Замечание по правильности знака касалось общего случая - не только эквити. Если же по эквити делать, как у Вас, сравнение первого и последнего значения, то, скорее всего, неправильность знака в этом случае будет побеждена. Разобраться бы с общим случаем.

Начинали со 100 000. Комиссия 0. Сумма по сделкам +513, но итоговый баланс 99 755.90, т.е. где-то не хватает 757.1$

Как так?

HTML-отчет помог бы разобраться.

 
fxsaber:

Я бы несколько переформулировал. Замечание по правильности знака касалось общего случая - не только эквити. Если же по эквити делать, как у Вас, сравнение первого и последнего значения, то, скорее всего, неправильность знака в этом случае будет побеждена. Разобраться бы с общим случаем.

HTML-отчет помог бы разобраться.

К сожалению equity показывает тот же результат что и по балансу. Итоговые значения в обоих случаях полностью совпадают: +513$. Но вообще они должны совпадать, т.к. завершении тестирования все сделки закрываются и еквити сравнивается с балансом.

fxsaber:

HTML-отчет помог бы разобраться.

Сейчас вышлю.

 

?:%:?* Разобрался. Своп забыл учесть (Своп к прибыли не суммируется)! 

 

Готово. Исправлена функция подсчета баланса. Теперь каждая сделка учитывает также своп:

//+------------------------------------------------------------------+
//| Возвращает оценку R^2, рассчитанную на основе баланса стратегии  |
//+------------------------------------------------------------------+
double CustomR2Balance(ENUM_CORR_TYPE corr_type = CORR_PEARSON)
{
   HistorySelect(0, TimeCurrent());
   double deals_equity[];
   double sum_profit = 0.0;
   int current = 0;
   int total = HistoryDealsTotal();
   for(int i = 0; i < total; i++)
   {
      ulong ticket = HistoryDealGetTicket(i);
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
      double swap = HistoryDealGetDouble(ticket, DEAL_SWAP);
      if(profit == 0.0 && swap == 0.0)
         continue;
      if(ArraySize(deals_equity) <= current)
         ArrayResize(deals_equity, current+16);
      sum_profit += profit + swap;
      deals_equity[current] = sum_profit;
      current++;
   }
   ArrayResize(deals_equity, current);
   return CustomR2Equity(deals_equity, corr_type);
}

Исправлен расчет equity таким образом, что конечное его значение синхронизируется с фактическим результатом:

//+------------------------------------------------------------------+
//| Добавляет мониторинг еквити                                      |
//+------------------------------------------------------------------+
double CStrategyList::OnTester(void)
{
   switch(m_custom_type)
   {
      case CUSTOM_NONE:
         return 0.0;
      case CUSTOM_R2_BALANCE:
         return CustomR2Balance(m_corr_type);
      case CUSTOM_R2_EQUITY:
      {
         double equity[];
         m_equity_exp.GetEquityArray(equity);
         int total = ArrayResize(equity, ArraySize(equity)+1);
         equity[total-1] = AccountInfoDouble(ACCOUNT_EQUITY);
         return CustomR2Equity(equity, m_corr_type);
      }
   }
   return 0.0;
}

Т.к. интервал сбора эквити может быть большим, последнее известное значение может отличаться от фактического. Поэтому добавляем дополнительное последнее значение равное итоговому результату.

p.s. Исправления внесены в статью. Статья отправлена на обновление модератору.
 
Vasiliy Sokolov:

?:%:?* Разобрался. Своп забыл учесть (Своп к прибыли не суммируется)! 

Я бы и дальше не учитывал

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

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

fxsaber, 2017.10.24 15:18

Код для расчета "эквити", годного для R^2. Написан в MT4-стиле, в MT5 перевести несложно...

static double GetOrderProfit( void )
  {
    return((OrderProfit()/* + OrderCommission() + OrderSwap()*/) / OrderLots()); // комиссия и своп иногда полезно игнорировать
  }

Своп к оценке профитности ТС почти никакого отношения не имеет и только вносит искажения при оценке робастности.

 
fxsaber:

Я бы и дальше не учитывал

Своп к оценке профитности ТС почти никакого отношения не имеет и только вносит искажения при оценке робастности.

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

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