Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1477

 
MakarFX:

Все равно, проверяет на каждом тике

и расчет минимума сбивается...откат на два бара назад

Расчет минимума у меня сбивался как у тебя на рисунке. Но я потом добавил переменную LoY1 и она это сбивание прекратила. В результате все ордера открываются так же ( по времени, количеству и цене) как в моем  первоначальном коде( то есть так как мне нужно). Код косячил у меня в другом месте .... но я это место так же подправил.


double LoU,LoY1,Pr;
int x;
void OnTick()
{
if (Low[1]>Low[2]&&Time[2]>x&&Low[2]<LoY1)
{
LoU=Low[2];
LoY1=Low[2];
}
//**************************************************************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
LoY1=Bid;
x=TimeCurrent();
}
}

А еще можно от LoU ставить отложенный ордер через 30 п. вместо того что бы открывать по рынку.  И тогда не нужно будет проверять Bid на каждом тике. Но в случае с отложенным ордером нужно будет каждый раз когда будет меняться  LoU , удалять старый отложенник и выставлять новый, или менять параметры действующего отложенника не удаляя его. И все это нужно будет делать намного реже чем проверять на каждом тике  Bid . 

Скажи какой вариант применительно к моему случаю  меньше всего требует времени на исполнение кода?

1. Проверять на каждом тике не отстоит ли  Bid на 30 п от  LoU 

2. С каждым изменением  LoU удалять старый отложеник и выставлять новый

3. С каждым изменением  LoU менять параметры действующего отложеника

Спасибо за помощь.

 
ANDREY:

Расчет минимума у меня сбивался как у тебя на рисунке. Но я потом добавил переменную LoY1 и она это сбивание прекратила. 

есть ведь стандартные функции iLowest и iHighest.

 
ANDREY:

Расчет минимума у меня сбивался как у тебя на рисунке. Но я потом добавил переменную LoY1 и она это сбивание прекратила. В результате все ордера открываются так же ( по времени, количеству и цене) как в моем  первоначальном коде( то есть так как мне нужно). Код косячил у меня в другом месте .... но я это место так же подправил.


А еще можно от LoU ставить отложенный ордер через 30 п. вместо того что бы открывать по рынку.  И тогда не нужно будет проверять Bid на каждом тике. Но в случае с отложенным ордером нужно будет каждый раз когда будет меняться  LoU , удалять старый отложенник и выставлять новый, или менять параметры действующего отложенника не удаляя его. И все это нужно будет делать намного реже чем проверять на каждом тике  Bid . 

Скажи какой вариант применительно к моему случаю  меньше всего требует времени на исполнение кода?

1. Проверять на каждом тике не отстоит ли  Bid на 30 п от  LoU 

2. С каждым изменением  LoU удалять старый отложеник и выставлять новый

3. С каждым изменением  LoU менять параметры действующего отложеника

Спасибо за помощь.

1) х это не int, это datetime (на будущее пригодится)

2)в твоем первоначальном коде не было отложенных ордеров

3) сейчас твой код на каждом тике делает больше операций

Проверь личку

 
Taras Slobodyanik:

есть ведь стандартные функции iLowest и iHighest.

Не подходит... число элементов таймсерии не постоянно
 
MakarFX:
Не подходит... число элементов таймсерии не постоянно

эээ... а это разве мешает находить хай/лоу?

 
Taras Slobodyanik:

эээ... а это разве мешает находить хай/лоу?

функции iLowest и iHighest подразумевают поиск среди определенного количества баров(число элементов таймсерии)

в данном случае это число неизвестно, каждый раз меняется

 
MakarFX:

1) х это не int, это datetime (на будущее пригодится)

2)в твоем первоначальном коде не было отложенных ордеров

3) сейчас твой код на каждом тике делает больше операций

Проверь личку

Это мой старый код 

Это мой новый код за тот же временной период что и старый

Количество операций на тике меня волнует намного меньше , чем время затраченное на это количество. А в новом коде времени затрачено на 25% меньше....если я не ошибаюсь.

Спасибо за помощь.

 
Aleksei Stepanenko:
Здесь есть тонкость. Сначала устанавливаем размер, а потом сбрасыванием в ноль отпускаем фиксацию, при этом размер не меняется. По-другому никак.
Спасибо большое!
 
MakarFX:

Все равно, проверяет на каждом тике

и расчет минимума сбивается...откат на два бара назад

Внизу мой первоначальный код без твоих добавок

Внизу с твоими последними усовершенствованиями



Может быть  if(TimeSeconds(TimeCurrent())==0) нужно применять только на тех участках где не открываются ордера, а где ищется очередной минимум?

Если я не ошибаюсь благодаря твоей функции мой код начала исполняться только в начале каждой минутной свечи, поэтому и открывает ордера не корректно.


Спасибо за помощь.

 
ANDREY:

Внизу мой первоначальный код без твоих добавок

Внизу с твоими последними усовершенствованиями



Может быть  if(TimeSeconds(TimeCurrent())==0) нужно применять только на тех участках где не открываются ордера, а где ищется очередной минимум?

Если я не ошибаюсь благодаря твоей функции мой код начала исполняться только в начале каждой минутной свечи, поэтому и открывает ордера не корректно.


Спасибо за помощь.

Да
Причина обращения: