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

Рейтинг 2146



РЕКОМЕНДУЮ



фрактальная коробка

добрый день. Хотелось бы реализовать одну торговую идею с вашей помощью. А именно, требуется автоматизировать стратегию на обычном фрактальном индикаторе. Фракталы периодически рисуютя то с одной стороны от свечи, то с другой, но бывают такие свечи на которых фракталы находятся по обейм сторонам сразу.Вот они нам и нужны. Так вот после отрисовки такой двухфрактальной свечи сова должен выставить два отложенных стоповых ордера по краям фракталов байстоп и селлстоп соответственно. Стоп лосс должен выставляться автоматически на противоположной стороне свечи. При срабатывании одного ордера противоположный удаляется. Ну вот впрочем и все. В сове должен присутствовать: 1 Размер лота
2 Мартин удвоение позиции после убытка
3 Дельта минимальное расстояние между ордерами для фильтра маленьких свечей при тонком рынке
4 дельта2 расстояние установки ордеров от фрактала
5 профит в пп
6 магик
  • +2
  • Просмотров: 3527
  • 11 октября 2016, 12:57
  • ras78
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Индикатор fx-trender, (для доработки сова !!!fx-trender)
Следующая запись в группе  
Модификация советника на ренко барах
11 октября 2016
11 октября 2016

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

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

+
0
С двумя шапками редко встречаются, посмотрю завтра.
avatar

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

  • 11 октября 2016, 18:55
+
0
Спасибо что откликнулись.Да действительно встречается редко, но работает на ура. Канадец 6го числа, евра 10го это для примера то что близко произошло. Давно за этими вещами наблюдал все не решался вам написать. Сигнал редкий и просто не возможно уследить без автомата.
avatar

  8  ras78 Автор Сообщений: 55

  • 11 октября 2016, 19:03
+
0
avatar

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

  • 11 октября 2016, 20:04
+
0


Андрей, сов пропускает 2-х фракталки пока ТП не достигнут? Так и задумано?
Правда у меня 4-znak, еще не подстроил под себя
avatar

  8  poruchik Сообщений: 139

  • 12 октября 2016, 04:55
+
0
<code>
//+------------------------------------------------------------------+
//|                                                 Two_Fractals.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
extern bool   ShowSignal = true;
extern bool   DrawRecs=true;
extern string note0="Минимальное тело свечи в пп";
extern int    min_candle = 3;
extern string note1="Разница между длиной теней в пп";
extern int    Razn = 3;
extern string note2="Цвет и толщина прямоугольника";
extern color  BuyColor = Red;
extern color  SellColor = PowderBlue;
extern color  NoSignalColor = Orange;
extern int RectangleWidth = 2;
extern string note3=" =0 для просмотра всей истории";
extern int    Bars_Count = 600;
extern string SoundFile = "Trumpet";

extern string sep0 = "";
extern string note4 = "Следить за:";
extern string pair00 = "EURUSD";
extern string pair01 = "GBPUSD";
extern string pair02 = "NZDUSD";
extern string pair03 = "USDCHF";
extern string pair04 = "USDJPY";
extern string pair05 = "USDCAD";
extern string pair06 = "AUDUSD";
extern string pair07 = "EURGBP";
extern string pair08 = "EURCHF";
extern string pair09 = "EURJPY";
extern string pair10 = "GBPCHF";
extern string pair11 = "GBPJPY";
extern string pair12 = "";
extern string pair13 = "";
extern string pair14 = "";
extern string pair15 = "";
extern string pair16 = "";
extern string pair17 = "";
extern string pair18 = "";
extern string pair19 = "";
extern string pair20 = "";
extern string sep1= "";
extern string note5 = "Проверять ТФ:";
extern string TF1   = "1";
extern string TF2   = "5";
extern string TF3   = "15";
extern string TF4   = "30";
extern string TF5   = "60";
extern string TF6   = "240";
extern string TF7   = "1440";
extern string TF8   = "10080";
extern string TF9   = "43200";

