Pioner_rus Опубликовано 2 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 февраля, 2016 Точно, лонговым должен быть! :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриб Опубликовано 4 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2016 Подскажите как мне сложить ордера buy и buystop ?Что не так в моем коде?int BuyCount(){ int count = 0; for (int buy = OrdersTotal()-1; buy>=0; buy--) { if(OrderSelect(buy,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber == Magic && OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) count++; } } return(count);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 4 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2016 Подскажите как мне сложить ордера buy и buystop ?Что не так в моем коде?int BuyCount(){ int count = 0; for (int buy = OrdersTotal()-1; buy>=0; buy--) { if(OrderSelect(buy,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber == Magic && OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) count++; } } return(count);} Вся суть в скобках:if (OrderSymbol() == Symbol() && OrderMagicNumber == Magic && (OrderType() == OP_BUY || OrderType() == OP_BUYSTOP)) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2016 клоуз нулевого бара(текущего) конечно же будет равна NULLТут не понял ? :-/ когда там NULL бывает?Гриб на скобки обрати внимание:if (OrderSymbol() == Symbol() && OrderMagicNumber == Magic && (OrderType() == OP_BUY || OrderType == OP_BUYSTOP)) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриб Опубликовано 4 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 февраля, 2016 Все спасибо скобку не заметил Добавлено: 05-02-2016 18:55:09Подскажите как задать date expiration time ордера - пятница 22.00? Изменено 5 февраля, 2016 пользователем Гриб Ссылка на сообщение Поделиться на другие сайты More sharing options...
M1ckey M0u5e Опубликовано 5 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2016 Всем привет! Кто знает, почему не корректно работают циклы в тестере? И for и while, для нахождения минимальной или максимальной цены за n баров? Подобный советник писали во втором уроке, на реальном графике работает вроде как надо, в тестере - тупит, показывает минимум или максимум но точно не за указанные 10 (например) баров, а гораздо больше, значения экстремумов почти не меняются. Запарился уже :(( Может есть другой способ посчитать (я пока в программировании не особо шарю)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 5 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 февраля, 2016 M1ckey M0u5e, в учебнике по MQL есть изящный код://+------------------------------------------------------------------+extern int Quant_Bars =19; // Количество баров // Определяем Макс и Мин цены int i; //Номер бара double Maximum=Bid; //Максимальная цена double Minimum=Bid; //Минимальная цена for(i=0; i { if(High>Maximum) Maximum=High; if(Low Minimum=Low; } Alert("За последние ", Quant_Bars, " баров Мах = ",Maximum,", Мin = ", Minimum); Изменено 5 февраля, 2016 пользователем Sergey Forex 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 февраля, 2016 для мах/мин всегда использую встроенные МКЛ функции типа: iHighest ( NULL, 0, MODE_HIGH, BarCount, 0 ) ; 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 6 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 февраля, 2016 Парни, а функция StringFind() регистр искомой подстроки учитывает? Что-то в справке об этом ничего нету. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dremuchi Опубликовано 7 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 февраля, 2016 Всем привет. Учусь писать советники. Нужна помощь в довольно простой ситуации: закрытие последнего ордера при откате цены к уровню открытия предыдущего. Буду благодарен за помощь. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 JR не проверял, но всегда можно перед сравнением строк приводить их к верхнему регистру.Dremuchi попробуйте ставить СЛ следующего ордера на цену открытия предыдущего - чтоб не париться с решением. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 0ll Подскажите, пожалуйста такой вопрос - у Вас при написании советника по ТС Ва-Банк, вроде была как-то проблема "несвоевременной подкачки котировок другого таймфрейма или другой пары", из-за чего сова некорректно отрабатывала. У меня похоже таже проблема, подскажите как грамотно справиться с этим вопросом ? Изменено 8 февраля, 2016 пользователем AndreyGold Ссылка на сообщение Поделиться на другие сайты More sharing options...
radonic Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 Добрый день!Знающие люди, посмотрите пожалуйста скриптик..., все работает кроме ошибки нехватки средств (если средств не хватает, должна выходить ошибка - ошибки нет, просто не открывает ордер) тем самым не очень понятно, по какой причине не открывает.Всем заранее спасибо! VisualOpenOrderWithMM.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 В этом скрипте очень кривой расчёт лота. неужели нет другого скрипта? их-же валом везде. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 AndreyGold в мт4 из-за экономии ресурсов этот момент очень кривой, решения есть,но не простые и я ими не пользовался - просто интересовался. мультивалютные вещи желательно на мт5 делать. кстати в сове "Ва-банк" проблем нет - она моновалютная, проблема была в скрипте - поэтому его запускать надо 2 раза... Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 0ll, уже проверил - влияет, StringFind() регистрозависимая функция, так что будьте внимательны или используйте как сказал Oll приведения к одному регистру аргументов. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
radonic Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 Удобнее этого скрипта я пока не встречал. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 ДержиНа самом деле он выдавал ошибку в логах. я вместо принта поставил алерт. VisualOpenOrderWithMM.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
radonic Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 dermitay, спасибо огромное, работает отлично ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 AndreyGold вспомнил - был косяк с обращением к функциям с другого ТФ типа: iClose(NULL, PERIOD_D1, 1);где PERIOD_? отличается от текущего. Ошибка была не постоянная - то есть, то нет - геморрой... Вылечил тупым переписыванием кода под текущий ТФ. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриб Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 Подскажите что не так в моем коде закрытия по времениextern int HourStop = 22......................................................if(DayOfWeek() == 5 && TimeHour(TimeCurrent()) == HourStop && OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES) && OrderType() == OP_BUY && OrderMagicNumber()==Magic) { if(OrderClose(ticket,Lots,Bid,5,Green)) Print("Ошибка закрытия ордера на покупку!"); }//------------Удаление отложки--------------if(DayOfWeek() == 5 && TimeHour(TimeCurrent()) == HourStop) { if(OrderDelete(OrderTicket(),Green)) Print("Ошибка закрытия ордера BuyStop"); Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 Гриб, у вас ошибок так много что... лень расписывать всё. вы умудрились в слове из 4 букв сделать 10 ошибок :d >:d1. ордера перебираются в цикле2. ордера выбираются в цикле, причем у OrderSelect есть два разных типа перебора(ну на самом деле 4 если быть более точным), вы выбрали тип SELECT_BY_POS - это метод перебора по номеру ордера в списке терминала, то есть по сути по i-тому номеру в цикле, вы же зачем-то применяете этот метод используете OrderTicket() - метод совсем другой(SELECT_BY_TICKET)3. если у вас закроется оредр - то после этого в логах будет прописана ошибка - вы же сами так и написали:"если ордер закрылся - то написать в логах"ошибка закрытия...""Далее про отложку, а как вы собсно узнаете какой тикет у текущего ордера? вы переключатель OrderSelect оставили в некорректном блоке работы с активными ордерами, и теперь этот же ордер хотите опять удалить как отложный?Вобщем... Должно это выглдятеть приблизительно так:extern int HourStop = 22......................................................if(DayOfWeek() == 5 && TimeHour(TimeCurrent()) == HourStop) for (int i=OrdersTotal()-1; i>=0; i--) // главный цикл перебора всех активных ордеров{ if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderMagicNumber()!=Magic) continue; if (OrderType() == OP_BUY ) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,5,Green)) Print("Ошибка закрытия ордера на покупку!"); } if (OrderType() == OP_SELL ) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,5,Green)) Print("Ошибка закрытия ордера на продажу!"); } if (OrderType() > 1) // тип ордеров можно задавать не только по типу OP_BUY но еще и цифрами, читай документацию if ( !OrderDelete(OrderTicket()) Print("Ошибка удаления отложенного ордера(бай/селл/стоп/лимит)!");}я не стал заморачиваться над выводимыми сообщениями, надеюсь мысль ясна.прим:1. в OrderSelect необязательно всегда прописывать MODE_TRADES, для OrderSelect() по типу SELECT_BY_POS всегда по умолчанию подставляется MODE_TRADES если не выбрано иное(MODE_HISTORY) 2. чтобы не плодить сущности обычно цену закрытия(Bid/Ask ) перед блоком закрытия объявляют в дабловую переменную по типу ордера. и далее удаление идёт одной строкой с передачей в цену закрытия этой переменной.3. Когда ты научишься писать мартины с переменным лотом то лучше не заморачиваться на вычислением какой там сейчас по счету лот у этого закрываемого ордера, лучше взять системную OrderLots() и вобще не париться.4. Slippage все-таки лучше брать хотя бы больше 10 а лучше еще больше, так как рынок он живой а пинг до сервера не всегда хорош - при малом значении можно нарваться на реквоты и последующее незакрытие ордера.5. перебирать ордера ВСЕГДА нужно с конца. запомни это как заповедь и беспрекословно выполняй так и никак иначе. при переборе с нуля ты можешь нарваться на пропуск ордеров если в момент перебора один/более ордеров будут удалены(неважно, кодом или по внешним причинам) Изменено 8 февраля, 2016 пользователем dermitay 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 AndreyGold вспомнил - был косяк с обращением к функциям с другого ТФ типа: iClose(NULL, PERIOD_D1, 1);где PERIOD_? отличается от текущего. Ошибка была не постоянная - то есть, то нет - геморрой... Вылечил тупым переписыванием кода под текущий ТФ. Вот и у меня подозрение что происходит такая же дребедень. А как грамотно переписать код на текущий ТФ, не могу придумать. Получается нужна цена начала недели, котрую надо брать не на недельном ТФ. При этом если например привязываться к концу или к началу недели(сканировать на предмет понедельника или пятницы) на текущем ТФ, то как обрабатывать конец года - там периодически целые дни торгов выпадают, да и торговля не всегда в одно и тоже время из-за этого же перерыва начинается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 8 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 февраля, 2016 AndreyGold вспомнил - был косяк с обращением к функциям с другого ТФ типа: iClose(NULL, PERIOD_D1, 1);где PERIOD_? отличается от текущего. Ошибка была не постоянная - то есть, то нет - геморрой... Вылечил тупым переписыванием кода под текущий ТФ. Вот и у меня подозрение что происходит такая же дребедень. А как грамотно переписать код на текущий ТФ, не могу придумать. Получается нужна цена начала недели, котрую надо брать не на недельном ТФ. При этом если например привязываться к концу или к началу недели(сканировать на предмет понедельника или пятницы) на текущем ТФ, то как обрабатывать конец года - там периодически целые дни торгов выпадают, да и торговля не всегда в одно и тоже время из-за этого же перерыва начинается. хм... можно отталкиваться от времени... текущий день недели(DayOfWeek или как его там), и в iOpen пихаешь нужный сдвиг и узнаешь цену открытия бара D1. а можно и ваще сразу по нулевому бару по W обратится.в чем прелесть - данные берутся напрямую с сервера брокера а не из истории мт4 насколько я знаю.минус- данный подход(по-крайней мере так было очень давно в дремучие времена) - могут быть глюки в тестерекстати, у метаквотовцев ошибка в описании :d :))https://docs.mql4.com/ru/series/iopenВозвращаемое значениеЗначение минимальной цены бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Изменено 8 февраля, 2016 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 9 февраля, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 февраля, 2016 dermitayПо поводу : "хм... можно отталкиваться от времени... текущий день недели(DayOfWeek или как его там), и в iOpen пихаешь нужный сдвиг и узнаешь цену открытия бара D1. а можно и ваще сразу по нулевому бару по W обратится."В том то и дело, что при торговле например на золоте из-за периодической отмены/переноса торгов схема с вычислением сдвига, будет сбоить.А в данный момент сбоит обращение по нулевому бару по W (по нерабочему ТФ). Такое впечатление, что нечасто ~ где-то в 5% случаев, на моментобращения к W такого бара просто нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти