Автор: ох
кеш гугла
Сайбер:
ох, сравнил на дневках, все сходится и отображается корректно. Ответьте пожалуйста еще на пару вопросов.
1. Какой период в исходнике использовать на недельных и месячных графиках?
2. Индикатор будет автоматом перерисовываться или необходимо будет делать какие-нибудь манипуляции?
ox:Ответ
1) период = 90 * (1440 / Period()),
для дневок функций Period() возвращает 1440 -> ставим 90
для месяца и недели функций Period()я не знаю, что возвращает,
но по логике
для месяца ставим = 3
для недели ставим = 3*4 = 12
2) Будет сам
29.05.2015 12:43
ox:
Исправлено. Быстрее работает. Не использует MY.High и MY.Low b сохраняется.
Код: Выделить всё
function Initialize()
{
IndicatorName = "LevelMurrey";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("LevelMurrey", DrawAs.Line, Color.Red);
//0 "extremely overshoot [-2/8]";// [-2/8]
AddLevel(0, Color.White, "LevelMurreyDay");
//1 "overshoot [-1/8]";// [-1/8]
AddLevel(0, Color.White, "LevelMurreyDay");
//2 "Ultimate Support - extremely oversold [0/8]";// [0/8]
AddLevel(0, Color.Aqua, "LevelMurreyDay");
//3 "Weak, Stall and Reverse - [1/8]";// [1/8]
AddLevel(0, Color.Yellow, "LevelMurreyDay");
//4 "Pivot, Reverse - major [2/8]";// [2/8]
AddLevel(0, Color.Red, "LevelMurreyDay");
//5 "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
AddLevel(0, Color.Green, "LevelMurreyDay");
//6 "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
AddLevel(0, Color.Blue, "LevelMurreyDay");
//7 "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
AddLevel(0, Color.Green, "LevelMurreyDay");
//8 "Pivot, Reverse - major [6/8]";// [6/8]
AddLevel(0, Color.Red, "LevelMurreyDay");
//9 "Weak, Stall and Reverse - [7/8]";// [7/8]
AddLevel(0, Color.Yellow, "LevelMurreyDay");
//10 "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
AddLevel(0, Color.Aqua, "LevelMurreyDay");
//11 "overshoot [+1/8]";// [+1/8]
AddLevel(0, Color.White, "LevelMurreyDay");
//12 "extremely overshoot [+2/8]";// [+2/8]
AddLevel(0, Color.White, "LevelMurreyDay");
AddGlobalVariable("xMax", Types.Double, 0.0);
AddGlobalVariable("xMin", Types.Double, 0.0);
AddGlobalVariable("Uppers", Types.DoubleList);
AddGlobalVariable("Lowers", Types.DoubleList);
AddParameter("Period", 288, 1.0);
}
function Evaluate()
{
// Murrey Level for Period
// AlfaDirect 2015 // mql source Vladislav Goshkov (VG) // Paper Tim Kruzel
Uppers.Add(Input.High[0]);
Lowers.Add(Input.Low[0]);
if (CurrentIndex < Period)
{
xMax = Input.High[0];
xMin = Input.Low[0];
}
else
{
Uppers.RemoveAt(0);
xMax = Uppers.Max(x => x);
Lowers.RemoveAt(0);
xMin = Lowers.Min(x => x);
}
if (CurrentIndex == MaxIndex)
{
double v2 = xMax;
double v1 = xMin;
//determine fractal.....
double fractal = 0;
if( v2<=250000 && v2>25000 )
fractal=100000;
else
if( v2<=25000 && v2>2500 )
fractal=10000;
else
if( v2<=2500 && v2>250 )
fractal=1000;
else
if( v2<=250 && v2>25 )
fractal=100;
else
if( v2<=25 && v2>12.5 )
fractal=12.5;
else
if( v2<=12.5 && v2>6.25)
fractal=12.5;
else
if( v2<=6.25 && v2>3.125 )
fractal=6.25;
else
if( v2<=3.125 && v2>1.5625 )
fractal=3.125;
else
if( v2<=1.5625 && v2>0.390625 )
fractal=1.5625;
else
if( v2<=0.390625 && v2>0)
fractal=0.1953125;
double range = (v2-v1);
double sum = Math.Floor(Math.Log(fractal/range)/Math.Log(2));
double octave = fractal*(Math.Pow(0.5, sum));
double mn = Math.Floor(v1/octave)*octave;
double mx = 0.0;
if ( (mn+octave)>v2 )
mx = mn+octave;
else
mx = mn+(2*octave);
// calculating xx
//x2
double x2=0;
if( (v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
x2 = mn+(mx-mn)/2;
//x1
double x1=0;
if( (v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
x1=mn+(mx-mn)/2;
//x4
double x4=0;
if( (v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
x4=mn+3*(mx-mn)/4;
//x5
double x5=0;
if( (v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
x5=mx;
//x3
double x3=0;
if( (v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
x3=mn+3*(mx-mn)/4;
//x6
double x6=0;
if( (x1+x2+x3+x4+x5) ==0 )
x6=mx;
double finalH = x1+x2+x3+x4+x5+x6;
// calculating yy
//y1
double y1=0;
if( x1>0 )
y1=mn;
//y2
double y2=0;
if( x2>0 )
y2=mn+(mx-mn)/4;
//y3
double y3=0;
if( x3>0 )
y3=mn+(mx-mn)/4;
//y4
double y4=0;
if( x4>0 )
y4=mn+(mx-mn)/2;
//y5
double y5=0;
if( x5>0 )
y5=mn+(mx-mn)/2;
//y6
double y6=0;
if( (finalH>0) && ((y1+y2+y3+y4+y5)==0) )
y6=mn;
double finalL = y1+y2+y3+y4+y5+y6;
double dmml = (finalH-finalL)/8;
Levels[0].Level = finalL-dmml*2;
Levels[1].Level = finalL-dmml*1;
Levels[2].Level = finalL-dmml*0;
Levels[3].Level = finalL+dmml*1;
Levels[4].Level = finalL+dmml*2;
Levels[5].Level = finalL+dmml*3;
Levels[6].Level = finalL+dmml*4;
Levels[7].Level = finalL+dmml*5;
Levels[8].Level = finalL+dmml*6;
Levels[9].Level = finalL+dmml*7;
Levels[10].Level = finalL+dmml*8;
Levels[11].Level = finalL+dmml*9;
Levels[12].Level = finalL+dmml*10;
}
}