У ДЦ 5 знаков после запятой. Как перенастроить эксперта, чтобы корректно работал?
aleks-tomsk:
У ДЦ 5 знаков после запятой. Как перенастроить эксперта, чтобы корректно работал?
У ДЦ 5 знаков после запятой. Как перенастроить эксперта, чтобы корректно работал?
Правильно написаный эксперт не нуждается в перенастройке. А с неправильными все идивидуально, от просто умножить стоплосс и тейкпрофит на 10, до "перетряски" всего кода.
Исходный код эксперта есть, надеюсь? Вот код с кучей проверок и учетом 4-х и 5-знаков. Выглядит монструозно :)), но я предпочитаю перестраховаться. Не сделана только проверка на разрешение ДЦ выставлять стопы и тейки при открытии ордера, надо доделать
// открывает ордер с проверкой, нормализацией данных и возвратом измененных данных int OpenOrderWithCheck(string symbol, int cmd, double& volume, double& price, int slippage, double &stoploss, double &takeprofit, string comment, int magic, datetime expiration, color arrow_color) { int dig = MarketInfo(symbol, MODE_DIGITS); double minlot = MarketInfo(symbol, MODE_MINLOT); // Минимальный размер лота double lotstep = MarketInfo(symbol, MODE_LOTSTEP); // Шаг изменения размера лота double maxlot = MarketInfo(symbol, MODE_MAXLOT); //Максимальный размер лота int lot = volume/lotstep; // округлили до целого числа шагов изменения лота volume = lot * lotstep; if(volume < minlot) { volume = minlot; Alert("OpenOrder()", "Объем меньше минимального, задаю минимальное значение = ", volume, " лот(а)"); } if(volume > maxlot) { volume = maxlot; Alert("OpenOrder()", "Объем больше максимального, задаю максимальное значение = ", volume, " лот(а)"); } // При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться // только самые последние цены Bid (для продажи) или Ask (для покупки). if(cmd == OP_BUY ) price = MarketInfo(symbol, MODE_ASK); if(cmd == OP_SELL) price = MarketInfo(symbol, MODE_BID); takeprofit = NormalizeDouble(takeprofit, dig); // надо округлять до 4 или 5 знаков после запятой stoploss = NormalizeDouble(stoploss, dig); price = NormalizeDouble(price, dig); int ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color); if(ticket < 0) { string err = GetMyLastError2(); Print("Ошибка открытия ордера, ", err); } else { bool os = OrderSelect(ticket, SELECT_BY_TICKET); if(os == true) price = OrderOpenPrice(); } return (ticket); }
VDev:
Исходный код эксперта есть, надеюсь? Вот код с кучей проверок и учетом 4-х и 5-знаков. Выглядит монструозно :)), но я предпочитаю перестраховаться. Не сделана только проверка на разрешение ДЦ выставлять стопы и тейки при открытии ордера, надо доделать
Спасибо!!! Буду разбираться.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь