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

Рейтинг 2087



РЕКОМЕНДУЮ



Требуется создать советник на основе индикатора BvsB

Вариант 1
1. Советник включается по таймеру
2. Ждет пересечение индикатора BvsB
3. Ждет показания BB Macd (указываются в настройках)
4. Смотрит на показатели BvsB (задаются)
5. Если показания BB Macd подтверждаются показаниями BvsB открывает сделку

Вариант 2
Советник работает только на BB Macd или на BvsB

Вариант 3
Советник после выполнения п.3 ЖДЕТ пока BvsB достигнет заданных показателей

Индикаторы:
BB_MACD_v1.01.mq4 (4 Kb)

BullsvsBears.mq4 (0 Kb)

  • +1
  • Просмотров: 3792
  • 23 мая 2015, 18:34
  • NashaRussia
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Завтра начну.
avatar

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

  • 23 мая 2015, 18:44
+
0
Ок, спасибо.
avatar

  3  NashaRussia Автор Сообщений: 38

  • 23 мая 2015, 18:50
+
0
Начал делать. Нужно уточнить условия. Какое значение, какой индикатор, синяя линия или красная и др.?
avatar

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

  • 24 мая 2015, 12:04
+
0
Сделал основу для советника. Он уже торгует, осталось уточнить условия:



//+------------------------------------------------------------------+
//|                                                         BvsB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

#define MAGIC   20150515
//--- Inputs
input double StopLoss      = 500;
input double TakeProfit    = 1500;
input double TrailingStop  = 100;
input double Lots          = 0.1;
input double Slip          = 30;
//---- BB_MACD indicator parameters
extern int FastLen = 12;
extern int SlowLen = 26;
extern int Length = 10;
extern int barsCount = 400;
extern double StDv = 2.5;
//---- BBears indicator parameters
extern int BBPeriod=14;

double BB_MACD_Blue,BB_MACD_Red,BBears_Green,BBears_Red;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int Orders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC )
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get ind
   BB_MACD_Blue=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,2,1);
   BB_MACD_Red=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,3,1);

   BBears_Green=iCustom(NULL,0,"BullsBears",BBPeriod,0,1);
   BBears_Red=iCustom(NULL,0,"BullsBears",BBPeriod,1,1);   
   
   
//--- sell conditions
   if(BB_MACD_Red<0 && BBears_Red<0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC ,0,Red);
      return;
     }
