Скачать MetaTrader 5

Пробой уровня. Поиск количества свечей при тесте уровня.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужен программист? Cервис Фриланс найдет его!
Sergey Lapshov
358
Sergey Lapshov 2016.02.26 16:02 

Коллеги,

как узнать, сколько раз часовые свечки тестили уровень ?

Пример тесте уровня и его "пробой"

тест уровня

forexman77
2119
forexman77 2016.02.26 16:13  
Sergey Lapshov:

Коллеги,

как узнать, сколько раз часовые свечки тестили уровень ?

Пример тесте уровня и его "пробой"


Для начала надо узнать, как определять уровень.
Sergey Lapshov
358
Sergey Lapshov 2016.02.26 16:15  
forexman77:
Для начала надо узнать, как определять уровень.

уровень может быть любой. например,

double MaxPrice=NormalizeDouble(iHigh(Symbol(),TimeCandle,1)+Delta*Point,Digits);

forexman77
2119
forexman77 2016.02.26 16:17  
Sergey Lapshov:

уровень может быть любой. например,

double MaxPrice=NormalizeDouble(iHigh(Symbol(),TimeCandle,1)+Delta*Point,Digits);

Как понял по картинке входим после второго касания растущими свечами?
Sergey Lapshov
358
Sergey Lapshov 2016.02.26 16:23  
forexman77:
Как понял по картинке входим после второго касания растущими свечами?

да, всё верно

forexman77
2119
forexman77 2016.02.26 17:10  
Sergey Lapshov:

да, всё верно

Примерно так:

extern int bar=50;//число баров для поиска
extern int I=5;  //индекс где произошло любое касание уровня больше или равен I
extern int b1=5;//кол-во баров для поиска первой растущей и пересекающей "MaxPrice" свечи начиная от index
////////////////////////////////////////////////////////////////////////////////////////////////////
int tiket=0;
int index=0;
double MaxPrice=NormalizeDouble(iHigh(Symbol(),TimeCandle,1)+Delta*Point,Digits);
if (Close[0] > Open[0] && Close[0] > MaxPrice)
{
for (int x=1;x<=bar;x++)
{
if (High[x] > MaxPrice){index=x;break;}//получили индекс на котором было касание уровня
}
if (index >= I)
{
for (int y=index;y<=index+b1;y++)//ищем в диапазоне баров растущий бар, который пересекает уровень первый раз
{
if (Close[y] > Open[y] && Close[y] > MaxPrice){tiket=1;break;}
}
}
}
if (tiket==1)
{
//Ваш код
}
forexman77
2119
forexman77 2016.02.26 17:14  

Придумаете, как лучше находить напишите. 

А вот так можно посчитать все свечи в заданном диапазоне, которые пересекают уровень

extern int bar=50;//число баров для поиска
extern int T  =7;//Кол-во свечей пересекающих уровень
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int k=0;
double MaxPrice=NormalizeDouble(iHigh(Symbol(),TimeCandle,1)+Delta*Point,Digits);
if (Close[0] > Open[0] && Close[0] > MaxPrice)
{
for (int x=1;x<=bar;x++)
{
if (High[x] > MaxPrice && Low[x] < MaxPrice){k=k+1;}//счетчик количества свечей пересекающих уровень
}
}
if (k>=T)
{
//Ваш код
}
Sergey Lapshov
358
Sergey Lapshov 2016.02.27 00:20  
forexman77:

Придумаете, как лучше находить напишите. 

А вот так можно посчитать все свечи в заданном диапазоне, которые пересекают уровень

спасибо за помощь.. к сожалению, не удалось "прикрутить" функцию к своему советнику и проверить работоспособность. 

число баров для поиска нужно считать от начала новой торговой сессии (H1) или от начала торговой недели (H4)

forexman77
2119
forexman77 2016.02.27 08:41  
Sergey Lapshov:

спасибо за помощь.. к сожалению, не удалось "прикрутить" функцию к своему советнику и проверить работоспособность. 

число баров для поиска нужно считать от начала новой торговой сессии (H1) или от начала торговой недели (H4)

Вот так можно считать с начала дня:

extern int T  =7;//Кол-во свечей пересекающих уровень
////////////////////////////////////////////////////////////////////////////////
int k=0;
double MaxPrice=NormalizeDouble(iHigh(Symbol(),TimeCandle,1)+Delta*Point,Digits);
datetime TIME=iTime(NULL,PERIOD_D1,0); 
int      bar =iBarShift(NULL,0,TIME); 
if (Close[0] > Open[0] && Close[0] > MaxPrice && Time[1] > TIME)
{
for (int x=1;x<=bar;x++)
{
if (High[x] > MaxPrice && Low[x] < MaxPrice){k=k+1;}//счетчик количества свечей пересекающих уровень
}
}
if (k>=T)
{
//Ваш код
}
Youri Tarshecki
3654
Youri Tarshecki 2016.02.28 14:57  

Посчитать-то не проблемма. На самом деле проблема  -а ЧТО ДЕЛАТЬ когда уровень явно многократно потроган и что-то назревает.

У меня пока тестятся два подхода -

1. Ничего не делать, т.е. просто блокировать отскок.

2. Напортив, уменьшать паузы и масштаб крайностей для отскоков с тем, что последний микроотскок совпадет по направлению с пробоем.

 

Интересно, но ни один пока не получил явного преимущества в тестах. 

Igor Volodin
3797
Igor Volodin 2016.02.29 01:11  
Youri Tarshecki:

Посчитать-то не проблемма. На самом деле проблема  -а ЧТО ДЕЛАТЬ когда уровень явно многократно потроган и что-то назревает. 

Вы как будто кашу из топора варите )). Вам носят ингредиенты, а вы знай помешиваете
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий