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

MQL4 专家

指定

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


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

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;

                 }
              }
           }
        }
     }
  }

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

 

反馈

1
开发者 1
等级
(564)
项目
933
47%
仲裁
302
59% / 25%
逾期
125
13%
已载入
2
开发者 2
等级
(107)
项目
149
36%
仲裁
29
3% / 55%
逾期
35
23%
空闲
3
开发者 3
等级
(558)
项目
1344
59%
仲裁
28
82% / 0%
逾期
10
1%
空闲
4
开发者 4
等级
(280)
项目
650
28%
仲裁
111
19% / 61%
逾期
319
49%
空闲
5
开发者 5
等级
(46)
项目
73
16%
仲裁
13
8% / 92%
逾期
37
51%
空闲
6
开发者 6
等级
项目
1
0%
仲裁
0
逾期
1
100%
空闲
7
开发者 7
等级
(23)
项目
90
24%
仲裁
12
33% / 67%
逾期
35
39%
空闲
8
开发者 8
等级
(80)
项目
117
67%
仲裁
16
25% / 13%
逾期
12
10%
空闲
9
开发者 9
等级
(1)
项目
2
50%
仲裁
1
0% / 0%
逾期
0
空闲
10
开发者 10
等级
(1)
项目
4
25%
仲裁
1
0% / 100%
逾期
1
25%
空闲
相似订单
Нужен скрипт на 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

项目信息

预算
10- USD