Заметки на полях. Как программно определить круглый уровень

22 февраля 2016, 12:41
Almat Kaldybay
0
114

1) Определяем количество знаков после запятой в цене через функцию маркет инфо: 

 int Digit=(int)MarketInfo(Symbol(),MODE_DIGITS);

2) ввожу переменную, скажем f, которая будет хранить число, умножив которое на цену мы получим целое значение —  в зависимости от количества знаков после запятой: 

if (Digit==5)

{

f=100000;

}

if (Digit==4)

{

f=10000;

}

if (Digit==3)

{

f=1000;

}

if (Digit==2)

{

f=100;

}

if (Digit==1)

{

f=10;

3)ввожу переменную, скажем g, которая будет хранить количество пунктов (ну или пипсов) от одного круглого уровня до другого:

g=1000; //тысяча пипсов или сто пунктов 

4)с помощью функции MathMod()  я могу определить вещественный остаток от деления некоего значения на какое-то значение. То есть, я могу понять где находится цена относительно двух ближайших круглых уровней. Для этого мне нужно ввести еще одну переменную, которая будет хранить значение делителя. Для EURUSD, например, значение делителя будет 0,01. Почему? Потому что поделив, например, цену 1,10022 (текущая цена Bid по EURUSD) на 0,01 получаем значение 110,022, вещественный остаток которого 0,00022. А говоря уже языком трейдинга, а не математики — 22 пункта (или пипса). 

5)А дальше просто:

double h=MathMod(Bid, 0.01);//определил вещественный остаток

double p1=h*f;//привел вещественный остаток в целое и получил количество пунктов (пипсов)

double p2=g-p1; //определил сколько пунктов до следующего уровня 

То есть, программа теперь сможет понять, где цена находится в текущий момент относительно круглых уровней и, если, например, до круглого уровня расстояние небольшое можно пропустить сигнал! 

P.S. делитель в коде у себя я также определяю в зависимости от Digit:

//+------------------------------------------------------------------+
//1.3.1 Определение общих переменных и значений
//+------------------------------------------------------------------+
int Digit=(int)MarketInfo(Symbol(),MODE_DIGITS);
int f;
double D;
if (Digit==5)
{
f=100000;
D=0.01;
}
if (Digit==4)
{
f=10000;
D=0.1;
}
if (Digit==3)
{
f=1000;
D=1;
}
if (Digit==2)
{
f=100;
D=10;
}
if (Digit==1)
{
f=10;
D=100;
}
int g=1000;
//+------------------------------------------------------------------+
//1.3.1 Конец. Определение общих переменных и значений
//+------------------------------------------------------------------+

 

Поделитесь с друзьями: