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

Рейтинг 2081



РЕКОМЕНДУЮ



Помогите вывести сигнал на график в виде стрелки.

Нужно вывести стрелку на графике при совпадении всех трех сигналов.




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

extern int scaleX=20,
scaleY=20,
offsetX=35,
offsetY=20,
fontSize=20,
corner=3;
extern char symbolCodeBuy=110,
symbolCodeSell=110,
symbolCodeNoSignal=110;

extern color signalBuyColor=Lime,
signalSellColor=Red,
noSignalColor=Yellow,
textColor=White;

int period[]={1,5,15,30,60,240,1440,10080,43200};
string periodString[]={"M1","M5","M15","M30","H1","H4","D1","W1","MN1"},
// создаем еще один массив с названиями индикаторов
signalNameString[]={"MA","RSI","SAR"};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
// таблица сигналов
   for(int x=0;x<9;x++)
      for(int y=0;y<3;y++)
        {
         ObjectCreate("signal"+IntegerToString(x)+IntegerToString(y),OBJ_LABEL,0,0,0,0,0);
         // изменяем угол привязки
         ObjectSet("signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_CORNER,corner);
         ObjectSet("signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_XDISTANCE,x*scaleX+offsetX);
         ObjectSet("signal"+IntegerToString(x)+IntegerToString(y),OBJPROP_YDISTANCE,y*scaleY+20);
         ObjectSetText("signal"+IntegerToString(x)+IntegerToString(y),CharToStr(symbolCodeNoSignal),
                       fontSize,"Wingdings",noSignalColor);
        }

// названия таймфреймов    
   for(int x=0;x<9;x++)
     {
      ObjectCreate("textPeriod"+IntegerToString(x),OBJ_LABEL,0,0,0,0,0);
      // изменяем угол привязки      
      ObjectSet("textPeriod"+IntegerToString(x),OBJPROP_CORNER,corner);
      ObjectSet("textPeriod"+IntegerToString(x),OBJPROP_XDISTANCE,x*scaleX+offsetX);
      ObjectSet("textPeriod"+IntegerToString(x),OBJPROP_YDISTANCE,offsetY-10);
      ObjectSetText("textPeriod"+IntegerToString(x),periodString[x],8,"Tahoma",textColor);
     }

// названия индикаторов 
   for(int y=0;y<3;y++)
     {
      ObjectCreate("textSignal"+IntegerToString(y),OBJ_LABEL,0,0,0,0,0);
      // изменяем угол привязки      
      ObjectSet("textSignal"+IntegerToString(y),OBJPROP_CORNER,corner);
      ObjectSet("textSignal"+IntegerToString(y),OBJPROP_XDISTANCE,offsetX-25);
      ObjectSet("textSignal"+IntegerToString(y),OBJPROP_YDISTANCE,y*(scaleY)+offsetY+8);
      ObjectSetText("textSignal"+IntegerToString(y),signalNameString[y],8,"Tahoma",textColor);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for(int x=0;x<9;x++)
     {
      // сигнал на покупку
      if(iMA(Symbol(),period[x],13,0,0,0,0)>iMA(Symbol(),period[x],24,0,0,0,0))
         ObjectSetText("signal"+IntegerToString(x)+"0",CharToStr(symbolCodeBuy),fontSize,"Wingdings",signalBuyColor);
      // сигнал на продажу   
      else
         ObjectSetText("signal"+IntegerToString(x)+"0",CharToStr(symbolCodeSell),fontSize,"Wingdings",signalSellColor);
     }

   for(int x=0;x<9;x++)
     {
      // сигнал на покупку
      if(MathAbs(iRSI(Symbol(),period[x],7,0,0))<40.0)
         ObjectSetText("signal"+IntegerToString(x)+"1",CharToStr(symbolCodeBuy),fontSize,"Wingdings",signalBuyColor);
      // сигнал на продажу   
      else if(MathAbs(iRSI(Symbol(),period[x],7,0,0))>60.0)
         ObjectSetText("signal"+IntegerToString(x)+"1",CharToStr(symbolCodeSell),fontSize,"Wingdings",signalSellColor);
      // нет сигнала
      else
         ObjectSetText("signal"+IntegerToString(x)+"1",CharToStr(symbolCodeNoSignal),fontSize,"Wingdings",noSignalColor);
     }

   for(int x=0;x<9;x++)
     {
      // сигнал на покупку
      if(iSAR(Symbol(),period[x],0.02,0.2,0)<Close[0])
         ObjectSetText("signal"+IntegerToString(x)+"2",CharToStr(symbolCodeBuy),fontSize,"Wingdings",signalBuyColor);
      // сигнал на продажу   
      else
         ObjectSetText("signal"+IntegerToString(x)+"2",CharToStr(symbolCodeSell),fontSize,"Wingdings",signalSellColor);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+



Нужно вывести стрелку на графике при совпадении всех трех сигналов одного цвета, а лучше всех трех условий
Добавьте значения еще двух МА 35, 144 в условиях покупки и продажи.
  • 0
  • Просмотров: 3693
  • 29 мая 2016, 17:43
  • cerber04
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Мне проще с нуля будет написать по ТЗ, но это в следующем месяце, т.к. в этом у вас уже есть заказ.
avatar

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

  • 29 мая 2016, 17:59
+
0
какже все таки вывести с сигнал на график, когда совпадает все три условия т.е три сигнала зеленые, RSI (20), параболик поставил точку внизу, Ма загнулась вверх, еще хочу добавить AC, когда цвет снизу из красного появилась зеленая полоска.

Ведь советник может открываться при совпадении сигналов, но я хочу потестить стратегию, подобрать оптимальные параметры для входа.

Вообщем я хочу стрелоку и надпись бай или селл на график, чтобы не упускать вход, а к нему еще алерт, но можно без окошка чтоб журнал писало.
Редактирован: 11 июня 2016, 16:47
avatar

  16  cerber04 Автор Сообщений: 409

  • 11 июня 2016, 16:38
+
0
До вашего не добрался еще. 3 заказа висит.
avatar

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

  • 11 июня 2016, 22:27
+
0
Добрался. Начал делать.
avatar

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

  • 12 июня 2016, 10:03
+
0
Пока в таком виде: www.opentraders.ru/downloads/1206/



//+------------------------------------------------------------------+
//|                                                      BuySell.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
#property indicator_chart_window

#property indicator_buffers    2
#property indicator_width1     2
#property indicator_width2     2
#property indicator_color1     Lime
#property indicator_color2     Red

input int MAPeriod  = 20;
input int RSIPeriod = 4;
input int RSILevel  = 44;

//--- buffers
double UP[];
double DN[];

bool b=true,s=true;
datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,233);
   SetIndexBuffer(0,UP);

   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,234);
   SetIndexBuffer(1,DN);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for(int i=1; i<rates_total-prev_calculated; i++)
     {
      double ma1 = iMA(NULL,0,MAPeriod,0,0,0,i);
      double ma2 = iMA(NULL,0,MAPeriod,0,0,0,i+1);
      double rsi = iRSI(NULL,0,RSIPeriod,0,i);
      double sar = iSAR(NULL,0,0.02,0.2,i);

      if(ma1>ma2 && rsi>100-RSILevel && sar<Bid && b)
        {
         UP[i]=low[i];
         b=false;
         s=true;
        }

      if(ma1<ma2 && rsi<RSILevel && sar>Bid && s)
        {
         DN[i]=high[i];
         s=false;
         b=true;
        }
     }

   if(t!=Time[0])
     {
      if(UP[1]<1000) Alert(Symbol()+" UP Signal!");
      if(DN[1]<1000) Alert(Symbol()+" DN Signal!");
      t=Time[0];
     }
     
   Comment("\n UP:",UP[1],
           "\n DN:",DN[1]);
           
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Редактирован: 13 июня 2016, 09:57
avatar

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

  • 12 июня 2016, 12:08

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