Индикаторы: Rabbit - страница 11

 

Скрипт Start v26.10.10 для ловли начала тренда, минуя утренний флет. Используется всего два прямых ордера - Buy Stop и Sell Stop, которые нужно ставить через один уровень от утренней цены. Take Profit и Stop Loss для обоих ордеров равны Step - шагу между уровнями индикатора Rabbit:

// Start v26.10.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Step=0;
extern string Expiration="2010.10.27 23:59";
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+Spread*Point,0,Up-Step*Point,Up+Step*Point,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down,0,Down+(Step+Spread)*Point,Down-(Step-Spread)*Point,0,0,R);
return(0);}
 

Предлагаю новый скрипт Angel Wings v20.12.10. Скрипт в основном трендовый, 75% прибыли зарабатывается на трендовых движениях цены, на долю флета приходится 25% от общей прибыли, которую приносят Angel Wings. За последние 100 дней на EURUSD Angel Wings заработал 2380 пунктов, максимальная просадка около 200 пунктов.

На ближайших к цене уровнях Rabbit ставятся перевернутые ордера Sell Limit и Buy Limit с Take Profit и Stop Loss размером со Step. На всех последующих уровнях ставятся прямые ордера Buy Stop и Sell Stop с такими же Stop Loss и Take Profit. Затем на всех без исключения уровнях ставятся вспомогательные прямые ордера Buy Stop и Sell Stop с Take Profit = 0.5 * Step и Stop Loss = Step.

// Angel Wings v20.12.10
#property copyright "Jon Katana"
#property show_inputs
extern double Up=0;
extern double Down=0;
extern int Levels=0;
extern int Step=0;
extern string Expiration="2011.01.01 23:59";
extern double Vol=0;
extern int Spread=0;
int start()
{datetime R=StrToTime(Expiration);
double P=Point;
OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(Step+Spread)*P,Up-(Step-Spread)*P,0,0,R);
OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*P,0,Down-Step*P,Down+Step*P,0,0,R);
for(int i=0;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*P,0,Up+(i-1)*Step*P,Up+(i+0.5)*Step*P,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*P,0,Down-((i-1)*Step-Spread)*P,Down-((i+0.5)*Step-Spread)*P,0,0,R);}
for(i=1;i<Levels;i++)
{OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*P,0,Up+(i-1)*Step*P,Up+(i+1)*Step*P,0,0,R);
OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*P,0,Down-((i-1)*Step-Spread)*P,Down-((i+1)*Step-Spread)*P,0,0,R);}
return(0);}
 
JonKatana:

Предлагаю новый скрипт Angel Wings v20.12.10. Скрипт в основном трендовый, 75% прибыли зарабатывается на трендовых движениях цены, на долю флета приходится 25% от общей прибыли, которую приносят Angel Wings. За последние 100 дней на EURUSD Angel Wings заработал 2380 пунктов, максимальная просадка около 200 пунктов.

На ближайших к цене уровнях Rabbit ставятся перевернутые ордера Sell Limit и Buy Limit с Take Profit и Stop Loss размером со Step. На всех последующих уровнях ставятся прямые ордера Buy Stop и Sell Stop с такими же Stop Loss и Take Profit. Затем на всех без исключения уровнях ставятся вспомогательные прямые ордера Buy Stop и Sell Stop с Take Profit = 0.5 * Step и Stop Loss = Step.


Здравствуйте, JonKatana. 

Почему вы отказались от открытых ордеров (без сл и тп) в данной стратегии ?

200 пунктов просадки - имеется в виду совокупность стоплоссов в самый "неудачный" день ?

Спасибо и профитов вам! 

 

Безлимитные ордера хороши лишь одним - для них не имеют значения многократные проходы цены по одному и тому же месту. Но они забирают много залоговых средств и являлись лишь страхующими, а основная прибыль фиксировалась лимитными ордерами.

Новая схема появилась не сразу - сначала она была в виде половинчатых прямых ордеров на всех уровнях, затем добавились целые прямые ордера на всех уровнях, затем, прогнав те же 100 дней БЕЗ ордеров на первых уровнях и получив такое же суммарное количество пунктов, что и с ними, начал искать, как задействовать флет. Перебрав несколько вариантов, нашел схему, которая приносит прибыль на первых ордерах, добавил ее в общую. Результат перед вами.

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

 
JonKatana:

Новая схема появилась не сразу - сначала она была в виде половинчатых прямых ордеров на всех уровнях, затем добавились целые прямые ордера на всех уровнях, затем, прогнав те же 100 дней БЕЗ ордеров на первых уровнях и получив такое же суммарное количество пунктов, что и с ними, начал искать, как задействовать флет. Перебрав несколько вариантов, нашел схему, которая приносит прибыль на первых ордерах, добавил ее в общую. Результат перед вами.


Здравствуйте.

Могли бы вы выложить советник которым тестируете скрипты ?

Я накидал советник более-менее соответствующий вашей стратегии, но таких результатов (2380 пунктов за 100 дней) не удавалось получить. Советник я выкладываю сюда, если не затруднит, загляните, возможно я допустил какие-то неточности. И если есть возможность, прогоните его за тот же период, где у вас получилось 2380 пунктов - возможно у меня кривая база котировок (25% точность, все тики).

//-------------------------------------------
//Данный советник предназначен для прогона по истории и никак не для реальной торговли.
//-------------------------------------------
//Блок переменных для скрипта открытия ордеров
double Up=0;
double Down=0;
int Levels=10;
int Step=0;
extern double Vol=0.1;
int Spread=2;
//Блок переменных советника
datetime lastDay;
int objects, iStopLevel;
double dStopLevel, dSpread;
string iStep, sym;
int init() 
{
   sym = Symbol();
   iStopLevel =MarketInfo(sym,MODE_STOPLEVEL);
   dStopLevel = iStopLevel*Point;
   Spread = MarketInfo(sym, MODE_SPREAD);
   dSpread = Spread*Point;
   
   return(0);
}
  
int start()
{
   //Выставляем ордера в 6:30 каждый день
   if(lastDay!=TimeDayOfYear(Time[0]) && Hour()==6 && Minute()==30)
   {
      lastDay=TimeDayOfYear(Time[0]);
      
      //upLevel, downLevel используются для нахождения ближайших уровней от текущей цены
      double upLevel = 9999.0, downLevel = 0.0, diff, price;
      
      //Вызываем индикатор Rabbit. Обратите внимание на название. Переименуйте соответственно.
      iCustom(sym,0, "Rabbit",0, 22, 0, 16, White, DarkGreen, 0, 0);
      
      objects = ObjectsTotal(OBJ_HLINE);
      //Находим все горизонтальные линии на графике (уровни Rabbit)
      for(int i=0; i<objects; i++)
      {
         price = ObjectGet(ObjectName(i), OBJPROP_PRICE1);
         diff = Bid-price;
         
         //Ищем ближайшие к цене уровни. Если уровень находится в пределах спрэда+стопЛевела - не принимаем его во внимание
         if(MathAbs(diff) < dStopLevel+dSpread)
            continue;
             
         if(diff < 0)
         {
            if(upLevel > price) upLevel = price;
         }
         else if(diff > 0)
         {
            if(downLevel < price) downLevel = price;
         }
      }
      
      iStep = StringSubstr(ObjectDescription("S"), 7);   //Находим шаг уровней из обьекта "S" индикатора Rabbit
      Step = StrToDouble(iStep)*10000;                   //Приводим шаг к целому числу
      
      //Если шаг меньше двойного стоплевела+спред, приравниваем его к этому числу. (Требуется для установки сл или тп равному половине шага)
      if(Step < (iStopLevel+Spread)*2) Step=(iStopLevel+Spread)*2;
      
      //Иногда из-за какого-то трудноотслеживаемого бага, даунлевел равен нулю :( . Если так, установим его за уровнем стопЛевела+спрэд.
      if(downLevel == 0.0) downLevel = Bid-dStopLevel-dSpread;
      
      //Инициализация скриптовых переменных
      Up = NormalizeDouble(upLevel,4);
      Down = NormalizeDouble(downLevel,4);
      //Количество уровней варьируется в зависимости от ATR
      Levels = iATR(Symbol(), PERIOD_D1, 30, 0)/StrToDouble(iStep);
      if(Levels < 2) Levels = 2; //Как минимум 2 уровня
         
      //Запуск скрипта для тестирования.
      Script();
   }
  return(0);
}
// Angel Wings v20.12.10 by JonKatana
void Script()
{
      string expDate = StringConcatenate(Year(),".",Month(),".",Day()," ",22,":",10); 
      datetime R=StrToTime(expDate);
      double P=Point;
      OrderSend(Symbol(),OP_SELLLIMIT,Vol,Up,0,Up+(Step+Spread)*P,Up-(Step-Spread)*P,0,0,R);
      OrderSend(Symbol(),OP_BUYLIMIT,Vol,Down+Spread*P,0,Down-Step*P,Down+Step*P,0,0,R);
      for(int i=0;i<Levels;i++)
      {
         OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*P,0,Up+(i-1)*Step*P,Up+(i+0.5)*Step*P,0,0,R);
         OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*P,0,Down-((i-1)*Step-Spread)*P,Down-((i+0.5)*Step-Spread)*P,0,0,R);
      }
      for(i=1;i<Levels;i++)
      {
         OrderSend(Symbol(),OP_BUYSTOP,Vol,Up+(i*Step+Spread)*P,0,Up+(i-1)*Step*P,Up+(i+1)*Step*P,0,0,R);
         OrderSend(Symbol(),OP_SELLSTOP,Vol,Down-i*Step*P,0,Down-((i-1)*Step-Spread)*P,Down-((i+1)*Step-Spread)*P,0,0,R);
      }
}
 
grandmaster:

Могли бы вы выложить советник которым тестируете скрипты ?

Я накидал советник более-менее соответствующий вашей стратегии, но таких результатов (2380 пунктов за 100 дней) не удавалось получить. Советник я выкладываю сюда, если не затруднит, загляните, возможно я допустил какие-то неточности. И если есть возможность, прогоните его за тот же период, где у вас получилось 2380 пунктов - возможно у меня кривая база котировок (25% точность, все тики).

Прогоняю руками - советника нет.

Поправки в советнике из того, что прокомментировано: время выставления ордеров - 7:00 МСК; если цена находится в пределах 1/3 коридора от уровня, то за начальный берется следующий, независимо от шага между уровнями; величину Step нельзя ни к чему приравнивать - иначе уровни не работают, если нельзя выставить ордера из-за ограничений ДЦ, то этот день пропускается; количество уровней лучше увеличить - оно должно всегда перекрывать любой ход цены за день, иначе сильные тренды пролетят мимо - а они основные источники дохода, поэтому лучше брать 2 или 3 ATR за 30 дней.

P. S.: Добавил последнюю неделю - теперь 2450 пунктов прибыли. До маржин-кола у меня 666 пунктов непрерывных убытков - при такой схеме наращивания лота за эти 100 с небольшим дней с, например, начальных 40 000 рублей получилось 943 900 рублей - за миллион депозит переваливал, но чуть откатил на последних двух днях.

 
Еще одна неделя позади - чистая прибыль в пунктах увеличилась с 2450 до 2670. С начальных 40 000 рублей сейчас на депозите 1 296 000 рублей. За 110 дней.
 
JonKatana:
Еще одна неделя позади - чистая прибыль в пунктах увеличилась с 2450 до 2670. С начальных 40 000 рублей сейчас на депозите 1 296 000 рублей. За 110 дней.

Здравствуйте, JonKatanа.

 Я почти закончил писать удобный советник (который я здесь позже выложу), позволяющий тестировать разные комбинации ордеров на первых(ближайших) и последующих уровнях. Дабы окончательно убедиться, что я правильно понимаю вашу стратегию, пожалуйста просмотрите графики прикрепленные ниже и мои комментарии к ним и скажите что где не так (ибо по моим подсчетам за последнюю неделю было +175 пунктов, а не 220 как у вас).

 

 

 

 

 

 

 

 

29 декабря последний открытый ордер закрывать не надо - он должен закрыться сам на следующий день, заработав 42 пункта.

30 декабря последний ордер закрылся в плюсе, а это еще +37 пунктов (без учета спредов).

 
JonKatana:

30 декабря последний ордер закрылся в плюсе, а это еще +37 пунктов (без учета спредов).


Когда он успел ??? у меня на графике 30/12/2010 19:10 - последний бар, и еще не обновлялся. Неужели брокер вырубился раньше закрытия мировой биржи ?