datetime knw; int start(){ if (newb()==false) return(0); } //+----------------------------------------------------------------------------+ //| Открытие только на новом баре | //+----------------------------------------------------------------------------+ bool newb() { if (Time[0]==knw) return(false); knw=Time[0]; return(true); }Я бы сделал бы вот так
solandr писал (а):
datetime knw; int start(){ if (newb()==false) return(0); } //+----------------------------------------------------------------------------+ //| Открытие только на новом баре | //+----------------------------------------------------------------------------+ bool newb() { if (Time[0]==knw) return(false); knw=Time[0]; return(true); }Я бы сделал бы вот так
попробывал, результат не изменился.
HIDDEN:
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
int start(){ if (newb()==false) return(0); } //+----------------------------------------------------------------------------+ //| Открытие только на новом баре | //+----------------------------------------------------------------------------+ bool newb() { static int knw; if (Time[0]==knw) return(false); knw=Time[0]; return(true); }
Но как в тестере так и на демо счете, нет да нет, а проскальзовают
сделки открываемые не на начальном баре.
В чем я ошибся, где слабое звено в этом коде.
А что значит не на начальном баре? То есть пришёл тик нового бара и, по идее, вы должны на нём открыться, но в реальности (как на демо таки и в тестере) открываетесь не на первом тике нового бара? Возможно что пока вы делаете какие то расчёты то приходят новые тики и надо сделать update чтобы массивы с котировками для эксперта обновились. Но такая проблема может быть на демо но не в тестере, я думаю.
elritmo писал (а):
А что значит не на начальном баре? То есть пришёл тик нового бара и, по идее, вы должны на нём открыться, но в реальности (как на демо таки и в тестере) открываетесь не на первом тике нового бара? Возможно что пока вы делаете какие то расчёты то приходят новые тики и надо сделать update чтобы массивы с котировками для эксперта обновились. Но такая проблема может быть на демо но не в тестере, я думаю.
HIDDEN писал (а):
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
int start(){ if (newb()==false) return(0); } //+----------------------------------------------------------------------------+ //| Открытие только на новом баре | //+----------------------------------------------------------------------------+ bool newb() { static int knw; if (Time[0]==knw) return(false); knw=Time[0]; return(true); }
Но как в тестере так и на демо счете, нет да нет, а проскальзовают
сделки открываемые не на начальном баре.
В чем я ошибся, где слабое звено в этом коде.
А что значит не на начальном баре? То есть пришёл тик нового бара и, по идее, вы должны на нём открыться, но в реальности (как на демо таки и в тестере) открываетесь не на первом тике нового бара? Возможно что пока вы делаете какие то расчёты то приходят новые тики и надо сделать update чтобы массивы с котировками для эксперта обновились. Но такая проблема может быть на демо но не в тестере, я думаю.
Есть опен бара. все расчёты делаются по приходу данного тика. Посчитали и если все устраивает вошли, если нет ждем нового опен бара и делаем расчёт.
В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
С приходом 2-го тика ничего пересчитываться не должно (на опен баре), так как это уже не опен бара, а 2-й тик. И сколько бы расчёт не велся это никак не должно влиять на пересчеты.
datetime TimeOpen; bool StartProgram() { if(TimeOpen != Time[0]) { TimeOpen = Time[0]; return(true); }else return(false); } void start() { if(StartProgram()) // --- код на цене открытия { Print("Новый бар"); } }
HIDDEN:
В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
Как ты определяешь, что это не первый тик бара?В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
Никто же не давал гарантий, что бар откроется в 00 секунд? ;)
HIDDEN:
Есть опен бара. все расчёты делаются по приходу данного тика. Посчитали и если все устраивает вошли, если нет ждем нового опен бара и делаем расчёт.
В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
С приходом 2-го тика ничего пересчитываться не должно (на опен баре), так как это уже не опен бара, а 2-й тик. И сколько бы расчёт не велся это никак не должно влиять на пересчеты.
нет я имею ввиду что вы вошли в функцию start делаете там какие то проверки и если новый тик нового бара то даже какие то вычисления и сравнения и за это время уже может прийти новый тик или даже несколько и значение Bid будет уже не актуальным. Для этого перед окрытием новой позиции рекомендуется сделать UpdateRates или как там эта функция называется. А когда вы открываете позицию до у вас есть видимо допустимое отклонение от запрашиваемой цены и если вы в него укладываетесь то открытья можете уже не на пришедшем тике а на каком то новом значение цены которого отличается от цены на первом тике бара на допустимую величину. Но это думаю не актуально для тестера. А у вас и там тоже проблемы наблюдаются
elritmo:
А что значит не на начальном баре? То есть пришёл тик нового бара и, по идее, вы должны на нём открыться, но в реальности (как на демо таки и в тестере) открываетесь не на первом тике нового бара? Возможно что пока вы делаете какие то расчёты то приходят новые тики и надо сделать update чтобы массивы с котировками для эксперта обновились. Но такая проблема может быть на демо но не в тестере, я думаю.
HIDDEN:
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
При разработке эксперта хочу что-бы открывались сделки только на открытии свечи.
Для этого использую следующий код:
int start(){ if (newb()==false) return(0); } //+----------------------------------------------------------------------------+ //| Открытие только на новом баре | //+----------------------------------------------------------------------------+ bool newb() { static int knw; if (Time[0]==knw) return(false); knw=Time[0]; return(true); }
Но как в тестере так и на демо счете, нет да нет, а проскальзовают сделки открываемые не на начальном баре.
В чем я ошибся, где слабое звено в этом коде.
А что значит не на начальном баре? То есть пришёл тик нового бара и, по идее, вы должны на нём открыться, но в реальности (как на демо таки и в тестере) открываетесь не на первом тике нового бара? Возможно что пока вы делаете какие то расчёты то приходят новые тики и надо сделать update чтобы массивы с котировками для эксперта обновились. Но такая проблема может быть на демо но не в тестере, я думаю.
Есть опен бара. все расчёты делаются по приходу данного тика. Посчитали и если все устраивает вошли, если нет ждем нового опен бара и делаем расчёт.
В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
С приходом 2-го тика ничего пересчитываться не должно (на опен баре), так как это уже не опен бара, а 2-й тик. И сколько бы расчёт не велся это никак не должно влиять на пересчеты.
komposter писал (а):
Никто же не давал гарантий, что бар откроется в 00 секунд? ;)
HIDDEN писал (а):
В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
Как ты определяешь, что это не первый тик бара?В моём случае получается иногда, что можем войти и не на опен бара, а где-то в его середине.
Никто же не давал гарантий, что бар откроется в 00 секунд? ;)
Так Time[0] как раз возвращает время открытия бара, а когда уж от нтам открылся не суть вожна в моём случае. просто если есть новое время отличное от старого, то делаем расчет.
Если расчет даёт сигнал к открытию ордера, то делаем расчеты тейка и стопа и входим по рынку.
HIDDEN:
Так Time[0] как раз возвращает время открытия бара, а когда уж от нтам открылся не суть вожна в моём случае. просто если есть новое время отличное от старого, то делаем расчет.
Если расчет даёт сигнал к открытию ордера, то делаем расчеты тейка и стопа и входим по рынку.
Стоп. Проблема в чем - позиция открывается не на первом тике бара,
или открывается 2 позиции на одном баре?Так Time[0] как раз возвращает время открытия бара, а когда уж от нтам открылся не суть вожна в моём случае. просто если есть новое время отличное от старого, то делаем расчет.
Если расчет даёт сигнал к открытию ордера, то делаем расчеты тейка и стопа и входим по рынку.
Если первое, то смотри предыдущий пост - как проверяется, что тик не первый?
А если второе, то не верю =) Только если knv обнуляется где-то посреди start-а.
komposter писал (а):
Если первое, то смотри предыдущий пост - как проверяется, что тик не первый?
А если второе, то не верю =) Только если knv обнуляется где-то посреди start-а.
HIDDEN писал (а):
Так Time[0] как раз возвращает время открытия бара, а когда уж от нтам открылся не суть вожна в моём случае. просто если есть новое время отличное от старого, то делаем расчет.
Если расчет даёт сигнал к открытию ордера, то делаем расчеты тейка и стопа и входим по рынку.
Стоп. Проблема в чем - позиция открывается не на первом тике бара,
или открывается 2 позиции на одном баре?Так Time[0] как раз возвращает время открытия бара, а когда уж от нтам открылся не суть вожна в моём случае. просто если есть новое время отличное от старого, то делаем расчет.
Если расчет даёт сигнал к открытию ордера, то делаем расчеты тейка и стопа и входим по рынку.
Если первое, то смотри предыдущий пост - как проверяется, что тик не первый?
А если второе, то не верю =) Только если knv обнуляется где-то посреди start-а.
Вечерком порою в коде, или для примера напишу приметивный советник который показывает данную ситуацию.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для этого использую следующий код:
Но как в тестере так и на демо счете, нет да нет, а проскальзовают сделки открываемые не на начальном баре.
В чем я ошибся, где слабое звено в этом коде.