//--- buy conditions
   if(BB_MACD_Blue>0 && BBears_Green>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC ,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
void ClosePos()
  {
   BB_MACD_Blue=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,2,1);
   BB_MACD_Red=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,3,1);

   BBears_Green=iCustom(NULL,0,"BullsBears",BBPeriod,0,1);
   BBears_Red=iCustom(NULL,0,"BullsBears",BBPeriod,1,1);   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(BB_MACD_Red<0 && BBears_Red<0)
           {
            CloseAll();
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BB_MACD_Blue>0 && BBears_Green>0)
           {
            CloseAll();
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseAll()
  {
   bool cl,sel;
   for (int i=OrdersTotal()-1;i>= 0;i--)
    {
     sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
       { 
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC )
         {
          if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
          if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
         }
        Sleep(1000);
      }
   }
} 
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==MAGIC )
            if(OrderType()==OP_BUY)
              {
               if(TrailingStop>0)
                 {
                  if(Bid-OrderOpenPrice()>TrailingStop*Point)
                    {
                     if(OrderStopLoss()<Bid-TrailingStop*Point)
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                       }
                    }
                 }
              }

      if(OrderType()==OP_SELL)
        {
         if(TrailingStop>0)
           {
            if((OrderOpenPrice()-Ask)>TrailingStop*Point)
              {
               if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar=0;
   datetime curbar=Time[0];
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return (true);
     }
   else
     {
      return(false);
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
  
   BB_MACD_Blue=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,2,1);
   BB_MACD_Red=iCustom(NULL,0,"BB_MACD",FastLen,SlowLen,Length,barsCount,StDv,3,1);

   BBears_Green=iCustom(NULL,0,"BullsBears",BBPeriod,0,1);
   BBears_Red=iCustom(NULL,0,"BullsBears",BBPeriod,1,1);   
   
    
   if(NewBar())
     {
      if(CountTrades()<1) OpenPos();
     }
     
   //ClosePos();
   //if(TrailingStop!=0) Trailing();
    
   Comment("\n BB_MACD_BlueP ",BB_MACD_Blue,
           "\n BB_MACD_Red ",BB_MACD_Red,
           "\n BBears_Green ",BBears_Green,
           "\n BBears_Red ",BBears_Red);                                    
//---
  }
//+------------------------------------------------------------------+
avatar

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

  • 24 мая 2015, 12:21
+
0
Итак, за основу берем советник powerbands в котором вы проверяли тралл и безубыток. Он работает на индикаторах powerlines yadi.sk/d/tX-1poSQgqBib и BB MAcd.
BB MAcd — это индикатор в котором красная и синяя линии — это полосы Боллинджера, а зеленая или сиреневая — это гистограмма MACD.
1. Когда BvsB пересекся и запомнил пересечение
2. Он ждет показаний BB Macd. У этого показателя нужно использовать 2 значения: 1. Это расстояние между красной и сиреневой линией на продажу (оно должно быть меньше значения, которое задается 2. Это расстояние между сиреневой и синей линиями (оно должно быть больше значения, которое задается)
Визуально в примере на картинке видно, что началось сильное движение вниз и сиреневые точки вплотную приблизились к красной линии (даже пересекли ее), а от синей удались на значительно расстояние. Образовался треугольник, значит есть шанс что тренд продолжится.
3. Далее советник обращается снова к BvsB чтобы понять насколько сильны медведи и видит, что спред между зеленой и красной линией также велик (значение выставляется) В настройках индикатора BvsB было бы хорошо реализовать функцию уровней. Дело в том, что значение спреда в 55 «пунктов» можно получить из разных чисел. Рассмотрим на примере:
3.1 Значение зеленой линии 28, значение красной линии 27 в сумме по модулю получается 55, но это не лучший вариант для входа в продажу
3.2 Значение зеленой линии 40, и тут чаще всего все равно какое значение у красной линии, нужно входить, потому что медведи сильны.
Поэтому для торговли только по этому индикатору, как в варианте 2 ТЗ лучше всего иметь возможность выставить 2 значения: спред между 2 линиями и уровень значения верхней линии (больше или равно 55 «и/или» больше или равно 35)
4. Советник продает.
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 12:45
+
0
Я не возьмусь делать на чужой основе. Могу сделать на своей.
avatar

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

  • 24 мая 2015, 14:02
+
0
Рабочий ТФ 15М. Он работает по таймеру с 8 до 20 на парах EURUSD, EURJPY,USDCAD
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 12:52
+
0
Хорошо, какие-нибудь еще данные нужны?
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 14:07
+
0
Добавил в советник 2 условия для открытия позиций. Вывод на экран значений всех линий индикаторов и их разницы. Посмотрите если все нормально буду добавлять дальше: www.opentraders.ru/downloads/751/

input double Delta         = 0.0007; //расстояние между линиями BB_MACD
input double DeltaBvsB     = 0.0007; //расстояние между линиями BvsB


avatar

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

  • 24 мая 2015, 15:43
+
0
Андрей, тут не совсем правильно. У BB Macd должно быть 2 дельты:
1. Расстояние между красной линией и кружочками
2. Расстояние между синей линией и кружочками
Так при покупке мы должны поставить 2 значения:
1. Расстояние между зелеными точками и синей линией меньше или равно «значение» (согласно данным индикатора)
2. Расстояние меду зелеными точками и красной линией больше или равно «значение»
При продаже:
1. Расстояние между сиреневыми точками и красной линией меньше или равно «значение»
2. Расстояние между сиреневыми и синей линией больше или равно «значение»
Поставьте пож-та этот индикатор с настройками 20, 35, 10 на М15 будет нагляднее
Редактирован: 24 мая 2015, 16:10
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 16:08
+
0
Это все реализовано плюс таймер панелька трал бу: www.opentraders.ru/downloads/751/

avatar

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

  • 25 мая 2015, 09:42
+
0
Извините, но еще к этому индикатору просто необходимы:
0. Информационная панелька с данными индикаторов на экран.
1. Таймер включения\выключение
2. Безубыток
3. Стоп лосс и тейк профит
4. Тралл, который траллит только прибыльную часть и работает по такой схеме:
— ордер открылся, прошел n пунктов до безубытка
— потом включился тралл, значение которого составляет «m» пунктов. Он работает по формуле «n+m»
Итак, например, задаем данные:
1. тейк профит 220 пунктов
2. стоп лосс 200 пунктов
3. Безубыток 80 пунктов
4. Тралл 50 пунктов
Цена прошла в нашу сторону до уровня безубытка и появился стоп-лосс безубытка, потом цена прошла еще 70 пунктов и начала двигаться обратно.
Согласно, формуле тралла наша прибыль составит: 170 — 50 = 120 пунктов
Если же цене не удалось после безубытка пройти размер тралла m (опустим только 30 пунктов), то сделка закрывается по безубытку.
Если цена не достигла безубытка, она закрывается по стоп-лоссу.
Торговля ведется на ECN счетах.
Редактирован: 24 мая 2015, 16:46
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 16:43
+
0
За такой объем в рамках данного топика я не возьмусь. Нужно упрощать.
avatar

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

  • 24 мая 2015, 18:14
+
0
Хорошо, тогда сделайте пожалуйста Вариант 1, с возможностью переключить на вариант 3.
Например, «1» — это, когда BB MACD дал разрешение на открытие сделки, а BvsB сразу подтверждает или не подтверждает сигнал. Если подтверждает, то сделка открывается, если нет, то ждем следующее пересечение.
«2» — это когда BB Macd дал разрешение на открытие сделки и ждет, когда сигнал подтвердит BvsB и откроет сделку. Если подтверждения не произошло, тогда ждет нового пересечения.
Из сопровождения сделки оставьте пож-та: таймер, безубыток, SL, TR
Так нормально?
Редактирован: 24 мая 2015, 18:38
avatar

  3  NashaRussia Автор Сообщений: 38

  • 24 мая 2015, 18:37
+
0
Большое спасибо за проделанную работу! Тут маленький вопрос возник: в коде реализованы 2 дельты на покупку и 2 на продажу. А в параметрах их почему-то можно выставить только 1 дельту. Вы наверное забыли это добавить в параметры?
avatar

  3  NashaRussia Автор Сообщений: 38

  • 25 мая 2015, 11:44
+
0
avatar

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

  • 26 мая 2015, 09:41

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