Использование неинициализированных (или неполностью) переменных (особенно структур) - это очень частая ошибка в программировании.
Блин, ну вот единственный русскоязычный ресурс, где тебе (1) толково промывают мозги и (2) ты испытываешь чувство благодарности за это :)
Вот уже 1,5 года знаю, что надо инициализировать переменные; 1,5 года намеренно употребляю фразу "переменная типа структуры"; но при этом 1,5 года присваиваю значения только отдельным (обязательным к заполнению) полям переменной типа Mqltraderequest, поскольку в Справочнике сказано, что "для каждой торговой операции необходимо указывать обязательные поля"...
papaklass: Renat, было бы не плохо, если бы на тему "работа с памятью и переменными" Вы (MQ) бы опубликовали статью или серию статей. Вообще, как правильно работать с памятью и переменными? После дисквалификации на Чемпионате нескольких советников из-за большого потребления памяти, эти статьи были бы уместными. Rosh в какой то теме писал, чтобы пользователи сами заказывали статьи, которые их интересуют, но я не нашел эту тему, поэтому пишу здесь.
Да, было бы интересно почитать статью на эту тему. Очень интересно почему на чемпионате у некоторых участников эксперты использовали так много памяти и как можно избежать подобной ситуации. У меня таких проблем не возникало, но это всё случайность. То есть я не знаю почему этого у меня не происходит, а хотелось бы знать, что делать, если вдруг.
В первую очередь, расход памяти связан с вызовами индикаторов. Прежде чем создавать хендлы десятков индикаторов на различных символах/тпймфреймах, подумайте, какая плата будет за это. Могу посоветовать статью Уменьшаем расход памяти на вспомогательные индикаторы и ознакомиться с интервью одного из дисквалифицированных участников - Интервью с Ацуси Яманака (alohafx).
Что общего между трейдингом, скайдайвингом, фьючерсами, Гавайями, переводами и шпионами? Мы тоже не знали, пока не пообщались с дисквалифицированным участником Ацуси Яманака (alohafx). Его кредо - ''Life is Good! - Жизнь прекрасна!'', и с этим трудно не согласиться. Было интересно узнать, что расстояние между разными континентами - не помеха в общении участников нашего Чемпионата.
Почему при затягивании S/L до 5 (должно быть 5 пунктов)
У меня следующее
Перед отправкой торгового запроса необходимо проверить стоп-уровни(SYMBOL_TRADE_STOPS_LEVEL) для символа. SL/TP не должны быть ближе, чем это расстояние до текущей цены для закрытия. Пример получения этого свойства:
int StopLevel_Distance=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
double SL=... // получите новый SL путем вычисления//--- проверьте текущий рассчитанный уровень Stop Lossif(SL>SymbolInfoDouble(_Symbol,SYMBOL_ASK)-StopLevel_Distance*_Point)
SL=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-StopLevel_Distance*_Point;
//... измените SL для позиции
Спасибо, но ни мой SL, ни мой TP не выполняются. В компиляторе "Терминал" они указаны как "0.00" или "0.0" В любом случае невозможно дать общий стоплосс для всех ордеров. А изменить значения параметров "извне", т.е. не меняя код в редакторе, у меня пока не получилось.
В остальном все работает отлично! И комментарии очень помогают!
Спасибо за это пошаговое руководство. У меня есть несколько вопросов, с которыми, я надеюсь, вы сможете мне помочь.
Я следовал вашей инструкции до буквы, но не достиг желаемого результата. Во-первых, я работаю с последней версией Meta Trader 5.00, Build 6.55 (6 июня 2012 года). Я заметил несколько отличий, первое из которых - шаблон мастера MQL5 имеет дополнительные опции, нежели те, что вы указали в своих заметках. В любом случае, я убедился, что программа работает именно так, как вы описали. Я скомпилировал ее. Никаких проблем. Ноль ошибок. Мне удалось вставить все 5 отладочных точек останова, как предложено в ваших заметках, в подпрограмму OnTick. Нажимаю зеленую кнопку Run и НИЧЕГО не происходит. Программа не доходит до этой точки. Почему? Что происходит? Если я вставляю отладочные точки останова @ начало подпрограммы OnInit, @ скажем, adzHandle=iADX9Null,0,ADX_Period), то все нормально. Вкладки отладочного STEP загораются, и я могу выполнить одиночный шаг по этому элементу управления до конца подзадачи OnInit. Однако после этого снова ничего. Короче говоря, я не могу добраться до подзаголовка OnTick. Что происходит и почему? Является ли это известной ошибкой в работе системы Meta Trader? Как я могу решить эту проблему и двигаться дальше?
Я надеюсь, что все вышесказанное объясняет проблему, с которой я столкнулся, и надеюсь, что вы сможете понять, что происходит, и помочь.
Я вводил весь код по ходу дела и не получал ошибок компиляции в конце, так что, должно быть, все было хорошо объяснено. Хорошее упражнение для первого использования системы metatrader5/mql5.
Возможно, придется немного оптимизировать, чтобы заставить график двигаться в восходящем направлении :D
Мне очень понравился стиль кодирования в этой статье, очень легко читать и следовать. У меня только одна просьба, если вы не возражаете, не могли бы вы также привести пример того, как реализовать трейлинг-стоп с помощью этого примера?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Использование неинициализированных (или неполностью) переменных (особенно структур) - это очень частая ошибка в программировании.
Блин, ну вот единственный русскоязычный ресурс, где тебе (1) толково промывают мозги и (2) ты испытываешь чувство благодарности за это :)
Вот уже 1,5 года знаю, что надо инициализировать переменные; 1,5 года намеренно употребляю фразу "переменная типа структуры"; но при этом 1,5 года присваиваю значения только отдельным (обязательным к заполнению) полям переменной типа Mqltraderequest, поскольку в Справочнике сказано, что "для каждой торговой операции необходимо указывать обязательные поля"...
Renat, было бы не плохо, если бы на тему "работа с памятью и переменными" Вы (MQ) бы опубликовали статью или серию статей. Вообще, как правильно работать с памятью и переменными? После дисквалификации на Чемпионате нескольких советников из-за большого потребления памяти, эти статьи были бы уместными. Rosh в какой то теме писал, чтобы пользователи сами заказывали статьи, которые их интересуют, но я не нашел эту тему, поэтому пишу здесь.
Почему при затягивании S/L до 5 (должно быть 5 пунктов)
У меня следующее
Почему при затягивании S/L до 5 (должно быть 5 пунктов)
У меня следующее
Перед отправкой торгового запроса необходимо проверить стоп-уровни(SYMBOL_TRADE_STOPS_LEVEL) для символа. SL/TP не должны быть ближе, чем это расстояние до текущей цены для закрытия. Пример получения этого свойства:
Спасибо, но ни мой SL, ни мой TP не выполняются. В компиляторе "Терминал" они указаны как "0.00" или "0.0" В любом случае невозможно дать общий стоплосс для всех ордеров. А изменить значения параметров "извне", т.е. не меняя код в редакторе, у меня пока не получилось.
В остальном все работает отлично! И комментарии очень помогают!
Еще раз спасибо,
locan BBS
Опубликована новая статья Пошаговое руководство по написанию советника на MQL5 для начинающих:
Автор: olowsam
Привет, Olowsam,
Спасибо за это пошаговое руководство. У меня есть несколько вопросов, с которыми, я надеюсь, вы сможете мне помочь.
Я следовал вашей инструкции до буквы, но не достиг желаемого результата. Во-первых, я работаю с последней версией Meta Trader 5.00, Build 6.55 (6 июня 2012 года). Я заметил несколько отличий, первое из которых - шаблон мастера MQL5 имеет дополнительные опции, нежели те, что вы указали в своих заметках. В любом случае, я убедился, что программа работает именно так, как вы описали. Я скомпилировал ее. Никаких проблем. Ноль ошибок. Мне удалось вставить все 5 отладочных точек останова, как предложено в ваших заметках, в подпрограмму OnTick. Нажимаю зеленую кнопку Run и НИЧЕГО не происходит. Программа не доходит до этой точки. Почему? Что происходит? Если я вставляю отладочные точки останова @ начало подпрограммы OnInit, @ скажем, adzHandle=iADX9Null,0,ADX_Period), то все нормально. Вкладки отладочного STEP загораются, и я могу выполнить одиночный шаг по этому элементу управления до конца подзадачи OnInit. Однако после этого снова ничего. Короче говоря, я не могу добраться до подзаголовка OnTick. Что происходит и почему? Является ли это известной ошибкой в работе системы Meta Trader? Как я могу решить эту проблему и двигаться дальше?
Я надеюсь, что все вышесказанное объясняет проблему, с которой я столкнулся, и надеюсь, что вы сможете понять, что происходит, и помочь.
Спасибо.
С наилучшими пожеланиями
Кишор
Отличная статья,
Я вводил весь код по ходу дела и не получал ошибок компиляции в конце, так что, должно быть, все было хорошо объяснено. Хорошее упражнение для первого использования системы metatrader5/mql5.
Возможно, придется немного оптимизировать, чтобы заставить график двигаться в восходящем направлении :D
Всего наилучшего и спасибо!!!
Майк
Привет,
Мне очень понравился стиль кодирования в этой статье, очень легко читать и следовать. У меня только одна просьба, если вы не возражаете, не могли бы вы также привести пример того, как реализовать трейлинг-стоп с помощью этого примера?
Большое спасибо!