Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ



Написать робота для CCI

Андрей, добрый день!
Прошу реализовать идею в виде робота. Ручками показала хороший результат.
Подойдет любой индюк, дающий хорошие входы в тренд, я тестил на CCI, на нем и предлагаю сделать.
Объясняю для 5-и знака:

Входит только отложками (BUY_STOP/SELL_STOP)!, ставит только если цена выгоднее чем у открытых сделок (аналогичного направления) на X пунктов (шаг докупки в пунктах).
Например, GBPUSD-H1 (X = 200), имеем 2 открытые покупки 1,23200 и 1,22900. Получаем сигнал на очередную покупку по цене 1,22300. Выбираем самую низкую цену из открытых позиций и сравниваем с ценой сигнала: 1,22900 — 1,22300 = 600 (> 200, значит ставим отложку на покупку BUY_STOP).

Максимальное кол-во одновременно открытых сделок — 10 (возможность изменения).
Сигнал на установку отложки — пересечение 0 линии вверх — покупка, вниз — продажа.
Бар на котором пересекли 0 линию — сигнальный, отложки ставим от его High/Low сразу после его закрытия: на покупку: High[1] + Spread + 10 pips, на продажу: Low[1] — 10 pips.

При поступлении сигнала проверяем, можем ли по нему закрыть в плюс имеющиеся противоположные сделки. Если ДА — закрываем их ТОЛЬКО после входа по сигналу в новую сделку (т.е. сначала сработка отложки на вход, потом — закрытие противоположной сделки в плюс). Если использовать для закрытия тейкпрофит, то не забыть его убрать в случае не сработки отложки на вход.

Отложки ставим с TP и SL (задаем в настройках).
Не сработавшие отложки через N баров — удалить, т.к. теряют актуальность, особенно для H1 и более.

  • +3
  • Просмотров: 1857
  • 25 января 2017, 20:02
  • vit-fx
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Создание советника
Следующая запись в группе  
пентагон ганна, пятиугольник!!!
25 января 2017
26 января 2017

Комментарии (6)

+
0
Завтра гляну.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 25 января 2017, 21:16
+
+1
Советник сложный, пока в таком упрощенном виде:




//+------------------------------------------------------------------+
//|                                                     CCIEnter.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int Profit        = 30;       // язь в валюте
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int MaxTrades     = 20;       // максимальное число позиций
extern int Slip          = 30;       // реквот
extern int CCIPeriod     = 14;       // период индикатора
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenOrd()
  {
   double cci1 = iCCI(NULL,0,CCIPeriod,0,Shift);
   double cci2 = iCCI(NULL,0,CCIPeriod,0,Shift+1);

   if(cci1>0 && cci2<0)
     {
      PutOrder(4,High[1]);
     }

   if(cci1<0 && cci2>0)
     {
      PutOrder(5,Low[1]);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LowestBuyPrice()
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            pr=OrderOpenPrice();
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      if(CountTrades()<=MaxTrades) OpenOrd();
      t=Time[0];
     }

   if(AllProfit(0)>Profit && Profit>0) CloseAll(0);
   if(AllProfit(1)>Profit && Profit>0) CloseAll(1);

   Comment("\n Trades: ",CountTrades(),
           "\n Buy Profit: ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n All Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2017, 23:45
+
0
Андрей, получается он сейчас работает по другому алгоритму — классический мартин, усредняет все открытые под один суммарный профит, причем открывает все сигналы подряд, не определяя лучшая это цена или нет.

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

Из ручного теста (выборочно несколько отрезков по месяцу каждый) на GBPUSD H1, USDJPY H1, XAUGOLD H1 получаем за месяц до 30 сделок максимум, ~6% из них — закрытие по SL, остальные — плюсовые.

Сможете доделать до конца? Готов подсказать, если что не ясно по логике.
avatar

  4  vit-fx Автор Сообщений: 76

  • 28 января 2017, 01:02
+
0
Сможете доделать до конца?

Доделать можно все, но вы должны понимать что чем сложнее заказ на бесплатном, тем меньше у вас шансов получить его в готовом виде.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 28 января 2017, 06:04
+
0
Цена вопроса?
avatar

  4  vit-fx Автор Сообщений: 76

  • 28 января 2017, 16:29
+
0
Платно не делаю.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 29 января 2017, 11:20

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари