Что такое структура и как она работает , в целом, я понял. Но еще не до конца осмыслил все тонкости
, связанные с ней. Я намного лучше усваиваю новый материал на наглядных примерах. Буду Вам очень признателен если покажете как пишется код нижеприведенного условия на mql5 Открывать ордер при помощи структуры я уже научился
if(Hour()==10)
открыть ордер.
Образец открытия ордера можно не писать.... только запись условия.
Что такое структура и как она работает , в целом, я понял. Но еще не до конца осмыслил все тонкости
, связанные с ней. Я намного лучше усваиваю новый материал на наглядных примерах. Буду Вам очень признателен если покажете как пишется код нижеприведенного условия на mql5 Открывать ордер при помощи структуры я уже научился
if(Hour()==10)
открыть ордер.
Образец открытия ордера можно не писать.... только запись условия.
Всем доброго времени суток! Пытаюсь перейти с mql4 на mql5 . Создал для тестирования простой код открывающий ордера . Советник в тестере ордера открывает . Поместил в начало функции void OnTick() функцию Print().На четверке советник заходил бы в эту функцию на каждом тике и печатал бы ее на каждом тике в Журнале. А на пятерке - ни на одном из тиков Советник в функцию Print() не заходит и ничего не печатает в Журнале. Визуализация и оптимизация на Советнике отключены. Подскажите пожалуйста как нужно изменить код, что бы Print() печаталась в журнале на каждом тике, как в четверке. Заранее благодарен всем кто мне поможет .
Вот мой код
inputint StopLoss=30; // Stop Lossinputint TakeProfit=100; // Take Profitinputdouble Lot=0.1; // Количество лотов для торговлиint A; ////+------------------------------------------------------------------+voidOnTick()
{
Print( "====================================================", TimeCurrent() ) ;
//--- Объявляем структуры, которые будут использоваться для торговлиMqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовif(!SymbolInfoTick(_Symbol,latest_price))
{
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid
mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.type= ORDER_TYPE_SELL; // ордер на продажу
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
}
return;
}
Увеличил депозит в Советнике до 100 000. В результате на каждом тике Print() стала печататься в журнале....Но не открылась ни одна сделка.
А мне нужно что бы и сделки открывались и Print() выводилась.
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Всем доброго времени суток! Пытаюсь перейти с mql4 на mql5 . Создал для тестирования простой код открывающий ордера . Советник в тестере ордера открывает . Поместил в начало функции void OnTick() функцию Print().На четверке советник заходил бы в эту функцию на каждом тике и печатал бы ее на каждом тике в Журнале. А на пятерке - ни на одном из тиков Советник в функцию Print() не заходит и ничего не печатает в Журнале. Визуализация и оптимизация на Советнике отключены. Подскажите пожалуйста как нужно изменить код, что бы Print() печаталась в журнале на каждом тике, как в четверке. Заранее благодарен всем кто мне поможет .
Вот мой код
Увеличил депозит в Советнике до 100 000. В результате на каждом тике Print() стала печататься в журнале....Но не открылась ни одна сделка.
А мне нужно что бы и сделки открывались и Print() выводилась.
Посмотрите в логах что печатает, там на каждом шаге сведения заносятся. Скорее всего что то не так с открытием ордеров и советник не работает.
можно так же протестировать и получение текущих цен, думаю тоже по 100500 раз можно на одном тике использовать, т.к. миллионами раз в секунду будет производительность
единственное, да - чем больше символов в окне обзор рынка, тем больше будет нагружаться сам терминал, ну и соответственно если будете вызывать данные от много разных символов, тогда тоже будут лаги
т.е. если разумно использовать терминал, то ничего не зависнет - в окне обзор рынка штук десять символов, те которые используете
сколько одновременно чартов можно открыть не проверял, но думаю, что если историю ограничить 1000 баров, то скорее всего пару десятков окон чартов без проблем терминал потянет
2020.10.27 06:40:45.348Core 1EURUSD,M1: 111967 ticks, 2880 bars generated. Test passed in 0:00:00.019.
2020.10.27 06:40:45.348 Core 1 270 Mb memory used including 35 Mb of history data, 64 Mb of tick data
2020.10.27 06:40:45.348Core 1log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" written
2020.10.27 06:40:45.371Core 1connection closed
Я тестирую на периоде один день. То есть советник должен открыть 1440 ордеров. Может быть проблема в этом. Может есть какие то ограничения на количество одновременно открытых ордеров. Ведь когда на депозите советника было 10 000 он открывал только 300 ордеров , а остальные пропускал по какой то причине связанной с деньгами(как я понял из записей в журнале). А потом я увеличил депозит Советника до 100 000 и пропускать он уже не имел права. И он вообще перестал открывать ордера.
Но потом я депозит Советника снова уменьшил до 10 000. Но Советник не смотря на это уже ничего не открывает и пишет всегда то что я указал вверху.
Создал другой советник. Загрузил в него тот же код. Депозит 10 000. Все то же самое - ордеров не открывает. Подскажите пожалуйста как заставить Советника нормально работать. Пишет то же самое только в выделенной мной желтой строк вместо 270 mb стоит значение 271 У меня Windows 10 . 64 разрядная ОС 8ГБ оперативной памяти. Спасибо.
2020.10.27 06:40:45.348Core 1EURUSD,M1: 111967 ticks, 2880 bars generated. Test passed in 0:00:00.019.
2020.10.27 06:40:45.348 Core 1 270 Mb memory used including 35 Mb of history data, 64 Mb of tick data
2020.10.27 06:40:45.348Core 1log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" written
2020.10.27 06:40:45.371Core 1connection closed
Я тестирую на периоде один день. То есть советник должен открыть 1440 ордеров. Может быть проблема в этом. Может есть какие то ограничения на количество одновременно открытых ордеров. Ведь когда на депозите советника было 10 000 он открывал только 300 ордеров , а остальные пропускал по какой то причине связанной с деньгами(как я понял из записей в журнале). А потом я увеличил депозит Советника до 100 000 и пропускать он уже не имел права. И он вообще перестал открывать ордера.
Но потом я депозит Советника снова уменьшил до 10 000. Но Советник не смотря на это уже ничего не открывает и пишет всегда то что я указал вверху. Подскажите пожалуйста как заставить Советника нормально работать. Спасибо.
Если 1440 ордеров в день, то должна быть проверка на начало минуты, или проще на появление минутного бара. И в этот момент открывать. У Вас ее нет, поэтому советник открывает позицию на каждом тике, что само по себе жесткое условие, по условию на нашем символе по текущей котировке. Это условие может и не соблюдаться, и тики будут пропускаться. И в какой то момент возникает критическая ошибка.
Так же тип исполнения ордера (приказа совершить сделку на создание позиции) Все или ничего.
inputint StopLoss=30; // Stop Lossinputint TakeProfit=100; // Take Profitinputdouble Lot=0.1; // Количество лотов для торговлиint A; ////+------------------------------------------------------------------+voidOnTick()
{
Print( "====================================================", TimeCurrent() ) ;
//--- Объявляем структуры, которые будут использоваться для торговлиMqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовif(!SymbolInfoTick(_Symbol,latest_price))
{
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid
mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.type= ORDER_TYPE_SELL; // ордер на продажу
mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
mrequest.deviation=100; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
}
return;
}
int M = TimeMinute(TimeCurrent());
int TimeServer()
{
Print(M, " - Tекущее время сервера");
}
Подскажите пожалуйста!
Почему время сервера не обновляется по приходу новых тиков?
В момент запуска советника все срабатывает как надо, но дальше время то идёт, а в переменную новое значение текущей минуты не поступает.
Т.е. у меня советник работает в зависимости от числа полученного переменной int M = TimeMinute(TimeCurrent());
Собственно строка кода то из справочника и чёт не робит.
Например запустил в 12 минут -текущее времявозвращаемое сервером соответствует времени в переменной, а дальше переменная так и остается на 12, хотя уже минут 15-20 на часах
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
используйте https://www.mql5.com/ru/docs/dateandtime/timecurrent
второй вариант вызова функции
в общем случае это https://www.mql5.com/ru/docs/dateandtime/timetostructБольшое спасибо за ценную информацию.
Что такое структура и как она работает , в целом, я понял. Но еще не до конца осмыслил все тонкости
, связанные с ней. Я намного лучше усваиваю новый материал на наглядных примерах.
Буду Вам очень признателен если покажете как пишется код нижеприведенного условия на mql5
Открывать ордер при помощи структуры я уже научился
if(Hour()==10)
открыть ордер.
Образец открытия ордера можно не писать.... только запись условия.
Спасибо еще раз за помощь.
наверное так хотите цену и время бара определить:
вернее это координаты клика мышки в значениях время + цена на чарте, бар нужно определять через iBarShift()Да, это оно, как дальше понятно. Спасибо)
Большое спасибо за ценную информацию.
Что такое структура и как она работает , в целом, я понял. Но еще не до конца осмыслил все тонкости
, связанные с ней. Я намного лучше усваиваю новый материал на наглядных примерах.
Буду Вам очень признателен если покажете как пишется код нижеприведенного условия на mql5
Открывать ордер при помощи структуры я уже научился
if(Hour()==10)
открыть ордер.
Образец открытия ордера можно не писать.... только запись условия.
Спасибо еще раз за помощь.
Большое спасибо за помощь. Теперь все ясно и понятно.
Всем доброго времени суток!
Пытаюсь перейти с mql4 на mql5 . Создал для тестирования простой код открывающий ордера . Советник в тестере ордера открывает . Поместил в начало функции void OnTick() функцию Print().На четверке советник заходил бы в эту функцию на каждом тике и печатал бы ее на каждом тике в Журнале. А на пятерке - ни на одном из тиков Советник в функцию Print() не заходит и ничего не печатает в Журнале. Визуализация и оптимизация на Советнике отключены.
Подскажите пожалуйста как нужно изменить код, что бы Print() печаталась в журнале на каждом тике, как в четверке.
Заранее благодарен всем кто мне поможет .
Вот мой код
Увеличил депозит в Советнике до 100 000. В результате на каждом тике Print() стала печататься в журнале....Но не открылась ни одна сделка.
А мне нужно что бы и сделки открывались и Print() выводилась.
Всем доброго времени суток!
Пытаюсь перейти с mql4 на mql5 . Создал для тестирования простой код открывающий ордера . Советник в тестере ордера открывает . Поместил в начало функции void OnTick() функцию Print().На четверке советник заходил бы в эту функцию на каждом тике и печатал бы ее на каждом тике в Журнале. А на пятерке - ни на одном из тиков Советник в функцию Print() не заходит и ничего не печатает в Журнале. Визуализация и оптимизация на Советнике отключены.
Подскажите пожалуйста как нужно изменить код, что бы Print() печаталась в журнале на каждом тике, как в четверке.
Заранее благодарен всем кто мне поможет .
Вот мой код
Увеличил депозит в Советнике до 100 000. В результате на каждом тике Print() стала печататься в журнале....Но не открылась ни одна сделка.
А мне нужно что бы и сделки открывались и Print() выводилась.
Посмотрите в логах что печатает, там на каждом шаге сведения заносятся. Скорее всего что то не так с открытием ордеров и советник не работает.
C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs
мы же уже обсуждали с Вами стоит ли много раз обращаться к данным терминала из MQL4, тогда про OrderSelect https://www.mql5.com/ru/forum/342989#comment_16743716
можно так же протестировать и получение текущих цен, думаю тоже по 100500 раз можно на одном тике использовать, т.к. миллионами раз в секунду будет производительность
единственное, да - чем больше символов в окне обзор рынка, тем больше будет нагружаться сам терминал, ну и соответственно если будете вызывать данные от много разных символов, тогда тоже будут лаги
т.е. если разумно использовать терминал, то ничего не зависнет - в окне обзор рынка штук десять символов, те которые используете
сколько одновременно чартов можно открыть не проверял, но думаю, что если историю ограничить 1000 баров, то скорее всего пару десятков окон чартов без проблем терминал потянет
100
Посмотрите в логах что печатает, там на каждом шаге сведения заносятся. Скорее всего что то не так с открытием ордеров и советник не работает.
C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs
Спасибо за подсказку.
Действительно не работает. Пишет.
2020.10.27 06:40:45.311 Tester EURUSD: history data begins from 2018.01.02 00:00
2020.10.27 06:40:45.312 Core 1 connecting to 127.0.0.1:3000
2020.10.27 06:40:45.312 Core 1 connected
2020.10.27 06:40:45.320 Core 1 authorized (agent build 2650)
2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): testing of Experts\ГРААЛЬ.ex5 from 2020.09.01 00:00 to 2020.09.03 00:00
2020.10.27 06:40:45.327 Core 1 common synchronization completed
2020.10.27 06:40:45.328 Tester quality of analyzed history is 100%
2020.10.27 06:40:45.348 Core 1 test Experts\ГРААЛЬ.ex5 on EURUSD,M1 thread finished
2020.10.27 06:40:45.348 Core 1 prepare for shutdown
2020.10.27 06:40:45.348 Core 1 login (build 2650)
2020.10.27 06:40:45.348 Core 1 account info found with currency USD
2020.10.27 06:40:45.348 Core 1 1482 bytes of tester parameters loaded
2020.10.27 06:40:45.348 Core 1 1724 bytes of input parameters loaded
2020.10.27 06:40:45.348 Core 1 calculate profit in pips, initial deposit 10000, leverage 1:100
2020.10.27 06:40:45.348 Core 1 successfully initialized
2020.10.27 06:40:45.348 Core 1 731 bytes of total initialization data received
2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB
2020.10.27 06:40:45.348 Core 1 EURUSD: symbol to be synchronized
2020.10.27 06:40:45.348 Core 1 EURUSD: symbol synchronized already, 18 bytes received
2020.10.27 06:40:45.348 Core 1 EURUSD,M1: history cached from 2019.01.02 06:00
2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): every tick generating
2020.10.27 06:40:45.348 Core 1 EURUSD,M1: testing of Experts\ГРААЛЬ.ex5 from 2020.09.01 00:00 to 2020.09.03 00:00 started with inputs:
2020.10.27 06:40:45.348 Core 1 StopLoss=30
2020.10.27 06:40:45.348 Core 1 TakeProfit=100
2020.10.27 06:40:45.348 Core 1 Lot=0.1
2020.10.27 06:40:45.348 Core 1 final balance 10000.00 pips
2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated. Test passed in 0:00:00.019.
2020.10.27 06:40:45.348 Core 1 270 Mb memory used including 35 Mb of history data, 64 Mb of tick data
2020.10.27 06:40:45.348 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" written
2020.10.27 06:40:45.371 Core 1 connection closed
Я тестирую на периоде один день. То есть советник должен открыть 1440 ордеров. Может быть проблема в этом. Может есть какие то ограничения на количество одновременно открытых ордеров.
Ведь когда на депозите советника было 10 000 он открывал только 300 ордеров , а остальные пропускал по какой то причине связанной с деньгами(как я понял из записей в журнале). А потом я увеличил депозит Советника до 100 000 и пропускать он уже не имел права. И он вообще перестал открывать ордера.
Но потом я депозит Советника снова уменьшил до 10 000. Но Советник не смотря на это уже ничего не открывает и пишет всегда то что я указал вверху.
Создал другой советник. Загрузил в него тот же код. Депозит 10 000. Все то же самое - ордеров не открывает.
Подскажите пожалуйста как заставить Советника нормально работать. Пишет то же самое только в выделенной мной желтой строк вместо 270 mb стоит значение 271
У меня Windows 10 . 64 разрядная ОС 8ГБ оперативной памяти.
Спасибо.
Спасибо за подсказку.
Действительно не работает. Пишет.
2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated. Test passed in 0:00:00.019.
2020.10.27 06:40:45.348 Core 1 270 Mb memory used including 35 Mb of history data, 64 Mb of tick data
2020.10.27 06:40:45.348 Core 1 log file "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" written
2020.10.27 06:40:45.371 Core 1 connection closed
Я тестирую на периоде один день. То есть советник должен открыть 1440 ордеров. Может быть проблема в этом. Может есть какие то ограничения на количество одновременно открытых ордеров.
Ведь когда на депозите советника было 10 000 он открывал только 300 ордеров , а остальные пропускал по какой то причине связанной с деньгами(как я понял из записей в журнале). А потом я увеличил депозит Советника до 100 000 и пропускать он уже не имел права. И он вообще перестал открывать ордера.
Подскажите пожалуйста как заставить Советника нормально работать.
Спасибо.
Если 1440 ордеров в день, то должна быть проверка на начало минуты, или проще на появление минутного бара. И в этот момент открывать. У Вас ее нет, поэтому советник открывает позицию на каждом тике, что само по себе жесткое условие, по условию на нашем символе по текущей котировке. Это условие может и не соблюдаться, и тики будут пропускаться. И в какой то момент возникает критическая ошибка.
Так же тип исполнения ордера (приказа совершить сделку на создание позиции) Все или ничего.
Подскажите пожалуйста!
Почему время сервера не обновляется по приходу новых тиков?
В момент запуска советника все срабатывает как надо, но дальше время то идёт, а в переменную новое значение текущей минуты не поступает.
Т.е. у меня советник работает в зависимости от числа полученного переменной int M = TimeMinute(TimeCurrent());
Собственно строка кода то из справочника и чёт не робит.
Например запустил в 12 минут - текущее время возвращаемое сервером соответствует времени в переменной, а дальше переменная так и остается на 12, хотя уже минут 15-20 на часах