Советники: N-_Candles_v6

 

N-_Candles_v6:

Советник ищет N одинаковых свечей подряд. На бычьих свечах идет покупка, на медвежьих - продажа. Учет типа торгового счета: неттинг или хеджинг. В коде использованы торговые классы CPositionInfo, CTrade, CSymbolInfo и CAccountInfo .

Новое в версии 6

Добавлены типы закрытия при встрече "паршивой овцы":

  • Закрытие всех позиций;
  • Закрытие позиций, которые противоположны "паршивой овце";
  • Закрытие позиций, которые имеют то же направление, что и "паршивая овца".


"Паршивая овца"

Допустим, советник ищет 5 одинаковых свечей. Как только он их обнаруживает, например, это будут пять бычьих свечей, будет открыта BUY позиция. Если после открытия позиции следующая свеча окажется не бычья - эта свеча и есть т.н. "паршивая овца".

Пример на периоде D1 с 2017.04.18 по 2018.02.10 в режиме генерации тиков "Все тики":

N-_Candles_v5 optimization

Автор: Vladimir Karputov

 

Хочу вас попросить написать 7-ую версию Candles. Принцип также основан на "паршивой овце". 

Образно. На примере будем использовать бычий тренд. Советник проверяет 5 одинаковых свечей подряд. Если все одинаковые - начинает отслеживание и ждет формирование следующей свечи. Если сформированная свеча бычья - то не предпринимает никаких действий и ждет следующую и так до бесконечности, пока не появится сформированная медвежья свеча. Если появляется одна или две медвежьи свечи (этот параметр лучше сделать изменяемым по количеству), то формируется ордер по направлению SELL. С этого момента советник опять начинает отслеживание, но только медвежьих свечей. Если все свечи одинаковые (медвежьи) - ждет и не предпринимает никаких действий. Как только появляется бычья свеча (этот параметр тоже лучше сделать изменяемым по количеству) - закрывает ордер.

Также и с медвежьим трендом.

PS и если возможно добавьте динамический лот

 
issah5:

Хочу вас попросить написать 7-ую версию Candles. Принцип также основан на "паршивой овце". 

Образно. На примере будем использовать бычий тренд. Советник проверяет 5 одинаковых свечей подряд. Если все одинаковые - начинает отслеживание и ждет формирование следующей свечи. Если сформированная свеча бычья - то не предпринимает никаких действий и ждет следующую и так до бесконечности, пока не появится сформированная медвежья свеча. Если появляется одна или две медвежьи свечи (этот параметр лучше сделать изменяемым по количеству), то формируется ордер по направлению SELL. С этого момента советник опять начинает отслеживание, но только медвежьих свечей. Если все свечи одинаковые (медвежьи) - ждет и не предпринимает никаких действий. Как только появляется бычья свеча (этот параметр тоже лучше сделать изменяемым по количеству) - закрывает ордер.

Также и с медвежьим трендом.

PS и если возможно добавьте динамический лот

Это немного не укладывается в основную стратеги "N-_Candles ..." - как только появляется количество одинаковых свеч равное параметру "N identical candles which go in a row", сразу открываем позицию. Вы же предлагаете не открывать и ждать.

 
Vladimir Karputov:

Это немного не укладывается в основную стратеги "N-_Candles ..." - как только появляется количество одинаковых свеч равное параметру "N identical candles which go in a row", сразу открываем позицию. Вы же предлагаете не открывать и ждать.

Да, ждать пока не появится паршивая овца и открывать (паршивая овца - будет сигналом к открытию)

 
issah5:

Да, ждать пока не появится паршивая овца и открывать (паршивая овца - будет сигналом к открытию)

Нет, к серии "N-_Candles ..." такой алгоритм не подходит. Возможно нужно делать новый советник основанный на правиле: смена типа свечей.

 

Делаем "модернизацию" свечи, получаем намного лучшие результаты при правке кода в виде:

//--- bull candle. Bear candle.
   int type_of_candles=0;     // "1" -> Bull candle. "-1" ->Bear candle
   for(int i=0;i<copied;i++)
     {
       //--- we define type of the most distant candle
      if(i==0)
        {
         if(rates[i].high-rates[i].low+rates[i].close<rates[i].high-rates[i].low+rates[i].open)
            type_of_candles=1;
         else if(rates[i].high-rates[i].low+rates[i].close>rates[i].high-rates[i].low+rates[i].open)
            type_of_candles=-1;
         else
           {
            result=false;
            break;
           }
         continue;
        }
      if(type_of_candles==1) // "1" -> Bull candle
        {
         if(rates[i].high-rates[i].low+rates[i].close>rates[i].high-rates[i].low+rates[i].open)
           {
            result=false;
            break;
           }
        }
      else // "-1" -> Bear candle
        {
         if(rates[i].high-rates[i].low+rates[i].close<rates[i].high-rates[i].low+rates[i].open)
           {
            result=false;
            break;
           }
        }
     }

Кроме того результаты тестирования OHLC и Тики на основе реальных теперь совпадают

 

Интересный советник. Но не хватает настройки закрытия по размеру прибыли, а не по пипсам.

Владимир, можете добавить?

 
narkad1212:

Интересный советник. Но не хватает настройки закрытия по размеру прибыли, а не по пипсам.

Владимир, можете добавить?

А разве в этой версии есть настройка "закрытие по пипсам"?

 
Vladimir Karputov:

А разве в этой версии есть настройка "закрытие по пипсам"?

Прошу прощения. Я о предыдущих версиях думал.

А в  6 версию можете добавить ещё закрытие по прибыли ?

 
narkad1212:

Прошу прощения. Я о предыдущих версиях думал.

А в  6 версию можете добавить ещё закрытие по прибыли ?

В деньгах прибыль?

 
Vladimir Karputov:

В деньгах прибыль?

Да в валюте депозита. Чтобы при достижении прибыли закрывались все ордера и цикл начинался по новой.


То-есть либо закрытие по паршивой овце, либо если достигнут заданный денежный профит, что наступит раньше.

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