Индикатор для оценки ситуации в группе валютных пар
Трейдеру зачастую приходится быстро оценить ситуацию по рынку в целом или на группе валютных пар. Тот, кто часто использует такие приемы в торговле, знает, что это задача не из простых. Для упрощения жизни спекулянта в этом случае разрабатываются самые разнообразные алгоритмы. Но общая черта одна – работа сразу с несколькими инструментами.
Вашему вниманию предлагается простой вариант реализации индикатора, который показывает положение вещей суммарно по нескольким (до десяти) инструментам. При этом ситуация отображается сразу по всем стандартным таймфреймам (M1, M15, M30, H1, H4, D1, W1 и MN1).
Во входных параметрах индикатора можно указать названия торговых инструментов и их коэффициент при общем подсчете. Коэффициент может принимать значения 1 и -1.
Допустим, используются торговые инструменты EURUSD и USDJPY, а оценку общей ситуации нужно вести так, чтобы понятие «рост» было сопряжено с ростом пары EURUSD и падением пары USDJPY. Иными словами, чтобы оценивался восходящий тренд против доллара США. В таком случае паре EURUSD следует сопоставить коэффициент 1, а паре USDJPY – -1. В случае если понятию «рост» нужно сопоставить рост доллара США, то для EURUSD выставляется коэффициент -1, а USDJPY – 1.
Алгоритм оценки ситуации крайне прост. Если цена закрытия инструмента на предыдущем баре больше, чем цена открытия, то считается, что инструмент растет, и в этом случае в общий зачет ставится «+1», в противном случае – «-1». Затем это значение умножается на коэффициент данного инструмента (из входных параметров) и уже полученное значение прибавляется к общей величине сигнала. Затем, если суммарный сигнал больше 0, то считается, что тренд восходящий, если меньше 0 – нисходящий, а если равен 0 – отсутствие четкого тренда.
Визуально это отображается стрелочками:
? Восходящий тренд – зеленая стрелка вверх.
? Нисходящий тренд – красная стрелка вниз.
? Отсутствие четкого тренда – белая стрелка вправо.
Код индикатора крайне прост:
//+——————————————————————+
//| price_compass.mq4 |
//| Copyright © 2010, ENSED Team |
//| http://www.ensed.org |
//+——————————————————————+
#property copyright «Copyright © 2010, ENSED Team»
#property link «http://www.ensed.org»
#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 0.1
extern string Symb_1=»EURUSD»; //символ
extern int Symb_1_k=1; //коэффициент для общего тренда (1 или -1 (например, 1 для EURUSD и -1 для USDJPY))
extern string Symb_2=»GBPUSD»;
extern int Symb_2_k=1;
extern string Symb_3=»AUDUSD»;
extern int Symb_3_k=1;
extern string Symb_4=»USDJPY»;
extern int Symb_4_k=-1;
extern string Symb_5=»USDCHF»;
extern int Symb_5_k=-1;
extern string Symb_6=»USDCAD»;
extern int Symb_6_k=-1;
extern string Symb_7=»»;
extern int Symb_7_k=1;
extern string Symb_8=»»;
extern int Symb_8_k=1;
extern string Symb_9=»»;
extern int Symb_9_k=1;
extern string Symb_10=»»;
extern int Symb_10_k=1;
string ShortIndName=»CIND»;
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int init()
{
IndicatorShortName(ShortIndName);
IndicatorDigits(0);
SetIndexEmptyValue(0,0.0);
//—- indicators
int mwind=WindowFind(ShortIndName);
if(mwind>0) ObjectsDeleteAll(mwind);
//—-
return(0);
}
//+——————————————————————+
//| Custom indicator deinitialization function |
//+——————————————————————+
int deinit()
{
//—-
int mwind=WindowFind(ShortIndName);
if(mwind>0) ObjectsDeleteAll(mwind);
//—-
return(0);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
//+——————————————————————+
//| Подсчёт сигнала |
int signal(int period) {
int i=0, k=0, signal=0;
string arr_symbols[10][2];
arr_symbols[0][0] = Symb_1;
arr_symbols[1][0] = Symb_2;
arr_symbols[2][0] = Symb_3;
arr_symbols[3][0] = Symb_4;
arr_symbols[4][0] = Symb_5;
arr_symbols[5][0] = Symb_6;
arr_symbols[6][0] = Symb_7;
arr_symbols[7][0] = Symb_8;
arr_symbols[8][0] = Symb_9;
arr_symbols[9][0] = Symb_10;
arr_symbols[0][1] = Symb_1_k;
arr_symbols[1][1] = Symb_2_k;
arr_symbols[2][1] = Symb_3_k;
arr_symbols[3][1] = Symb_4_k;
arr_symbols[4][1] = Symb_5_k;
arr_symbols[5][1] = Symb_6_k;
arr_symbols[6][1] = Symb_7_k;
arr_symbols[7][1] = Symb_8_k;
arr_symbols[8][1] = Symb_9_k;
arr_symbols[9][1] = Symb_10_k;
for(i=0;i<=9; i++) {
if(arr_symbols[i][0]!=»» && MathAbs(StrToInteger(arr_symbols[i][1]))==1) {
if(iClose(arr_symbols[i][0],period,1)>iOpen(arr_symbols[i][0],period,1))
signal+=1*StrToInteger(arr_symbols[i][1]);
if(iClose(arr_symbols[i][0],period,1)<iOpen(arr_symbols[i][0],period,1))
signal+=-1*StrToInteger(arr_symbols[i][1]);
} //end if(arr_symbols[i][0]!=»» && MathAbs(StrToInteger(arr_symbols[i][1]))==1)
} //end for(i=0;i<=9; i++)
return(signal);
}
//| Подсчёт сигнала |
//+——————————————————————+
//+——————————————————————+
//| Нанесение стрелки |
void create(int period, int x, int mwind) {
int obj_text=0, y=20;
color color_to_show=CLR_NONE;
if(signal(period)==0) { obj_text=232; color_to_show=White; y+=3;}
if(signal(period)>0) { obj_text=233; color_to_show=Green; }
if(signal(period)<0) { obj_text=234; color_to_show=Red; y+=5;}
if(ObjectCreate(«text_0_comp»+period,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_0_comp»+period,OBJPROP_XDISTANCE,x);
ObjectSet(«text_0_comp»+period,OBJPROP_YDISTANCE,y);
ObjectSetText(«text_0_comp»+period,CharToStr(obj_text),15,
«WingDings»,color_to_show);
} //end if(ObjectCreate(«text_0_comp»+period,OBJ_LABEL,mwind,0,0))
}
//| Нанесение стрелки |
//+——————————————————————+
int start() {
int counted_bars=IndicatorCounted();
int mwind=WindowFind(ShortIndName);
if(mwind>0) ObjectsDeleteAll(mwind);
create(PERIOD_M1, 10, mwind);
if(ObjectCreate(«text_1_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_1_comp»,OBJPROP_XDISTANCE,12);
ObjectSet(«text_1_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_1_comp»,»M1″,10,»Arial»,Gold);
}
create(PERIOD_M15, 40, mwind);
if(ObjectCreate(«text_2_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_2_comp»,OBJPROP_XDISTANCE,37);
ObjectSet(«text_2_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_2_comp»,»M15″,10,»Arial»,Gold);
}
create(PERIOD_M30, 75, mwind);
if(ObjectCreate(«text_3_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_3_comp»,OBJPROP_XDISTANCE,72);
ObjectSet(«text_3_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_3_comp»,»M30″,10,»Arial»,Gold);
}
create(PERIOD_H1, 110, mwind);
if(ObjectCreate(«text_4_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_4_comp»,OBJPROP_XDISTANCE,112);
ObjectSet(«text_4_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_4_comp»,»H1″,10,»Arial»,Gold);
}
create(PERIOD_H4, 145, mwind);
if(ObjectCreate(«text_5_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_5_comp»,OBJPROP_XDISTANCE,147);
ObjectSet(«text_5_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_5_comp»,»H4″,10,»Arial»,Gold);
}
create(PERIOD_D1, 180, mwind);
if(ObjectCreate(«text_6_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_6_comp»,OBJPROP_XDISTANCE,182);
ObjectSet(«text_6_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_6_comp»,»D1″,10,»Arial»,Gold);
}
create(PERIOD_W1, 215, mwind);
if(ObjectCreate(«text_7_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_7_comp»,OBJPROP_XDISTANCE,216);
ObjectSet(«text_7_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_7_comp»,»W1″,10,»Arial»,Gold);
}
create(PERIOD_MN1, 250, mwind);
if(ObjectCreate(«text_8_comp»,OBJ_LABEL,mwind,0,0)) {
ObjectSet(«text_8_comp»,OBJPROP_XDISTANCE,247);
ObjectSet(«text_8_comp»,OBJPROP_YDISTANCE,45);
ObjectSetText(«text_8_comp»,»MN1″,10,»Arial»,Gold);
}
return(0);
}
//+——————————————————————+
Данный индикатор способен значительно упростить ориентацию в рыночной ситуации, однако он представлен только в ознакомительных целях. Вместо предложенного алгоритма можно использовать другой более совершенный или подходящий для конкретной торговой системы индикатор.