dd$

  • *****
  • 6095
  • 234
    • Просмотр профиля
Cистема OzFx
« Topic Start: 13 Апреля 2008, 22:16:24 »
Описание системы  OzFx (подробное обсуждение можно найти тут)

Настройки:
1) Открыть 4-часовой свечной график
2) Осциллятор Била Вильямса Awesome (АО) с настройками по умолчанию
3) Осциллятор Билла Вильямса Accelerator (АС) с настройками по умолчанию.
4) Стохастик поверх АС с настройками 5,3,4.
Стратегия:
Агрессивный вход.

1) Сильный сигнал. Когда стохастики %К и %D пересекают вверх или вниз 80 или 20 и оба осциллятора АС и АО становятся красным/зеленым в одно и тоже время.
2) Когда стохастик пересекает вверх или вниз 80 или 20. Ждем пока АС станет красным или зеленым. Открываемся на открытии того же самого бара.

Консервативный вход.

Когда стохастик пересекает вверх или вниз 80 или 20, ждем пока стохастик пересечет нулевую линию АС.

Не открываем позицию.

Когда стохастик пересекает вверх или вниз 80 или 20, но АС не меняет цвет на следующей свече.

Управление капиталом.

1) Торгуем 3 лотами со стоп-лоссом 50 пипсов
2) Фиксируем прибыль по 1-му лоту на 50 пипсах, сдвигаем стоп-лосс до уровня безубыточности.
3) Фиксируем прибыль по 2-му лоту на 100 пипсах.
4) Третью часть позиции закрываем, когда получен противоположный сигнал на вход.

Выход.

Не выходим, если стохастик не пересек уровни 80 или 20. Ждем пересечения нулевой линии АС и после этого выходим. Это очень важно, если вы хотите поймать большие движения от 100 до 800 пипсов.

Код советника

Код
extern double TakeProfit = 50; 
extern double Lots = 0.1;
extern double Stoploss = 30;
extern double TrailingStop = 30;
int b = 0;
int start()
  {
  double a;
int flag;
int total, ticket, cnt;
if (!ExistPositions())
{         
   if (isPosibleBuy())
   {
      flag = isStohasticBuy();
      if (keepItClosed(flag))
      {
         if (flag > 0)
         {
            if (isBuyFinal())
            {
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point ,"OzFx",16384,0,Green);
               return(0);
            }
         }
      }
   }
   if (isPosibleSell())
   {
   flag = isStohasticSell();
      if (keepItClosed(flag))
      {
         if (flag > 0)
         {
            if (isSellFinal())
            {
               ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point,"OzFx",16384,0,Red);
               return(0);
            }
         }
      }
   }
}
else
{
   if (isBuyPos())
   {
      if (isTimeToCloseBuy())
         {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
            return(0);
         }
   }
   else
   {
      if (isTimeToCloseSell())
         {
            OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
            return(0);
         }
   }
}
   return;
  }
  bool ExistPositions()   {
   for(int i=0;i<OrdersTotal(); i++)  {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderComment()=="OzFx") return(True);
         else return(false); }   }
  bool isPosibleBuy()
  {
      double st_main, st_signal;
      st_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
      st_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
      if ((st_main>20) && (st_signal>20))
         return (true);
      else
         return (false);
  }
  bool isPosibleSell()
  {
      double st_main, st_signal;
      st_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
      st_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
      if (st_main<80 && st_signal<80)
         return (true);
      else
         return (false);
  }
  int isStohasticBuy()
  {
      double st_main, st_signal;
      for(int i = 1; i < 6; i++)
      {
         st_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,i);
         st_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,i);
         if (st_main<=20 && st_signal<=20)
            return (i);
      }
      return (0);
  }
  int isStohasticSell()
  {
      double st_main, st_signal;
      for(int i = 1; i < 6; i++)
      {
         st_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,i);
         st_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,i);
         if (st_main>=80 && st_signal>=80)
         {
            return (i);
         }
      }
      return (0);
  }
  bool isACGreen()
  {
      double AC_now,AC_past;
      AC_now = iAC(NULL,0,0);
      AC_past = iAC(NULL,0,1);
      if (AC_now>AC_past)
      return (true);
      else
      return (false);
  }
  bool isAOGreen()
  {
      double AO_now,AO_past;
      AO_now = iAO(NULL,0,0);
      AO_past = iAO(NULL,0,1);
      if (AO_now>AO_past)
      return (true);
      else
      return (false);
  }
  bool isBuyFinal()
  {
      if ((isAOGreen()) && (isACGreen()))
      {
         return (true);
      }
      else
      {
         return (false);
      }
  }
    bool isSellFinal()
  {
      if ((!isAOGreen()) && (!isACGreen()) )
      {
         return (true);
      }
      else
      {
         return (false);
      }
  }
   bool keepItClosed(int a)
  {
      double ACprew = iAC(NULL,0,a);
      double ACnow = iAC(NULL,0,a-1);
      if (ACprew<ACnow)
         return (true);
      else
         return (false);
  }
   bool isBuyPos()
  {
      OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY)
      return (true);
      else
      return (false);
  }
   bool isPosibleCloseBuy()
  {
      double st_prew_main,st_now_main;
      double st_prew_signal,st_now_signal;
      st_now_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
      st_prew_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,1);
      st_now_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
      st_prew_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,1);
      if ((st_now_main<80 && st_prew_main>80) || (st_now_signal<80 && st_prew_signal>80))
      {
         b = 1;
         return (true);
      }
      return (false);
  }
   bool isTimeToCloseBuy()
  {
     isPosibleCloseBuy();
     if (b == 1)
     {
         double st_prew_main,st_now_main;
         double st_prew_signal,st_now_signal;
         st_now_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
         st_prew_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,1);
         st_now_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
         st_prew_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,1);
         if ((st_now_main<50 && st_prew_main>50) || (st_now_signal<50 && st_prew_signal>50))
         {
            b = 0;
            return (true);
         }
     }
     return (false);
  }
   bool isPosibleCloseSell()
  {
      double st_prew_main,st_now_main;
      double st_prew_signal,st_now_signal;
      st_now_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
      st_prew_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,1);
      st_now_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
      st_prew_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,1);
      if ((st_now_main>20 && st_prew_main<20) || (st_now_signal>20 && st_prew_signal<20))
      {
         b = 2;
         return (true);
      }
      return (false);
  }
   bool isTimeToCloseSell()
  {
     isPosibleCloseSell();
     if (b == 2)
     {
         double st_prew_main,st_now_main;
         double st_prew_signal,st_now_signal;
         st_now_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,0);
         st_prew_main = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_MAIN,1);
         st_now_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,0);
         st_prew_signal = iStochastic(NULL,0,5,3,4,MODE_SMA,0,MODE_SIGNAL,1);
         if ((st_now_main>50 && st_prew_main<50) || (st_now_signal>50 && st_prew_signal<50))
         {
            b = 0;
            return (true);
         }
     }
     return (false);
  }

В эттаче результаты тестирования на истории с стоплосом 50, а тейкпрофитом 100. В периоде с 35 марта 2006-го по наши дни:

 

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.