#property indicator_separate_window // в подокне #property indicator_buffers 6 #property indicator_color1 Blue // стохастик #property indicator_color2 Magenta // управляющий сигнал #property indicator_color3 Green // уровень перекупленности #property indicator_color4 Red // уровень перепроданности #property indicator_maximum 100 #property indicator_minimum 0 // Воходные параметры MasterSlave extern int Source=1; // 0 - объем; 1 - ст.девиация цены; 2 - ATR; 3 - цена; extern int SourcePeriod=88; // период входного индикатора extern int Window=111; // длина выборки нормирования extern double Sensitivity=0; // чувствительность extern int Signal=55; // сглаживание нормированного индикатора (сигнальная) // Входные параметры стохастика extern int KperiodFrom=22; // начальное значение %K extern int KperiodTo=5; // конечное extern int SlowingFrom=12; // начальное значение Slowing extern int SlowingTo=3; // конечное extern int OverSoldFrom=3; // начальное значение уровня перепроданности extern int OverSoldTo=22; // конечное // индикаторные буферы double Stoch[]; // стохастик double Master[]; // управляющий сигнал double OB[]; // уровень перекупленности double OS[]; // уровень перепроданности double K[]; // %К стохастика double Slow[]; // Slowing стохастика bool first=1; // флаг первого запуска индикатора int init() { SetIndexBuffer(0,Stoch); SetIndexStyle(0,DRAW_LINE); SetIndexLabel(0,"Stoch"); SetIndexBuffer(1,Master); SetIndexStyle(1,DRAW_LINE); SetIndexLabel(1,"Master"); SetIndexBuffer(2,OB); SetIndexStyle(2,DRAW_LINE,2); SetIndexLabel(2,"OB"); SetIndexBuffer(3,OS); SetIndexStyle(3,DRAW_LINE,2); SetIndexLabel(3,"OS"); SetIndexBuffer(4,K); SetIndexStyle(4,DRAW_NONE); SetIndexLabel(4,"%K"); SetIndexBuffer(5,Slow); SetIndexStyle(5,DRAW_NONE); SetIndexLabel(5,"Slow"); return(0); } int start() { int ic=IndicatorCounted(); if(!first && Bars-ic>2) ic=reinit(); // если есть пропущенные бары не на подключении (в работе) int limit=Bars-ic-1; for(int i=limit; i>=0; i--) { // управляющий сигнал double k=iCustom(NULL,0,"_MasterSlave",Source,SourcePeriod,Window,Sensitivity,Signal, 0,i); Master[i]=100*k; // Управляемые параметры Стохастика int Kperiod=KperiodFrom+k*(KperiodTo-KperiodFrom); K[i]=Kperiod; // %K стохастка int Slowing=SlowingFrom+k*(SlowingTo-SlowingFrom); Slow[i]=Slowing; // Slowing стохастика OS[i]=OverSoldFrom+k*(OverSoldTo-OverSoldFrom); OB[i]=100-OS[i]; // уровни ПП/ПК // Стохастик Stoch[i]=iStochastic(NULL,0,Kperiod,1,Slowing,0,0, 0,i); } first=0; // сброс флага первого подключения return(0); } //+------------------------------------------------------------------+ int reinit() { // дополнительная инициализация ArrayInitialize(Stoch,0.0); ArrayInitialize(Master,0.0); ArrayInitialize(OB,0.0); ArrayInitialize(OS,0.0); ArrayInitialize(K,0.0); ArrayInitialize(Slow,0.0); return(0); }