Evgen123
Fixa

 
Уровень 8

  Торгую в компаниях:


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

Рейтинг 2146



РЕКОМЕНДУЮ



Cова по ТЗ на двух индюках

Здравствуйте, прошу написать советник на стандартном индикаторе Heiken Ashi и пользовательском MBFX Timing (прикреплю ниже)

Условия на покупку: Линия индикатора MBFX Timing сначала вышла за рамки нижнего уровня а затем вернулась и сменила свой цвет на зеленый + индикатор Heiken Ashi сменил свой цвет на зеленый, выход из позиции либо по достижению тейка либо при смене цвета индикатора MBFX Timing на желтый.

Условия на продажу будут обратные.
В Советнике необходимо:
1) Выбор размера лота (фиксированный или процент от депо)
2) Уровень без убытка, пункты б\у
3) Трейлинг стоп
4) Функция мартингейла
6) Возможность настройки параметров индикатора MBFX Timing (очень важно)
7) Выбор размера лота
8) Лось, Язь
9) Магик
10) Реквот
11) Выбор с какой свечи после сигнала входить в сделку.
Заранее спасибо!!!
MBFX Timing.ex4 (4 Kb)
  • +1
  • Просмотров: 2853
  • 3 сентября 2018, 18:24
  • Evgen123
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
RSI + AC + SMA
Следующая запись в группе  
Alert к индикатору
02 сентября 2018
06 сентября 2018

Брокер для ваших роботов, 15 лет на рынке

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

+
0
на 11-е
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 3 сентября 2018, 20:01
+
0
пока на одном индикаторе. с хейкена достаточно проблематично получить сигнал.




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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 0;        // трал
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int CloseSig      = 1;        // 1-закрытие в конце работы
extern int Magic         = 123;      // магик

extern string IndName    = "MBFX Timing";
extern int Level         = 30;       
extern int Len           = 7;       
extern double Filter     = 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,Lot(),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 OpenPos()
  {
   double yel1 = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double yel2 = iCustom(NULL,0,IndName,Len,Filter,0,Shift+1);

   if(yel1>Level && yel2<Level) PutOrder(0,Ask);
   if(yel1<100-Level && yel2>100-Level) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double yel1 = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double yel2 = iCustom(NULL,0,IndName,Len,Filter,0,Shift+1);

   if(yel1<yel2) CloseAll(0);
   if(yel1>yel2) CloseAll(1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double yel = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double gre = iCustom(NULL,0,IndName,Len,Filter,1,Shift);
   double ora = iCustom(NULL,0,IndName,Len,Filter,2,Shift);

   if(CountTrades()<1) OpenPos();
   if(CloseSig>0) ClosePos();

   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();

   Comment("\n gre: ",gre,
           "\n ora: ",ora,
           "\n yel: ",yel);
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 6 сентября 2018, 21:30
+
0
Шаг трейлинг стоп забыл
avatar

  11  juozas Сообщений: 156

  • 6 сентября 2018, 21:38
+
0
Андрей: на Heiken Ashi, я писал скальпинг.ДЦ ругается, модификация ордеров не проходит
avatar

  11  juozas Сообщений: 156

  • 6 сентября 2018, 21:47
+
0
BULevel = 0; // уровень БУ
BUPoint = 30; // пункты БУ

Я вообще не догоняю, для чего эти функции *???* 
avatar

  11  juozas Сообщений: 156

  • 6 сентября 2018, 21:55
+
0
добавил смену цвета по хейкен. так сигнал очень редкий:

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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 0;        // трал
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int CloseSig      = 1;        // 1-закрытие в конце работы
extern int Magic         = 123;      // магик

extern string IndName    = "MBFX Timing";
extern int Level         = 30;
extern int Len           = 7;
extern double Filter     = 0;

extern string IndName2="Heiken Ashi";
//+------------------------------------------------------------------+
//| 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,Lot(),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 OpenPos()
  {
   double yel1 = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double yel2 = iCustom(NULL,0,IndName,Len,Filter,0,Shift+1);

   double op1=iCustom(NULL,0,IndName2,2,Shift);
   double cl1=iCustom(NULL,0,IndName2,3,Shift);
   double op2=iCustom(NULL,0,IndName2,2,Shift+1);
   double cl2=iCustom(NULL,0,IndName2,3,Shift+1);

   if(yel1>Level && yel2<Level && op1-cl1>0 && op2-cl2<0) PutOrder(0,Ask);
   if(yel1<100-Level && yel2>100-Level && op1-cl1<0 && op2-cl2>0) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double yel1 = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double yel2 = iCustom(NULL,0,IndName,Len,Filter,0,Shift+1);

   if(yel1<yel2) CloseAll(0);
   if(yel1>yel2) CloseAll(1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double yel = iCustom(NULL,0,IndName,Len,Filter,0,Shift);
   double gre = iCustom(NULL,0,IndName,Len,Filter,1,Shift);
   double ora = iCustom(NULL,0,IndName,Len,Filter,2,Shift);

   if(CountTrades()<1) OpenPos();
   if(CloseSig>0) ClosePos();

   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();

   Comment("\n gre: ",gre,
           "\n ora: ",ora,
           "\n yel: ",yel);
  }
//+------------------------------------------------------------------+
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 6 сентября 2018, 22:04
+
+1
скинул в базу вариант с одним индикатором: www.opentraders.ru/downloads/2062/
т.к. он более вменяемый :) 
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 7 сентября 2018, 20:03
+
0
Спасибо, буду тестить оба варианта с понедельника- не ожидал так рано, только сейчас увидел что готово все*good* 
avatar

  8  Evgen123 Автор Сообщений: 416 - Fixa

  • 9 сентября 2018, 01:51

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