string pairs[21], TFr[9];
int keys[20][9];
int delta, uf, lf;
double l_shadow, u_shadow;
bool HistoryViewer, draw, Play;
double high5, high4, high3, high2, high1, low5, low4, low3, low2, low1, open3, close3;
string signal, symbol;
color BS_color;
//+------------------------------------------------------------------+
int init()  {
  delta=Razn*Point;
  if(Bars_Count==0) Bars_Count=Bars;
  pairs[0]=pair00;
  pairs[1]=pair01;
  pairs[2]=pair02;
  pairs[3]=pair03;
  pairs[4]=pair04;
  pairs[5]=pair05;
  pairs[6]=pair06;
  pairs[7]=pair07;
  pairs[8]=pair08;
  pairs[9]=pair09;
  pairs[10]=pair10;
  pairs[11]=pair11;
  pairs[12]=pair12;
  pairs[13]=pair13;
  pairs[14]=pair14;
  pairs[15]=pair15;
  pairs[16]=pair16;
  pairs[17]=pair17;
  pairs[18]=pair18;
  pairs[19]=pair19;
  pairs[20]=pair20;
  TFr[0]=TF1;
  TFr[1]=TF2;
  TFr[2]=TF3;
  TFr[3]=TF4;
  TFr[4]=TF5;
  TFr[5]=TF6;
  TFr[6]=TF7;
  TFr[7]=TF8;
  TFr[8]=TF9;
  return(0);
}
//+------------------------------------------------------------------+
int deinit()  {  for(int a=0; a<Bars; a++)   ObjectDelete("DF_" + a);  return(0);  }
//+------------------------------------------------------------------+
int start()  {
  int tf, time, key;
  if(!HistoryViewer)  DrawHistory(); 
  if(Play) { PlaySound(SoundFile);  Play=false;  } 

  for(int i=0;i<ArraySize(pairs);i++)   {
    if(pairs[i]=="") continue;
    symbol=pairs[i];
    for(int p=0;p<ArraySize(TFr);p++)     {
      if(TFr[p]=="") continue;
      tf=StrToInteger(TFr[p]);
      key=keys[i][p];
      time =iTime(symbol, tf, 0);
      if(keys[i][p]!=time)  {
        InitialData(symbol, tf);
        if(high3>MathMax(MathMax(high4,high5), MathMax(high1,high2)) &&
          low3<MathMin(MathMin(low4,low5),MathMin(low1,low2)) && 
          MathAbs(open3-close3)>min_candle*Point)  { 
            l_shadow=MathMin(open3, close3)-low3;
            u_shadow=high3-MathMax(open3, close3);
            if(l_shadow-u_shadow>delta)   {  signal="продажа по 2-F";  BS_color=BuyColor;  }
            if(u_shadow-l_shadow>delta)   {  signal="покупка по 2-F";  BS_color= SellColor;     }
            if(MathAbs(l_shadow-u_shadow)<=delta) {  BS_color= NoSignalColor;  }
            if(ShowSignal)  { Alert(symbol,"   ",tf," мин  ", signal); Play = true;  }
            int    time1=iTime(symbol, tf, 4);
            double price1=iHigh(symbol, tf, 3);  
            int    time2=iTime(symbol, tf, 2);
            double price2=iLow(symbol, tf, 3);  
            if(DrawRecs)  DrawRec(StringConcatenate("DF_",i), time1,price1,time2,price2, BS_color);
        }
        keys[i][p]=time;
  } } } 
  return(0); 
}
//+------------------------------------------------------------------+
void DrawRec(string name, int time1, double price1, int time2, double price2, color color1)  {
   ObjectCreate(name, OBJ_RECTANGLE, 0, time1, price1, time2, price2, 0, 0);
   ObjectSet(name, OBJPROP_WIDTH, RectangleWidth);
   ObjectSet(name, OBJPROP_BACK, false);
   ObjectSet(name, OBJPROP_COLOR, color1);
}
//+------------------------------------------------------------------+
void DrawHistory()  {
   for(int i=0; i<Bars_Count-3; i++)  {
     if(High[i+3]>MathMax(MathMax(High[i+4],High[i+5]), MathMax(High[i+1],High[i+2])) &&
       Low[i+3]<MathMin(MathMin(Low[i+4],Low[i+5]),MathMin(Low[i+1],Low[i+2])) &&
       MathAbs(Open[i+3]-Close[i+3])>min_candle*Point)  { 
       l_shadow=NormalizeDouble(MathMin(Open[i+3], Close[i+3])-Low[i+3],Digits);
       u_shadow=NormalizeDouble(High[i+3]-MathMax(Open[i+3], Close[i+3]),Digits);
       if(l_shadow-u_shadow>delta)   {  signal="продажа";  color BS_colors=BuyColor;  }
       if(u_shadow-l_shadow>delta)   {  signal="покупка";        BS_colors= SellColor;     }
       if(MathAbs(l_shadow-u_shadow)<=delta) {  BS_colors= NoSignalColor;  }
       int    time1=Time[i+4];
       double price1=High[i+3]+5*Point;  
       int    time2=Time[i+2];
       double price2=Low[i+3]-5*Point;  
       if(DrawRecs)  DrawRec(StringConcatenate("DF_",i), time1,price1,time2,price2, BS_colors);
   } }
   HistoryViewer=true;
   return; 
}
//+------------------------------------------------------------------+
void InitialData(string para, int per)  {
  high5=iHigh(para, per, 5);
  high4=iHigh(para, per, 4);
  high3=iHigh(para, per, 3);
  high2=iHigh(para, per, 2);
  high1=iHigh(para, per, 1);

  low5=iLow(para, per, 5);
  low4=iLow(para, per, 4);
  low3=iLow(para, per, 3);
  low2=iLow(para, per, 2);
  low1=iLow(para, per, 1);
  
  open3= iOpen(para, per, 3);
  close3=iClose(para, per, 3);

  uf=0;  lf=0;
  draw=false;
}
//+------------------------------------------------------------------+



