Нужно вывести стрелку на графике при совпадении всех трех сигналов.
//+------------------------------------------------------------------+
//| 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 в условиях покупки и продажи.
Комментарии (5)
35 AM2 Сообщений: 16353 - Андрей
Ведь советник может открываться при совпадении сигналов, но я хочу потестить стратегию, подобрать оптимальные параметры для входа.
Вообщем я хочу стрелоку и надпись бай или селл на график, чтобы не упускать вход, а к нему еще алерт, но можно без окошка чтоб журнал писало. Редактирован: 11 июня 2016, 16:47
16 cerber04 Автор Сообщений: 409
35 AM2 Сообщений: 16353 - Андрей
35 AM2 Сообщений: 16353 - Андрей
Редактирован: 13 июня 2016, 09:57
35 AM2 Сообщений: 16353 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий