AntFX 6,474 Share Posted February 4, 2015 (edited) Я читал об обратном Вы читали, а я сталкивался. С обратными примерами (когда вдруг функция API mql4 стала не работать, а аналогичная из mql5 стала работать) не сталкивался. Хотя конечно ничто не стоит на месте, может быть глюки уже подправили. Edited February 4, 2015 by AntFX Quote 1 Link to post Share on other sites
MG4 3,094 Share Posted February 5, 2015 продолжу //MQL4 bool IsTradeAllowed(); Возвращает информацию о возможности торговли при помощи экспертов. все просто и понятно Информация о запущенной MQL5-программеMQLInfoInteger()MQL_TRADE_ALLOWED - Разрешение на торговлю для данной запущенной программы. //MQL5 int MQLInfoInteger( int property_id // идентификатор свойства. Может быть одним из значений перечисления ENUM_MQL_INFO_INTEGER. ); что мы получаем в итоге? //MQL5 MQLInfoInteger(MQL_TRADE_ALLOWED) число 0 или 1? я могу так? //MQL5 if(MQLInfoInteger(MQL_TRADE_ALLOWED)) Print("Торговля разрешена ") PSникак не пойму, почему бы не сделать функцию напримерMQLInfobool()для константMQL_DLLS_ALLOWED Разрешение на использование DLL для данной запущенной программыMQL_TRADE_ALLOWED Разрешение на торговлю для данной запущенной программыMQL_SIGNALS_ALLOWED Разрешение на работу с сигналами данной запущенной программыMQL_DEBUG Признак работы запущенной программы в режиме отладкиMQL_PROFILER Признак работы запущенной программы в режиме профилирования кодаMQL_TESTER Признак работы запущенной программы в тестереMQL_OPTIMIZATION Признак работы запущенной программы в процессе оптимизацииMQL_VISUAL_MODE Признак работы запущенной программы в визуальном режиме тестированияMQL_FRAME_MODE Признак работы запущенного эксперта на графике в режиме сбора фреймов результатов оптимизации Quote — Маржинкольщик наколи мне маржинкол. Только качественная аналитика в ветке ПАММ-а MTSavg Link to post Share on other sites
coder-ex 60 Share Posted February 5, 2015 продолжу //MQL4 bool IsTradeAllowed(); Возвращает информацию о возможности торговли при помощи экспертов. все просто и понятно Информация о запущенной MQL5-программе MQLInfoInteger() MQL_TRADE_ALLOWED - Разрешение на торговлю для данной запущенной программы. //MQL5 int MQLInfoInteger( int property_id // идентификатор свойства. Может быть одним из значений перечисления ENUM_MQL_INFO_INTEGER. ); что мы получаем в итоге? //MQL5 MQLInfoInteger(MQL_TRADE_ALLOWED) число 0 или 1? я могу так? //MQL5 if(MQLInfoInteger(MQL_TRADE_ALLOWED)) Print("Торговля разрешена ") PS никак не пойму, почему бы не сделать функцию например MQLInfobool() для констант MQL_DLLS_ALLOWED Разрешение на использование DLL для данной запущенной программы MQL_TRADE_ALLOWED Разрешение на торговлю для данной запущенной программы MQL_SIGNALS_ALLOWED Разрешение на работу с сигналами данной запущенной программы MQL_DEBUG Признак работы запущенной программы в режиме отладки MQL_PROFILER Признак работы запущенной программы в режиме профилирования кода MQL_TESTER Признак работы запущенной программы в тестере MQL_OPTIMIZATION Признак работы запущенной программы в процессе оптимизации MQL_VISUAL_MODE Признак работы запущенной программы в визуальном режиме тестирования MQL_FRAME_MODE Признак работы запущенного эксперта на графике в режиме сбора фреймов результатов оптимизации все просто, язык создавали несколько "поколений" команд программистов и то что уже реализовано, не всегда охоьа ломать и переделывать, тем более, что тогда все программы которых коснется изменение в языке, перестанут работать, да программисты-пользователи языка MQL побегут от нестабильного языка в котором что то постоянно меняется Quote Разработка торговых систем и прикладного ПО для FOREX и FORTS. Программирование на MQL4, MQL5, C++ Qt. Link to post Share on other sites
Fargoth 1 Share Posted February 9, 2015 подскажите, может кто-нибудь сталкивался:эксперт крутится на M15, в своей работе вызывает iCustom с периодом H4спустя десять минут после получения значений индикатора в журнале появляется запись: Custom indicator ... EURUSD,H4: removed через пять минут после этого (на очередной свече M15) эксперт опять его подгружает: Custom indicator ... EURUSD,H4: loaded successfully в общем то всё работает, но я не припомню, чтобы раньше это происходило Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 9, 2015 подскажите, может кто-нибудь сталкивался: Чтобы разобраться, нужен лог полностью, а не только вырезки из него. Quote 1 Link to post Share on other sites
Fargoth 1 Share Posted February 9, 2015 Чтобы разобраться, нужен лог полностью, а не только вырезки из него. Журнал из таких вот записей и состоит Несколько больше информации выдаёт сам эксперт "uninit reason 1", как гласит документация, есть "Программа удалена с графика" В самом коде эксперта про "завершение индикатора", естественно ничего нет, только вызов через iCustom(...) Может существует некий "срок жизни" для индикаторов, не относящихся в рабочему таймфрейму? Ровно через десять минут после инициализации "программа удаляется с графика" Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 9, 2015 Даже не знаю, не проверял. А график таймфрейма как создан? Quote 1 Link to post Share on other sites
Fargoth 1 Share Posted February 9, 2015 Даже не знаю, не проверял. А график таймфрейма как создан? Не уверен, что правильно понял вопрос... Обычное окно котировок онлайн для M15 На нём болтается тот же самый индикатор (для наглядности), только с параметрами для пятнадцати минут В журналах значится именно H4, а он используется только в эксперте: PrCh1H4down = iCustom(_symbol, PERIOD_H4, "My indicators\Price Channel", PriceChannelPeriod, 1, 1); Quote Link to post Share on other sites
AntFX 6,474 Share Posted February 9, 2015 (edited) А... меня проглючило, что это нестандартный ТФ Боюсь без кода советника и индикатора разобраться в причинах сложно. Edited February 9, 2015 by AntFX Quote 1 Link to post Share on other sites
fy73 62 Share Posted February 10, 2015 (edited) Думаю, вот ответ: stringo: VBAG: Уважаемые разработчики! Имеется кастомный индикатор, который используется в советнике. Вызывается этот индюк с текущего таймфрейма(30) и со старшего(60) один раз в период. Оба индикатора выдают в советник всё корректно. В журнале видим, что индикатор, вызываемый на текущем фрейме(30) работает без замечаний, а вот этот же индюк вызываемый со старшего фрейма постоянно выгружается минут через 10 после загрузки: 2015.02.03 21:28:15.640 Custom indicator ZSSMexp AUDUSD,H1: loaded successfully2015.02.03 21:38:20.281 Custom indicator ZSSMexp AUDUSD,H1: removed Один вопрос:Так должно быть или использование индикатора некорректно? Через 10 минут после последнего обращения к историческим данным (в Вашем случае AUDUSD.H1) эти данные автоматически удаляются из памяти. Вместе с ними удаляются все индикаторы, которые рассчитываются на этих данных. Так что, всё правильно. Так и задумано.Чтобы предотвратить автоматическую выгрузку истории и индикаторов, обращайтесь к AUDUSD,H1 немного чаще, чем 1 раз в 10 минут Edited February 10, 2015 by fy73 2 Quote Всё сказанное вами может быть использовано против вас. Плечо пишется через "о". Link to post Share on other sites
AntFX 6,474 Share Posted February 10, 2015 Короче говоря добавить в OnInit(): EventSetTimer(550); И добавить OnTimer(){ iCustom(...); } 1 Quote 1 Link to post Share on other sites
fy73 62 Share Posted February 10, 2015 Проверил, iClose достаточно (в большинстве случаев это будет менее ресурсоёмко). 2 Quote Всё сказанное вами может быть использовано против вас. Плечо пишется через "о". Link to post Share on other sites
fy73 62 Share Posted February 10, 2015 У меня непонятки с функцией MarketInfo(symbol,MODE_TICKVALUE) в cfd. Непосредственно перед открытием позиции принтую убыток, который возникнет по спреду: Print("Потенциальный убыток по спреду=",MarketInfo(symbol,MODE_TICKVALUE)*MarketInfo(symbol,MODE_SPREAD)*lot); Затем открываю позицию и принтую её текущий профит. Результаты: 0 16:29:01.183 Atromarator GBPUSD,M1: /// #NXH5 0 16:29:01.183 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=5.0 0 16:29:01.183 Atromarator GBPUSD,M1: /// 2 16:29:01.854 Atromarator GBPUSD,M1: open #265047908 buy 0.01 #NXH5 at 17840 ok 0 16:29:01.854 Atromarator GBPUSD,M1: Удачно, ticket=265047908 0 16:29:01.854 Atromarator GBPUSD,M1: Профит нового ордера=-0.75 ... 0 16:29:40.059 Atromarator GBPUSD,M1: /// AUDCHF 0 16:29:40.059 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=0.5613671449082921 0 16:29:40.059 Atromarator GBPUSD,M1: /// 2 16:29:40.660 Atromarator GBPUSD,M1: open #265048021 sell 0.01 AUDCHF at 0.71931 ok 0 16:29:40.660 Atromarator GBPUSD,M1: Удачно, ticket=265048021 0 16:29:40.660 Atromarator GBPUSD,M1: Профит нового ордера=-0.5600000000000001 ... 0 16:29:46.007 Atromarator GBPUSD,M1: /// AUDNZD 0 16:29:46.007 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=0.5908880000000001 0 16:29:46.007 Atromarator GBPUSD,M1: /// 2 16:29:46.494 Atromarator GBPUSD,M1: open #265048034 sell 0.01 AUDNZD at 1.05096 ok 0 16:29:46.494 Atromarator GBPUSD,M1: Удачно, ticket=265048034 0 16:29:46.494 Atromarator GBPUSD,M1: Профит нового ордера=-0.58 ... 0 16:30:55.273 Atromarator GBPUSD,M1: /// GBPAUD 0 16:30:55.274 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=0.9712875000000001 0 16:30:55.274 Atromarator GBPUSD,M1: /// 2 16:30:55.898 Atromarator GBPUSD,M1: open #265048506 buy 0.01 GBPAUD at 1.96062 ok 0 16:30:55.898 Atromarator GBPUSD,M1: Удачно, ticket=265048506 0 16:30:55.898 Atromarator GBPUSD,M1: Профит нового ордера=-0.83 ... 0 17:39:19.319 Atromarator GBPUSD,M1: /// #GCG5 0 17:39:19.319 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=10.0 0 17:39:19.319 Atromarator GBPUSD,M1: /// 2 17:39:23.171 Atromarator GBPUSD,M1: open #265060610 sell 0.01 #GCG5 at 1232.20 ok 0 17:39:23.171 Atromarator GBPUSD,M1: Удачно, ticket=265060610 0 17:39:23.171 Atromarator GBPUSD,M1: Профит нового ордера=-0.9 ... 0 19:19:15.327 Atromarator GBPUSD,M1: /// #NQH5 0 19:19:15.327 Atromarator GBPUSD,M1: Потенциальный убыток по спреду=5.0 0 19:19:15.327 Atromarator GBPUSD,M1: /// 2 19:19:16.314 Atromarator GBPUSD,M1: open #265080073 buy 0.01 #NQH5 at 4247.00 ok 0 19:19:16.314 Atromarator GBPUSD,M1: Удачно, ticket=265080073 0 19:19:16.314 Atromarator GBPUSD,M1: Профит нового ордера=-0.15 Quote Всё сказанное вами может быть использовано против вас. Плечо пишется через "о". Link to post Share on other sites
kazakov.v 189 Share Posted February 10, 2015 непонятки с функцией TICK_SIZE надо учитывать. 1 Quote Никому верить нельзя. Мне - можно. Link to post Share on other sites
AntFX 6,474 Share Posted February 10, 2015 (edited) TICK_SIZE надо учитывать. А разве MODE_TICKVALUE не всегда выдает цену тика за те же единицы, в которых указывается число пунктов в MODE_SPREAD? Edited February 10, 2015 by AntFX Quote 1 Link to post Share on other sites
fy73 62 Share Posted February 10, 2015 (edited) TICK_SIZE надо учитывать. Спасибо. Судя по экспериментам, спред лучше посчитать вручную, заменив в рассчёте MODE_POINT на MODE_TICKSIZE? --- В основном всё хорошо, но оказывается, есть ещё ряд символов, для которых возвращается MODE_TICKVALUE=0.0 И даже не только cfd: HKDJPY, EURZAR. Edited February 10, 2015 by fy73 Quote Всё сказанное вами может быть использовано против вас. Плечо пишется через "о". Link to post Share on other sites
kazakov.v 189 Share Posted February 10, 2015 разве MODE_TICKVALUE не всегда выдает цену тика за те же единицы, в которых указывается число пунктов в MODE_SPREAD? Спред показан в пунктах, а ticksize может быть больше пункта, тогда стоимость пункта будет меньше tickvalue. ) 1 Quote Никому верить нельзя. Мне - можно. Link to post Share on other sites
fy73 62 Share Posted February 10, 2015 но оказывается, есть ещё ряд символов, для которых возвращается MODE_TICKVALUE=0.0И даже не только cfd: HKDJPY, EURZAR. Нет, это я ошибся, не открыв в терминале все символы. Всё хорошо. Quote Всё сказанное вами может быть использовано против вас. Плечо пишется через "о". Link to post Share on other sites
STre 7 Share Posted February 15, 2015 Что-то никак не разберусь, как заставить индикатор перерисовываться. Может подскажете? Нарисовал простенький индикатор в аттаче. При старте или изменении параметров через настройки индикатора все рисуется хорошо. Если же приходит событие в OnChartEvent - я его получаю, e_nInpMAPeriod выставляется, IndicatorShortName обновляется в новое правильное значение. Но график не перерисовывается. Как заставить принудительно перезаполнить массив линии МА? Test.mq4 Quote Link to post Share on other sites
kazakov.v 189 Share Posted February 16, 2015 Но график не перерисовывается У тебя расчет ограничен функцией IndicatorCounted(). Она обнуляется терминалом после инициализации, или если терминал обнаружил изменения в истории - что бывает нечасто. Можно сделать так: - завести глобальную переменную bool FullRecalc = false; - заменить IndicatorCounted() на свою функцию, типа: int MyIndicatorCounted(){ if(FullRecalc){ FullRecalc = false; return 0; } return IndicatorCounted(); } - там, где возникнет необходимость перерасчета задаешь FullRecalc = true; и на ближайшем тике произойдет принудительный перерасчет всего буфера. Quote Никому верить нельзя. Мне - можно. Link to post Share on other sites
STre 7 Share Posted February 16, 2015 У тебя расчет ограничен функцией IndicatorCounted(). Она обнуляется терминалом после инициализации, или если терминал обнаружил изменения в истории - что бывает нечасто. Можно сделать так: - завести глобальную переменную bool FullRecalc = false; - заменить IndicatorCounted() на свою функцию, типа: int MyIndicatorCounted(){ if(FullRecalc){ FullRecalc = false; return 0; } return IndicatorCounted(); } - там, где возникнет необходимость перерасчета задаешь FullRecalc = true; и на ближайшем тике произойдет принудительный перерасчет всего буфера. Понял, спасибо. Вечером проверю. Может еще проблема была, что писал все это в выходные и тики не приходили. Quote Link to post Share on other sites
Meydron 0 Share Posted February 18, 2015 Добрый День! Надеюсь что пишу в правильной теме, если нет, приношу извинения. 3 недели назад написал советник, по стандартным индикаторам. Сверил верность в тестере стратегий, работает идеально. Проблемы начались на второй неделе торговли: Советник может открывать несколько позиций в одну сторону если сигналы повторяются через определенное время. Но во время сигнала в обратную сторону, все открытые позиции должны закрываться. Так вот этого не происходит. при возникновении сигнала к закрытию, закрывается только одна позиция.(Хотя в тестере четко видно закрытие сколько угодно позиций в одной точке) Хотел спросить у знающих людей, какие могут быть причины возникновения данной ситуации? Возможно ли, что запрос между советником - терминалом - сервером на закрытие позиции идет слишком долго и следующие позиции просто не успевают закрыться? или это не возможно из за высокой скорости ответа сервера? Quote Link to post Share on other sites
Ugar68 372 Share Posted February 18, 2015 В тестере идеальные условия, если отправил приказ закрыть, тестер его выполнит. В реальности не так всё радужно. То что отправлен приказ закрыть ещё не означает что он будет исполнен. В случае неудачи, надо проконтролировать, напечатать в журнал код ошибки, и предусмотреть действия в зависимости от кода ошибки. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Meydron 0 Share Posted February 19, 2015 В тестере идеальные условия, если отправил приказ закрыть, тестер его выполнит. В реальности не так всё радужно. То что отправлен приказ закрыть ещё не означает что он будет исполнен. В случае неудачи, надо проконтролировать, напечатать в журнал код ошибки, и предусмотреть действия в зависимости от кода ошибки. Значит как я и предполагал это связано со скоростью закрытия. Благодарю! Quote Link to post Share on other sites
Hitronrav 4,787 Share Posted February 19, 2015 Значит как я и предполагал это связано со скоростью закрытия. Благодарю! делайте RefreshRates() между закрытиями Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.