</code>


Индикатор 2 фракталов, смотрит несколько пар

За сову — спасибо!
Редактирован: 12 октября 2016, 05:04
avatar

  8  poruchik Сообщений: 139

  • 12 октября 2016, 05:03
+
0
Андрей, сов пропускает 2-х фракталки пока ТП не достигнут? Так и задумано?

В ТЗ не было четких условий насчет этого, поэтому сделал как сделал.
avatar

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

  • 12 октября 2016, 09:31
+
0
Доброе утро. Андрей спасибо за быстроту, в общем все работает, но только чуть не по т.з.фильтр вы сделали расстояние от цены---надо межу ордерами то есть минимальный размер свечи. И со стопом, надо что бы выставлялся на противоположную сторону сигнальной свечи автоматически так как это расстояние постоянно меняется. Если возможно поправьте.
avatar

  8  ras78 Автор Сообщений: 55

  • 12 октября 2016, 10:46
+
0
Добавил стоп на цену и фильтр по свече:


//+------------------------------------------------------------------+
//|                                                  DoubleFract.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, 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      = 333;      // лось
extern int TakeProfit    = 333;      // язь
extern int Delta         = 50;       // расстояние от фрактала
extern int Sigma         = 50;       // размер свечи хай-лоу
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=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); else sl=High[3];
      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); else sl=Low[3];
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double sigma=High[3]-Low[3];

   if(sigma>Sigma*Point)
      if(CountTrades()<1 && t!=Time[0])
         if(High[3]>High[2] && High[3]>High[1] && High[3]>High[4] && High[3]>High[5])
            if(Low[3]<Low[2] && Low[3]<Low[1] && Low[3]<Low[4] && Low[3]<Low[5])
              {
               if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
               if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
               t=Time[0];
              }

   if(CountTrades()>0) DelOrder();
  }
//+------------------------------------------------------------------+

avatar

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

  • 12 октября 2016, 11:12
+
0
USDCAD работает евру и швецарца тестирую не хчет какие параметры не ставлю. В чем может быть причина? Тестирую с 10го числа.
avatar

  8  ras78 Автор Сообщений: 55

  • 12 октября 2016, 11:44
+
0
На евре есть с начала года:

avatar

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

  • 12 октября 2016, 11:52
+
0
Я не говорю что он вообще не работает, но некоторые сигналы пропускает.От чего это происходит? Если не трудно крутните с начала недели евру и франк может вы поймете почему. Если нет ну да ладно. Еще раз благодарю за проделанную работу.
avatar

  8  ras78 Автор Сообщений: 55

  • 12 октября 2016, 12:16
+
0
Андрей я нашел в чем ошибка работы сова. Вы сделали выставление ордеров от цены фиксации фрактала, то есть начало 3го бара от сигнальной свечи.Расстояние выставленных ордеров действительно должно быт от хай лоу сигнальной свечи иначе теряется весь смысл стратегии. То есть/ как на данный момент/ если цена находится близко от края сиг.св. один из ордеров попадает в зону поражения. А именно он срабатывает внутри сиг.св. а не снаружи.Если это невозможно исправить удалите пожалуйста сова потому что он из прибыльных сигналов делает убытки за счет этой ошибки.
avatar

  8  ras78 Автор Сообщений: 55

  • 12 октября 2016, 15:24
+
0
Исправил этот момент:


//+------------------------------------------------------------------+
//|                                                  DoubleFract.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, 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      = 333;      // лось
extern int TakeProfit    = 333;      // язь
extern int Delta         = 50;       // расстояние от фрактала
extern int Sigma         = 50;       // размер свечи хай-лоу
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=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); else sl=High[3];
      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); else sl=Low[3];
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double sigma=High[3]-Low[3];

   if(sigma>Sigma*Point)
      if(CountTrades()<1 && t!=Time[0])
         if(High[3]>High[2] && High[3]>High[1] && High[3]>High[4] && High[3]>High[5])
            if(Low[3]<Low[2] && Low[3]<Low[1] && Low[3]<Low[4] && Low[3]<Low[5])
              {
               if(CountOrders(4)<1) PutOrder(4,High[3]+Delta*Point);
               if(CountOrders(5)<1) PutOrder(5,Low[3]-Delta*Point);
               t=Time[0];
              }

   if(CountTrades()>0) DelOrder();
  }
//+------------------------------------------------------------------+

avatar

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

  • 12 октября 2016, 17:45
+
0
Ок. Теперь все как надо.
avatar

  8  ras78 Автор Сообщений: 55

  • 12 октября 2016, 18:12
+
0
Да, то же хотел написать для исправления.
==========
Трал так и просится :) 

Стопы может на концы свечи сигнальной?
avatar

  8  poruchik Сообщений: 139

  • 12 октября 2016, 21:22

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