#property indicator_CHart_window ///Не помагает мт4
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_style1 STYLE_SOLID
#property indicator_color1 Blue
#property indicator_color2 Green
#property indicator_width2 2
#property indicator_color3 Red
#property indicator_width3 2
#property indicator_level1 0
#property indicator_minimum 0
#property indicator_maximum 1
extern string symbol="0";//Символ
extern int period=31;
extern int MaxBars=1000;
extern bool WaitForClose = true;
extern bool RecalcOnClose = true;
double ExtBuffer0[];
double ExtBuffer1[];
double ExtBuffer2[];
int init(){
SetIndexStyle(0,DRAW_NONE);
SetIndexBuffer(0,ExtBuffer0);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,ExtBuffer1);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2,ExtBuffer2);
IndicatorShortName(""+symbol);
return(0);
}
bool BarChanged(){
static datetime dt = 0;
if (dt != Time[0]){
dt = Time[0];
return(true);
}
return(false);
}
int start(){
bool _BarChanged=BarChanged();
if (WaitForClose && (!_BarChanged)) return (0);
int limit;
int counted_bars;
double prev,current,old;
double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
double price;
double MinL=0;
double MaxH=0;
counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
if (RecalcOnClose) counted_bars=0;
limit=Bars-counted_bars;
if (limit>MaxBars) limit=MaxBars;
int StartBar=0;
if (WaitForClose) StartBar=1;
for(int i=StartBar; i<limit; i++){
MaxH = High[iHighest(symbol,0,MODE_HIGH,period,i)]; // Ищем максимальную цену в количестве баров period
MinL = Low[iLowest(symbol,0,MODE_LOW,period,i)]; // Ищем миимальную цену в количестве баров period
price = (High
+Low)/2; // Получаем среднюю цену последнего бара
if(MaxH-MinL == 0) Value = 0.33*2*(0-0.5) + 0.67*Value1;
else Value = 0.33*2*((price-MaxH)/(MinL-MaxH)-0.5) + 0.67*Value1;
Value=MathMin(MathMax(Value,-0.999),0.999);
if(1-Value == 0) ExtBuffer0=0.5+0.5*Fish1;
else ExtBuffer0=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
Value1=Value;
Fish1=ExtBuffer0;
if(ExtBuffer0<0){
ExtBuffer1=1;
}
if(ExtBuffer0>0){
ExtBuffer2=1;
}
}
return(0);
}