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

MQL4 Esperti

Specifiche

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


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

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;

                 }
              }
           }
        }
     }
  }

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

 

Con risposta

1
Sviluppatore 1
Valutazioni
(564)
Progetti
933
47%
Arbitraggio
302
59% / 25%
In ritardo
125
13%
Caricato
2
Sviluppatore 2
Valutazioni
(107)
Progetti
149
36%
Arbitraggio
29
3% / 55%
In ritardo
35
23%
Gratuito
3
Sviluppatore 3
Valutazioni
(558)
Progetti
1344
59%
Arbitraggio
28
82% / 0%
In ritardo
10
1%
Gratuito
4
Sviluppatore 4
Valutazioni
(280)
Progetti
650
28%
Arbitraggio
111
19% / 61%
In ritardo
319
49%
Gratuito
5
Sviluppatore 5
Valutazioni
(46)
Progetti
73
16%
Arbitraggio
13
8% / 92%
In ritardo
37
51%
Gratuito
6
Sviluppatore 6
Valutazioni
Progetti
1
0%
Arbitraggio
0
In ritardo
1
100%
Gratuito
7
Sviluppatore 7
Valutazioni
(23)
Progetti
90
24%
Arbitraggio
12
33% / 67%
In ritardo
35
39%
Gratuito
8
Sviluppatore 8
Valutazioni
(80)
Progetti
117
67%
Arbitraggio
16
25% / 13%
In ritardo
12
10%
Gratuito
9
Sviluppatore 9
Valutazioni
(1)
Progetti
2
50%
Arbitraggio
1
0% / 0%
In ritardo
0
Gratuito
10
Sviluppatore 10
Valutazioni
(1)
Progetti
4
25%
Arbitraggio
1
0% / 100%
In ritardo
1
25%
Gratuito
Ordini simili
Нужен скрипт на C# для Multicharts .net скрипт, который работает с тремя таймфреймами одного инструмента (10, 15, 60 минут), то есть тремя наборами данных, открывает сделки в лонг, если индикатор RSI на одном из наборов данных вышел из зоны перепроданности, то есть пересек уровень 30, закрывает сделку в двух случаях, первый: если достиг уровня перекупленности по RSI на том же наборе данных, второй если достиг уровня
Есть индикатор нужно сделать скриншоты плюсовых сделок. Как работает индикатор могу показать. Скриншоты сначала делаются на одной версии( для разработчиков), потом сделать в тестере скрины в другой версии индикатора. Также на скриншоте должна быть одна сделка( скриншотов длжно быть более 20)
**Техническое задание (ТЗ) для торгового робота на платформе Pocket Option** Здравствуйте! Мне нужен торговый робот для работы на платформе **Pocket Option** (бинарные опционы). Основная задача робота – открывать сделки по стратегии **мартингейл**. В случае неудачной сделки робот должен увеличивать сумму следующей ставки в **2,5 раза**, пока не будет достигнута прибыль. Однако, мне нужен робот с более «умным»
**Техническое задание (ТЗ) для создания торгового робота на MetaTrader 4/5** **Добрый день, дорогие фрилансеры!** Я ищу опытного разработчика для создания торгового робота на платформу MetaTrader 4 или MetaTrader 5. У меня есть несколько ключевых требований и пожеланий, которые необходимо учесть при разработке. Я не обладаю глубокими знаниями в программировании и функционировании торговых роботов, поэтому надеюсь
Создать скрипт или робот , который выставляет отложные ордера , через определённое количество пунктов. закрытие по тэйк профит? Сколько стоит? После закрытия на место этого ордера должен выставляться точно такой же . После первого открытия должны быть выставлены отложные ордера в обе стороны , через определенное количество пунктов. ( В настройках должна быть возможность выставлять интервал через который будут
Здравствуйте! Нужно доработать существующий советник, а именно добавить в него 4 новых функции. Желательно найти человека, который работал с такими моментами, как: слом рыночной структуры, имбаланс. Одна из этих функций очень простая и легкая в реализации. ТЗ для оценки отправлю Вам в чате
-перевод графика mt 4 в он-лайн график ренко с регулировкой степа (размером кирпичика ренко), Затем поиск линии отбоя по двум точкам ,где вторая точка линии это 7 или 9 точка графика ренко, а первая точка линии совпадает с первой точкой графика ренко
добавить сюда функцию чтобы обойти лимит лотов, т к размер лота увеличивается в процентном соотношении от баланса добавить функцию что если превышен лимит лота то открывается еще ордера с лотами чтобы соответствовать текущему размеру требуемых для открытия лотов допустим был лот 100, следующий нужен будет открыть 120, робот открывает 1 ордер на 100 и в туже секунду еше 1 ордер на 20 лотов, допустим нужен лот 720 то
Добрый день! Нужна программа копировщик сделок с одного счета deriv на другой при помощи API токена. Параметры: Можно выбрать по какому риск менеджменты копируются сделки (masaniello или Лабушер, мартингейл, антимартингейл) Начальный лот тейк профит 1 - устанавливается именно на сделки скопированные программой, при достижении тейк профита 1 или прекращает работать (Stop) или пере запасается работа сначала (ресет)
Вітаю! Код експерта відкритий. Потрібно додати 4 нові функції. ТЗ відправлю пізніше, після подачі Вашої заявки. Ось одна із функцій для прикладу 1. Imbalance . On / Off . Має бути сформований імбаланс між хай і лоу реверс бару на меншому таймфреймі. Реверс бар при цьому береться з поточного таймфрейму. Налаштування: 1) TF _ Imbalance , можливість задати таймфрейм самостійно. 2) MinSizeImbalance

Informazioni sul progetto

Budget
10- USD