Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Они уже зарабатывают с помощью сервиса Фриланс. Зарабатывай и ты!
Павел
34
Павел 2012.02.24 18:41 

Господа! Прошу о помощи!

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

if (OrderSelect(i-1,SELECT_BY_POS)==true)

{ ...

int x=(OrderClosePrice()/OrderClosePrice())*2;

if (x-1>=iBarShift(Symbol(),0,OrderCloseTime()))

{y=false;}

... }

Все было бы хорошо, если iBarshift мог возвращать смещение баров не только от OrderOpenTime, но и от OrderCloseTime. А так, получается, что эта схема не работает.

Подскажите, пожалуйста, либо как исправить схему, либо название функции типа iBarShift, только для OrderCloseTime. А еще лучше как запретить советнику торговать на определенном баре :))

Заранее СПАСИБО!!!

Vladyslav Goshkov
1958
Vladyslav Goshkov 2012.02.24 18:50  
Pavlik20:

Господа! Прошу о помощи!

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

if (OrderSelect(i-1,SELECT_BY_POS)==true)

{ ...

int x=(OrderClosePrice()/OrderClosePrice())*2;

if (x-1>=iBarShift(Symbol(),0,OrderCloseTime()))

{y=false;}

... }

Все было бы хорошо, если iBarshift мог возвращать смещение баров не только от OrderOpenTime, но и от OrderCloseTime. А так, получается, что эта схема не работает.

Подскажите, пожалуйста, либо как исправить схему, либо название функции типа iBarShift, только для OrderCloseTime. А еще лучше как запретить советнику торговать на определенном баре :))

Заранее СПАСИБО!!!


Да ему все равно - он работает от любого времени.

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. 
Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости 
от параметра exact, -1 или смещение ближайшего бара.
 

Мысль правильная - берете время закрытия бара и считаете его номер, то есть смещение от нулевого бара. Проверьте остальные расчеты под условным оператором.

Павел
34
Павел 2012.02.24 22:24  
for (int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордеров
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{

datetime CT=OrderCloseTime();

int x=(OrderClosePrice()/OrderClosePrice())*2;

if((x-1)>=iBarShift("EUROUSD",0,CT))

{y=false;} // не разрешаем торговлю

}

Далее я ввел функцию Alert (iBarShift("EUROUSD",0,CT));

Тестер открывает только одну сделку, после нее iBarShift остается равным нулю, соответственно торговать советник не будет. Не понимаю где ошибка...

L_E_O
714
L_E_O 2012.02.24 22:33  

Следующая функция вычисляет время открытия следующего бара в зависимости от текущего времени и от таймфрэйма без использования функций МТ4:

Просто дождитесь этого времени и торгуйте дальше !

datetime NextBar (datetime d, int TF) {
      return((d/TF/60+1)*TF*60);
} 
Павел
34
Павел 2012.02.24 23:19  

Спасибо большое за ответ!

Правда, я не очень понял что Вы подразумеваете под d и TF? Прокомментируете, пожалуйста. Буду Вам очень благодарен!

Но я тут еще на одну красивую версию натолкнулся:

int oldTime;
int init(){
   oldTime = Time[0];
   return(0);
}
int start(){
   if(oldTime != Time[0){
   // first tick of new bar found
   // do something useful
   oldTime = Time[0];
   return(0)

}

Алексей Тарабанов
7220
Алексей Тарабанов 2012.02.24 23:23  
Pavlik20:

Спасибо большое за ответ!

Правда, я не очень понял что Вы подразумеваете под d и TF? Прокомментируете, пожалуйста. Буду Вам очень благодарен!

Но я тут еще на одну красивую версию натолкнулся:

}


А если учебник почитаете, - весь мир в ладони будет.
Павел
34
Павел 2012.02.24 23:34  

Нет, последняя версия, все-таки не совсем то..

Tara, я честно прочел учебник. Но подобного вопроса там не обсуждалось, а чтобы самому сообразить. то пока еще не хватает опыта программирования. Поэтому и спрашиваю на форуме. Мне кажется он для этого и создан.

L_E_O
714
L_E_O 2012.02.25 06:50  
Pavlik20:

Спасибо большое за ответ!

Правда, я не очень понял что Вы подразумеваете под d и TF? Прокомментируете, пожалуйста. Буду Вам очень благодарен!


d - текущее время закрытия ордера

TF - текущий таймфрэйм

Если опять что-то не понятно, пишите ! Поясню ...

Павел
34
Павел 2012.02.25 22:09  
LEOK:


d - текущее время закрытия ордера

TF - текущий таймфрэйм

Если опять что-то не понятно, пишите ! Поясню ...


Спасибо! Теперь все предельно ясно :)
ivasiv.a
6
ivasiv.a 2012.11.04 18:13  
Pavlik20:

Господа! Прошу о помощи!

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

if (OrderSelect(i-1,SELECT_BY_POS)==true)

{ ...

int x=(OrderClosePrice()/OrderClosePrice())*2;

if (x-1>=iBarShift(Symbol(),0,OrderCloseTime()))

{y=false;}

... }

Все было бы хорошо, если iBarshift мог возвращать смещение баров не только от OrderOpenTime, но и от OrderCloseTime. А так, получается, что эта схема не работает.

Подскажите, пожалуйста, либо как исправить схему, либо название функции типа iBarShift, только для OrderCloseTime. А еще лучше как запретить советнику торговать на определенном баре :))

Заранее СПАСИБО!!!


Еще на эту тему - https://forum.mql4.com/ru/19624#713258
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий