Доработка советника

MQL4 Experts

Specification

Таймфрейм: любой


Используемые инструменты:

Bollinger bands : период 20

отклонения 2

применено к close 



ADX: период 14

применено к close

есть уровень 25



Сигнал на покупку : во время флэта (когда уровень ADX ниже уровня 25) ждем когда цена закроется у нижней полосы болинджера.с параметром o (параметр o определяет , точку открытия ордера,расстояние от средней полосы боллинджера до нижней определяется как 100 % ; 0 % это точка на нижней полосе боллинджера,10 % выше и т.д.) дальше ждем закрытия подтверждающей свечи в сторону увеличения цены. Открываем покупку . Стоплосс задается в пунктах в настройках .Закрытие ордера зависит от опций в советнике, параметры опций будут разъяснены далее. .Ордер закрывается с параметром n когда задевает среднюю полосу боллинджера(параметр n задается в процентах, определяет какая часть объема закрывается, в лотах эта величина округляется в меньшую сторону, 0% это значит что ничего не закрывается ) . Ставится стоплосс на цену открытия ордера, далее ордер закрывается полностью с параметром f ( расстояние от средней полосы боллинджера до верхней полосы принимается за 100 %, параметр f определяемый в процентах задает точку где закроется ордер, если цена до нее дойдет, 0 % это точка на верхней полосе боллинджера 10 % ниже и т.д. )/

Сигнал на продажу : во время флэта (когда уровень ADX ниже уровня 25) ждем когда цена закроется у верхней полосы болинджера. с параметром o (параметр o определяет , точку открытия ордера,расстояние от средней полосы боллинджера до верхней определяется как 100 % ; 0 % это точка на верхней полосе боллинджера,10 % ниже и т.д.), дальше ждем закрытия подтверждающей свечи в сторону уменьшения цены. Открываем продажу . Стоплосс задается в пунктах в настройках .Закрытие ордера зависит от опций в советнике, параметры опций будут разъяснены далее. .Ордер закрывается с параметром n когда задевает среднюю полосу боллинджера. (параметр n задается в процентах, определяет какая часть объема закрывается, в лотах эта величина округляется в меньшую сторону, 0% это значит что ничего не закрывается ).Ставится стоплосс на цену открытия ордера, далее ордер закрывается полностью с параметром f . (расстояние от средней полосы боллинджера до нижней полосы принимается за 100 %, параметр f определяемый в процентах задает точку где закроется ордер, если цена до нее дойдет, 0 % точка на нижней поосе боллинждера , 10% выше и т.д)/



Опции :

В опциях советника ставятся стоп лоссы или не ставятся совсем . Стоплоссы подразделяются на два вида : обыкновенный,который указывается в пунктах и стоп лосс , который зависит от потенциальной ожидаемой прибыли, т.е , когда открывается ордер, от цены ордера до противоположной полосы боллинджера(именно верхней или нижней)подсчитывается расстояние в пунктах. В опциях ставится коэффициент S ( от 0 до 1). который умножается на потенциальную прибыль. Эта величина и есть стоплосс, т.е если коэффициент 0,5, то стоплосс будет величина равная половине потенциальной прибыли . Коэффициент M определяет область закрытия у среденей полосы боллинджерера(расстояние от полосы где открыта сделка до средней полосы определяется  как 100 %:полоса где открыта сделка 0%, средняя полоса 100 %.

 

PS: в итоговом ТЗ нужно будет обсудить как отфильтровать слишком большие подтверждающие свечи,которые закрываются у средней полосы слишком долгое движение между крайней и среденей полосой боллинджера    

 

Исходный код:

property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- input parameters
input int      BBPeriod=20;
input double   BBdeviation=2.0;
input int      ADX=14;
input double   AdxLevel=25;
input double      SL=2000;
input double      TP=0;
input int      Obuy=5;
input int      Osell=5;
input double   Lot=0.1;
input bool     CloseMiddle=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
bool buyOpen=false;
bool sellOpen=false;
double _Obuy;
double _OSell;
int TryShots= 3;
int Slippage=50;                         // Slippage
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   _Obuy=Obuy/100;
   _OSell=Osell/100;

   if(!IsTradeAllowed())
     {
      string message="You must allow trading!";
      Print(message);
      Comment(message);
      return INIT_FAILED;
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime prevTime;
   datetime currentTime=iTime(Symbol(),0,0);
   if(prevTime==currentTime)
     {
      return;
     }
   else
     {
      prevTime=currentTime;
     }

   double adx=iADX(NULL,0,ADX,PRICE_CLOSE,0,2);

   if(adx<AdxLevel)
     {
      double bbMain1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,2);
      double close=iClose(NULL,0,2);
      if(!buyOpen)
        {
         double bbDown1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,2,2);
         BuyPosition(bbDown1,bbMain1,close);
        }
      else
        {
         double currentClose=iClose(NULL,0,0);
         double currentBB=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,0);
         if(CloseMiddle && currentClose>currentBB)
           {
            CloseOpenPos(OP_BUY);
            buyOpen=false;
           }
        }

      if(!sellOpen)
        {
         double bbUp1=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,1,2);
         SellPosition(bbUp1,bbMain1,close);
        }
      else
        {
         double currentClose=iClose(NULL,0,0);
         double currentBB=iBands(NULL,0,BBPeriod,BBdeviation,0,PRICE_CLOSE,0,0);
         if(CloseMiddle && currentClose<currentBB)
           {
            CloseOpenPos(OP_SELL);
            sellOpen=false;
           }
        }
     }

  }
