//+-----------------------------------------------------------------------+ //| USDominator.mq4 | //+-----------------------------------------------------------------------+ #property copyright "Copyright © 2012, Andrey Vassiliev (MoneyJinn), v1.2" #property link "www.vassiliev.ru" //Индикатор доминирования доллара США. //Значение индикатора (активность) в каждом баре определяется количеством контрольных //инструментов, стоимость которых в этом баре падает по отношению к доллару США. //Принцип работы индикатора основан на выявленной его автором закономерности, в соответствии //с которой при доминирующей активности доллара США по отношению к контрольному набору //инструментов, доллар с высокой вероятностью растет также и по отношению к любому другому активу. //Поэтому, в соответствии с показаниями индикатора, при указанной доминирующей активности, //когда Activity > 50, следует покупать любой актив USDxxx и продавать любой актив xxxUSD. #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_level1 20 #property indicator_level2 50 #property indicator_level3 80 #property indicator_levelcolor Silver #property indicator_levelwidth 0 #property indicator_levelstyle 2 #property indicator_buffers 1 #property indicator_color1 Yellow #property indicator_style1 0 //Для работы индикатора следующие символы должны присутствовать в обзоре рынка терминала MetaTrader. extern string Symbol1="XAUUSD"; // GOLD extern string Symbol2="EURUSD"; extern string Symbol3="USDJPY"; extern string Symbol4="GBPUSD"; extern string Symbol5="USDCHF"; extern string Symbol6="AUDUSD"; extern string Symbol7="USDCAD"; extern string Symbol8="USDSGD"; extern string Symbol9="USDHKD"; extern string Symbol0="NZDUSD"; //Контрольный набор может быть сокращен, а основные инструменты изменены. //Для отключения символа достаточно стереть его название в настройках. //Альтернативный контрольный набор: XAUUSD, EURUSD, USDJPY, GBPUSD, USDCHF. double B0[],Step; int B3[10]; string B4[10]; int IN; // int init() { if(ArraySize(B0)>0)ArrayInitialize(B0,0); IndicatorBuffers(1); IndicatorDigits(0); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,B0); SetIndexLabel(0,"Activity"); IndicatorShortName("USDominator"); B4[0]=Symbol1; B4[1]=Symbol2; B4[2]=Symbol3; B4[3]=Symbol4; B4[4]=Symbol5; B4[5]=Symbol6; B4[6]=Symbol7; B4[7]=Symbol8; B4[8]=Symbol9; B4[9]=Symbol0; double i=0; Step=0; for(int k=0;k<=9;k++) { if(StringFind(B4[k],"USD",0)>=0 && iOpen(B4[k],Period(),0)>0){i++;B3[k]=StringFind(B4[k],"USD",0);}else{B3[k]=-1;} } if(i>0){Step=100/i;} if(StringFind(Symbol(),"USD",0)>3){IN=1;}else{IN=0;} return(0); } // int Bar(int k, int i) { int p=B3[k]; int result=0; if(p>=0) { string S=B4[k]; int i1=iBarShift(S,Period(),Time[i],true); if(i1<0){return(2000);} if(p<3 && iClose(S,Period(),i1)-iOpen(S,Period(),i1)>0){result=1;} if(p>2 && iClose(S,Period(),i1)-iOpen(S,Period(),i1)<0){result=1;} } return(result); } // int start() { int counted_bars = IndicatorCounted(); if(counted_bars < 0) return(-1); if(counted_bars > 0) counted_bars--; int limit = Bars - counted_bars; if(counted_bars==0) limit-=1+1; int pos=0; double b=0; if(limit>1){pos=limit-1;} /* int IndCounted=IndicatorCounted(); if(IndCounted<0){return(-1);} if(IndCounted==0){init();} int pos=0; double b=0; if(Bars>IndCounted+1){pos=(Bars-IndCounted)-1;}*/ for(int i=pos;i>=0;i--) { b=Step*(Bar(1,i)+Bar(2,i)+Bar(3,i)+Bar(4,i)+Bar(5,i)+Bar(6,i)+Bar(7,i)+Bar(8,i)+Bar(9,i)+Bar(0,i)); if(b>100){B0[i]=B0[i+1];}else{B0[i]=b;} } return(0); }