Система на основе корреляции от marattmb из Граалей + советник Abram

Afar230

Интересующийся
Извиняюсь, где-то у меня ошибка. Протестировал сейчас у брокера Альпари и старую версию, и новую с одинаковыми настройками. Результат одинаковый. Теперь мне не понятно, как получился тест, что выложил в посте 1248.
 

lsv107

Почетный гражданин
Извиняюсь, где-то у меня ошибка. Протестировал сейчас у брокера Альпари и старую версию, и новую с одинаковыми настройками. Результат одинаковый. Теперь мне не понятно, как получился тест, что выложил в посте 1248.
Можно сет ваш посмотреть? Все может быть, в том числе и моя ошибка.
 

vladradon

Программист
А счет у вас какой открыт? (тип)
Кстати, за последний месяц (4 недели), что я своего сова гоняю, 5-й терминал обновлялся минимум 3 раза и именно что-то с тестером связано, т.к. у меня в тестере пропадала вкладка "Оптимизация" и появлялась только после остановки оптимизации, потом все вернули, но если свернуть тестер, то он автоматом сбрасывает начальный депо на 10000, что тоже раздражает, когда используешь автолот...
Если хочешь, могу скинуть функции расчета корреляции по Пирсону для 5-ки. Этот фильтр может спасти депозит.
 
Последнее редактирование:

emagic

Интересующийся
Добавил увеличение лота для обоих типов сетки.
Для ДЕМО.
Введи пожалуйста проверку открытых пар ордеров. У меня стоит открывать 20 40 60

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

vladradon

Программист
Скиньте пожалуйста
Я выкладываю код, который можно просто скопировать и вставить в свой код.
PHP:
input int    BarsCount=300;              //Количество расчетных баров
input ENUM_TIMEFRAMES TF=PERIOD_CURRENT; //Расчетный таймфрейм
double BaseOpen[],BaseHigh[],BaseLow[],BaseClose[];
double HedgeOpen[],HedgeHigh[],HedgeLow[],HedgeClose[];
double AverageBase=0.0,AverageHedge=0.0;
//+------------------------------------------------------------------+ 
//Набор функций для расчета корреляции 
//+------------------------------------------------------------------+ 
double symboldif(int symbol,int shift)
  {
   double res=0;
   if(symbol==1) res=(BaseOpen[shift]+BaseHigh[shift]+BaseLow[shift]+BaseClose[shift])/4-AverageBase;
   if(symbol==2) res=(HedgeOpen[shift]+HedgeHigh[shift]+HedgeLow[shift]+HedgeClose[shift])/4-AverageHedge;
   return (res);
  }
//+------------------------------------------------------------------+
double Cor(string base,string hedge)
  {
   if(HistoryBuffers(base, hedge)==0) return (0);
   double u=0,l=0,s=0;
   for(int i=BarsCount-1; i>=0; i--)
     {
      u += symboldif(1, i)*symboldif(2, i);
      l += MathPow(symboldif(1, i),2);
      s += MathPow(symboldif(2, i),2);
     }
   if(l*s>0) return(u/MathSqrt(l*s));
   return (0);
  }
//+------------------------------------------------------------------+ 
//| Функция копирования истории и вычисления средней                                  
//+------------------------------------------------------------------+
int HistoryBuffers(string base,string hedge)
  {
   int BarsAll=BarsCount;
   AverageBase=0.0; AverageHedge=0.0;
   if(CopyOpen(base,TF,0,BarsCount,BaseOpen)>0)
      if(CopyHigh(base,TF,0,BarsCount,BaseHigh)>0)
         if(CopyLow(base,TF,0,BarsCount,BaseLow)>0)
            if(CopyClose(base,TF,0,BarsCount,BaseClose)>0)
               for(int i=BarsCount-1; i>=0; i--)
                 {
                  if(BaseOpen[i]<=0 || BaseHigh[i]<=0 || BaseLow[i]<=0 || BaseClose[i]<=0) {BarsAll=BarsAll-1; continue;}
                  AverageBase=AverageBase+(BaseOpen[i]+BaseHigh[i]+BaseLow[i]+BaseClose[i])/4;
                 }

   AverageBase=AverageBase/BarsAll;
   BarsAll=BarsCount;
   if(AverageBase==0) return (0);

   if(CopyOpen(hedge,TF,0,BarsCount,HedgeOpen)>0)
      if(CopyHigh(hedge,TF,0,BarsCount,HedgeHigh)>0)
         if(CopyLow(hedge,TF,0,BarsCount,HedgeLow)>0)
            if(CopyClose(hedge,TF,0,BarsCount,HedgeClose)>0)
               for(int j=BarsCount-1; j>=0; j--)
                 {
                  if(HedgeOpen[j]<=0 || HedgeHigh[j]<=0 || HedgeLow[j]<=0 || HedgeClose[j]<=0) {BarsAll=BarsAll-1; continue;}
                  AverageHedge=AverageHedge+(HedgeOpen[j]+HedgeHigh[j]+HedgeLow[j]+HedgeClose[j])/4;
                 }

   AverageHedge=AverageHedge/BarsAll;
   if(AverageHedge==0) return (0);
   return (1);
  }
А получить значение по строке типа
PHP:
double Correlation=Cor(Имя 1-го символа, Имя 2-го сиивола);
Это для 5-ки. Для 4-ки надо?:)
 
Последнее редактирование:

terinki777

Местный житель
Введи пожалуйста проверку открытых пар ордеров. У меня стоит открывать 20 40 60

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

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

vladradon

Программист
по любому ))
спасибо
Я не совсем понял - по-любому надо или спасибо?;):D
В любом случае в соседней теме "ВСЕ для парного трейдинга" я выложил 2 индикатора дельт и для 4-ки в открытом коде и в нем есть набор функций для расчета корреляции (аналог выложенного мной выше для 5-ки).
 
Последнее редактирование:

Afar230

Интересующийся
Я не могу понять, а почему выбранные пары не проходят периодическую проверку на корреляцию?
То есть, Вы предлагаете фильтр в виде проверки корреляции? Вы применяли у себя в советнике подобное?
Согласен, и раздвижка "съедается" со временем, и пары могут раскоррелироваться. Введение параметра "пересиживать убытки при схождении" когда помогает закрыться в плюс, а когда и просто увеличивает просадку (без стоп-лосса).
 

vladradon

Программист
То есть, Вы предлагаете фильтр в виде проверки корреляции?
Я это применял и знаю! На соседней ветке "ВСЕ для парного трейдинга" я выложил свои старые разработки Мультихедж. Я не могу выкладывать и рекламировать темы других порталов, но если вы в поисковике наберете что-то типа "Идеальная система парного трейдинга", то наверняка почерпнете что-то нужное (если терпения хватит).
 
Верх