//+------------------------------------------------------------------+

void BuyPosition(double bbDown,double bbMain,double close)
  {
   double dif=bbMain-bbDown;
   double proc=dif *_Obuy;
   double DownProc=bbDown+proc;

   if(close<DownProc)
     {
      double openCurrent=iOpen(NULL,0,1);
      double closeCurrent=iClose(NULL,0,1);
      if(closeCurrent>openCurrent)
        {

         for(int it=0; it<TryShots; it++)
           {
            ResetLastError();
            RefreshRates();
            double sl,tp;
            if(SL!=0)
               sl=NormalizeDouble(Bid-SL*Point,Digits);
            if(TP!=0)
               tp=NormalizeDouble(Bid+TP*Point,Digits);
            Print(Ask+" sl"+sl+" tp"+tp);
            if(!OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,sl,tp))
              {
               if(it>=TryShots) { Print("Failed OP_BUY !"); break; }
               int err=GetLastError();
               if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*it);
               else { Print("Failed OP_BUY !"); break; }
              }
            else
              {
               buyOpen=true;
               break;
              }

           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellPosition(double bbUp,double bbMain,double close)
  {
   double dif=bbUp-bbMain;
   double proc=dif*_OSell;
   double UpProc=bbUp-proc;

   if(close>UpProc)
     {
      double openCurrent=iOpen(NULL,0,1);
      double closeCurrent=iClose(NULL,0,1);
      if(closeCurrent<openCurrent)
        {
         for(int it=0; it<TryShots; it++)
           {
            ResetLastError();
            RefreshRates();
            double sl,tp;
            if(SL!=0)
               sl=NormalizeDouble(Ask+SL*Point,Digits);
            if(TP!=0)
               tp=NormalizeDouble(Ask-TP*Point,Digits);
            Print(Bid+" sl"+sl+" tp"+tp);
            if(!OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,sl,tp))
              {
               if(it>=TryShots) { Print("Failed OP_SELL !"); break; }
               int err=GetLastError();
               if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*it);
               else { Print("Failed OP_SELL !"); break; }
              }
            else
              {
               sellOpen=true;
               break;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Close open position                                              |
//+------------------------------------------------------------------+
void CloseOpenPos(int or_tp)
  {
   int i,err,k=OrdersTotal();
//---
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(or_tp==OrderType())
              {
               for(int it=0; it<TryShots; it++)
                 {
                  ResetLastError();
                  RefreshRates();
                  double _price=Ask; if(or_tp==OP_BUY) _price=Bid;
                  //---
                  if(!OrderClose(OrderTicket(),OrderLots(),_price,Slippage))
                    {
                     if(it>=TryShots) { Print("Failed to close the order ",OrderTicket(),"!"); break; }
                     err=GetLastError();
                     if(err==4 || err==6 || err==8 || err==128 || err==137 || err==141 || err==146) Sleep(1000*100);
                     else { Print("Failed to close the order ",OrderTicket(),"!"); break; }
                    }
                  else break;

                 }
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+

 

Responded

1
Developer 1
Rating
(563)
Projects
932
47%
Arbitration
302
59% / 25%
Overdue
124
13%
Busy
2
Developer 2
Rating
(107)
Projects
149
36%
Arbitration
29
3% / 55%
Overdue
35
23%
Free
3
Developer 3
Rating
(549)
Projects
1332
59%
Arbitration
28
82% / 0%
Overdue
10
1%
Free
4
Developer 4
Rating
(280)
Projects
650
28%
Arbitration
111
19% / 61%
Overdue
319
49%
Free
5
Developer 5
Rating
(46)
Projects
73
16%
Arbitration
13
8% / 92%
Overdue
37
51%
Free
6
Developer 6
Rating
Projects
1
0%
Arbitration
0
Overdue
1
100%
Free
7
Developer 7
Rating
(23)
Projects
90
24%
Arbitration
12
33% / 67%
Overdue
35
39%
Free
8
Developer 8
Rating
(80)
Projects
117
67%
Arbitration
16
25% / 13%
Overdue
12
10%
Free
9
Developer 9
Rating
(1)
Projects
2
50%
Arbitration
1
0% / 0%
Overdue
0
Free
10
Developer 10
Rating
(1)
Projects
4
25%
Arbitration
1
0% / 100%
Overdue
1
25%
Free
Similar orders
Куплю робота 250 - 500 USD
Приобрету вашего робота если он: 1.Статистически прибылен на 99% качества тиков (если есть журнал сделок (фхбук) за последние года - будет большим преимуществом) 2. ЭТО НЕ МАРТИНГЕЙЛ ИЛИ СЕТКА, роботов с такими моделями я не рассматриваю априори 3. Одиночные трейды с ТП и СЛ 4. Не ХТФ, без стратегий которые зарабатывают на хеджировании В остальном готов рассмотреть ваши предложения Присылайте статистку за последние 3
Здравствуйте! 1. Введение Настоящее техническое задание описывает требования к разработке торгового робота для автоматизированной торговли на рынке Forex. Основной задачей робота является выполнение сделок на основе заданных алгоритмов и стратегий, минимизация рисков и максимизация прибыли. 2. Цели и задачи Цель: Разработать торгового робота, который автоматически выполняет сделки на рынке Forex, основываясь на
Period = 20 Deviations = 3 Shift = 0 Apply for = Close ----------------------------- Start lot = 0.01 Lot multiplier = true Multiplier = 1.0 Increament = 0.01 ------------------------------ Only buy = true Only sell = true ----------------------------- Use Time filter = true Trading time = GMT +5 Start Hour = 10 End Hour = 19 ----------------------------- Takeprofit = 30 pips Stoploss = 50 pips Use stoploss last
Modify indicator Cycles 4 with rectangle Make indictor for mt4 and mt5 with comments in source code This indicator based on Cycles_4 Parametres MA1 - is default MA2 (yes or no) - yes - value add (if not 3 MA - 2nd in trend MA, also if only 1 MA without 2 and 3) Trend MA (true\false) - true - yes - value add Revers rect - true/false Fix rect by height - true\false, like how user add and this remember in the exit from
1. Ключ к индикатору. Для МТ4. Надо добавить в индикаторы такую функцию, чтоб можно было прикреплять к торговому счету или работал после ввода ключа, лимитный-без лимитный. Есть шаблон в МТ4, все параметры должны быть как в шаблоне, но надо убрать некоторые окна. В шаблоне 12 индикаторов, если получится объединить все индикаторы в одно, чтоб было один или два файла. 2. Ключ к индикатору фибоначчи + ЗигЗаг. Для МТ5
Приветствую нужно програмное обеспечение Копировальщик в двух файлах который работает через интернет сервер - с которого идет рассылка. Должен иметь в настройках: -ip адрес для подключения клиента -номер сервера -база внутри кода, разрешенных счетов которые могут подключатся к копированию -отправка информации по позиции в телеграмм канал ----------------------- Клиент должен иметь настройки - ip адрес для подключения
Нужно отвязать робота от счета демо и реал. Так что бы всё работало так же, что б всё функции сохранились. Напишите, пожалуйста цену и сроки. Не знаю что ещё нужно писать, спрашивайте)
Нужно добавить защиту в советник для МТ4. 1. проверка счета на котором он торгует в каком либо форекс дилере. Мне будут присылать номер счета я буду его вписывать в код чтоб другой не мог им пользоваться. 2. Защита по работе по времени. Нужно иметь возможность прописать дату в время в коде начала и окончания если за пределы ее вышел он будет писать что больше не торгует. 3. Защита от копирования данного советника
Нужен робот на MQL4, требования ниже. При отклике пожалуйста указывайте цену и срок. RSI RSI - Использовать close, high, low, max (open, close), min(open, close) в расчете с использованием сглаженной линии RSI Переменные: - Overbought Level - 60 по умолчанию, но нужно, чтобы он был регулируемым - Oversold Level - 40 по умолчанию, но нужно, чтобы он был переменной - RSI Smooth Length - количество свечей, по которым
Нужно доработать утилиту добавить новые функции, изменить интерфейс. Нужен человек имеющий опыт по связи терминала с Телеграм, по средствам Телеграм АПИ, нужно добавить 2 новые функции в утилиту. Подробнее в ТЗ, изменения нужно внести для мт4/5 версии

Project information

Budget
10- USD