Помогите разобраться с проверкой по "Всем тикам (на основе всех наименьших доступных периодов) "

 

Добрый день.

Есть советник, работающий на таймфрейме Daily

Решил протестировать его не по ценам открытия , а по всем тикам. Получил  совсем несуразные результаты. Начал анализировать - советник стал открывать позиции  в любое время, а у меня должен только в начале дня, то есть стоит условие:  if ( curhour == 0) 

curhour вычисляется  :  curhour=TimeHour(Time[0]);

Подскажите пож-ста  почему так происходит  ?

 
Alex406:   Добрый день.  Есть советник, работающий на таймфрейме Daily

Решил протестировать его не по ценам открытия , а по всем тикам. Получил  совсем несуразные результаты. Начал анализировать - советник стал открывать позиции  в любое время, а у меня должен только в начале дня, то есть стоит условие:  if ( curhour == 0)  curhour вычисляется  :  curhour=TimeHour(Time[0]);

Подскажите пож-ста  почему так происходит  ?

Time[0] - это время открытия нулевого бара.    TimeHour(Time[0]);  - это час, в который открылся нулевой бар. Дневной бар открывается в полночь, Час=0. Ваше условие всегда выполняется. Правильно рассуждаю?

 
На всякий случай написал скрипт. Бросаю на дневной график - печатает ноль = нуль = 0
void OnStart()
{
   Alert(TimeHour(Time[0]));
} 
 
Alex406:

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


Попробуйте исправить на сравнение времени вначале дня

if(iTime(NULL,1,0)==iTime(NULL,1440,0)) {curhour=iTime(NULL,1,0);} else curhour=0;

if(curhour==iTime(NULL,1,0)) { 
//то работаем, условия для открытия
}

Т.е. сигнал будет действителен только 1-ну минуту в начале торгового дня

Если надо 1 час для получения сигнала и т.д. то так:

if(iTime(NULL,60,0)==iTime(NULL,1440,0)) {curhour=iTime(NULL,60,0);} else curhour=0;

if(curhour==iTime(NULL,60,0)) { 
//то работаем, условия для открытия
}
 
FXwin:

Попробуйте исправить на сравнение времени вначале дня

Т.е. сигнал будет действителен только 1-ну минуту в начале торгового дня

Похоже, ему нужен первый час после полуночи - время, когда спред максимальный. Может быть ему нужно срочно слить депозит?
 
STARIJ:
Похоже, ему нужен первый час после полуночи - время, когда спред максимальный. Может быть ему нужно срочно слить депозит?

Ну можно спред отрегулировать и не лезть когда расширяется))

extern int MaxSpread = 12;
//-----------------------+

void start() {       

  if(((Ask-Bid)/Point)<=MaxSpread) { //Работаем
 
FXwin:   Ну можно спред отрегулировать и не лезть когда расширяется))

Вы правы, все можно предусмотреть. Но... Если торговать только первый час но с малым спредом, а в первый час спред большой - торг всегда будет запрещен. Надо проверять    TimeHour(TimeCurrent()) - время сервера  или TimeHour(TimeLocal()) - время компьютера

 

Поясняю.  Советник универсальный, есть параметр  час открытия TimeOpen. В данном случае  рассматриваем таймфрейм  dayly. 

Задаем  TimeOpen=0   и открываем позицию  в случае если  TimeOpen==TimeHour(Time[0]), то есть в начале дня.

При тестировании по ценам открытия советник замечательно работает. Ордера открываются в 0 часов. Решил проверить результаты,

используя режим все тики - и получил ерунду - некоторые ( не все) ордера открываются не в 0 часов, а в произвольное время, например в 11-00.

При работе  этого же советника на других таймфреймах   ордера открываются в нужный мне час, то есть критерий открытия работает верно.

 
Alex406:

Поясняю.  Советник универсальный, есть параметр  час открытия TimeOpen. В данном случае  рассматриваем таймфрейм  dayly. 
Задаем  TimeOpen=0   и открываем позицию  в случае если  TimeOpen==TimeHour(Time[0]), то есть в начале дня.
При тестировании по ценам открытия советник замечательно работает.
некоторые ( не все) ордера открываются не в 0 часов, а в произвольное время, например в 11-00.
При работе  этого же советника на других таймфреймах   ордера открываются в нужный мне час, то есть критерий открытия работает верно.

Если текущий график D1 дневной то TimeHour(Time[0]) будет всегда =0 (Time[0]) это бар D1)

по цене открытия это в 00 что то открылось и прыгнули на следующую цену открытия следующего дня, а по всем тикам это условие 24 часа работает и т.к. 0 = 00 то сигнал будет задействован в любое время этих 24-х часов, поэтому и открытия в 11-00 и в 16 и в любое время будет т.к. условие совпадает с TimeOpen==TimeHour(Time[0])  это 0 = 00

делайте тогда так:

if(Hour()==TimeOpen){ то работаем