Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1740
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
не учи людей плохому.
свои данные надо помнить и по ним работать
Максим, в той ситуации, не нужно ничего никуда запоминать. Гораздо надёжнее просто посмотреть прошлую закрытую позицию.
Не нужно там ничего придумывать с запоминаниями данных с последующим их восстановлением после нештатной ситуации. Если будет закрыт терминал, то данные о позиции будут утеряны. Соответственно, при их запоминании, нужно сразу же учитывать возможность их быстрого и эффективного восстановления.
(Запоминание в комментарии ордера - не сказал бы, что надёжное решение - это означает полагаться на волю брокера/дц)
И самое интересное, что в любом случае, он эти данные будет считывать откуда-то. Так не проще ли их сразу считывать из первоисточника?
как компилятору принудительно указать, чтобы компилировал для МТ4, а не MT5?
Максим, в той ситуации, не нужно ничего никуда запоминать. Гораздо надёжнее просто посмотреть прошлую закрытую позицию.
Не нужно там ничего придумывать с запоминаниями данных с последующим их восстановлением после нештатной ситуации. Если будет закрыт терминал, то данные о позиции будут утеряны. Соответственно, при их запоминании, нужно сразу же учитывать возможность их быстрого и эффективного восстановления.
(Запоминание в комментарии ордера - не сказал бы, что надёжное решение - это означает полагаться на волю брокера/дц)
И самое интересное, что в любом случае, он эти данные будет считывать откуда-то. Так не проще ли их сразу считывать из первоисточника?
а потом следуют темы "почему OnTimer не укладывается в пару секунд или OnTick дико пропускает" :-)
1 раз при инициализации восстановить состояние (или чтением из файла или просмотром истории/окружение) и всё...Последний ордер вместе с его характеристиками запоминается в переменную и всегда известен
а потом следуют темы "почему OnTimer не укладывается в пару секунд или OnTick дико пропускает" :-)
1 раз при инициализации восстановить состояние (или чтением из файла или просмотром истории/окружение) и всё...Последний ордер вместе с его характеристиками запоминается в переменную и всегда известен
Чтобы узнать как закрылась последняя позиция, нужно её таки найти. Ведь пока она открыта, записывать и помнить как она была закрыта нет никакой возможности - она же всё ещё открыта.
Можно хранить тикет последней открытой позиции и по нему определять как она закрылась, но ... при манипуляциях с позицией пока она открыта, её тикет может меняться. Соответственно, нужно делать функционал для перезаписи изменившегося тикета. Всё это усложняет код.
Я же лишь предложил искать последнюю закрытую позицию. И это совмещает перебор всех позиций при перезапуске советника и считывание данных только одной позиции при закрытии новой.
Ведь, я надеюсь, всем понятно, что не нужно для этого делать цикл по всем историческим позициям, а только лишь по последней. Т.е., мы помним лишь одну переменную индекса цикла - её текущее значение, и начинаем новый цикл (при увеличении количества исторических ордеров) от значения этой переменной, а не от нуля. А значение в эту переменную заносится в OnInit() при старте и перезапуске советника, и при закрытии новой позиции. Т.е., таким образом мы избегаем необходимости записи и чтения данных о позиции и работы с накопителем.
Думаю, что такой подход наиболее выгоден, потому, что
1. Нужно помнить значение лишь индекса цикла
2. Получать данные только в нужный момент прямым обращением к закрытому ордеру по его индексу.
3. Не нужно городить функционал чтения/записи данных
4. Это быстрее как в работе, так и в написании.
И, да, я согласен, что данные нужно свои все знать - сам так делаю. Но знать их желательно выгодно для программы и себя.
Благодарю за информацию!
Если будет время, прошу вас ответить, как исправить:
На истории N свечей назад ставятся две разнонаправленные цели: Close[N]+50*Point и Close[N]-50*Point.
Затем условие, что цена должна дойти до одной из целей(if (High[i]> Close[N]+50*Point) или (if (Low[i]< Close[N]-50*Point)
При выполнении условия расстояние от Close[N] до High[i] заносится в массив x[high]=High[i].
Затем рандомно кидается на любой из графиков в любое время.
И при проверке через Print(x[high]), 1-2 из десяти значений показывают меньше 50! У одного 12, у другого 49. Хотя, строго указано +50*Point. 8-9 правильно показывают (больше 50-ти), а 1-2 аномальные. Это не через тестер, а на реальный график накидываю советник (без торговых функций), а только с вышеуказанными, он работает с историей и такое пишет.
Чем больше берется значение, тем меньше таких ошибок. Думал, может, спред мешает, но... в МТ4 вроде нет спреда на истории
Решено.
Не обновляет
Спасибо
Чтобы узнать как закрылась последняя позиция, нужно её таки найти. Ведь пока она открыта, записывать и помнить как она была закрыта нет никакой возможности - она же всё ещё открыта.
Можно хранить тикет последней открытой позиции и по нему определять как она закрылась, но ... при манипуляциях с позицией пока она открыта, её тикет может меняться. Соответственно, нужно делать функционал для перезаписи изменившегося тикета. Всё это усложняет код.
Я же лишь предложил искать последнюю закрытую позицию. И это совмещает перебор всех позиций при перезапуске советника и считывание данных только одной позиции при закрытии новой.
Ведь, я надеюсь, всем понятно, что не нужно для этого делать цикл по всем историческим позициям, а только лишь по последней. Т.е., мы помним лишь одну переменную индекса цикла - её текущее значение, и начинаем новый цикл (при увеличении количества исторических ордеров) от значения этой переменной, а не от нуля. А значение в эту переменную заносится в OnInit() при старте и перезапуске советника, и при закрытии новой позиции. Т.е., таким образом мы избегаем необходимости записи и чтения данных о позиции и работы с накопителем.
Думаю, что такой подход наиболее выгоден, потому, что
1. Нужно помнить значение лишь индекса цикла
2. Получать данные только в нужный момент прямым обращением к закрытому ордеру по его индексу.
3. Не нужно городить функционал чтения/записи данных
4. Это быстрее как в работе, так и в написании.
И, да, я согласен, что данные нужно свои все знать - сам так делаю. Но знать их желательно выгодно для программы и себя.
Не замечал, чтобы тикет позиции менялся, пока она открыта. Он обычно равен тикету первого ордера, открывшего эту позицию.
Последняя закрытая - а если не один советник торгует на символе, плюс ручная торговля?Не замечал, чтобы тикет позиции менялся, пока она открыта. Он обычно равен тикету первого ордера, открывшего эту позицию.
Последняя закрытая - а если не один советник торгует на символе, плюс ручная торговля?Доливка или частичное закрытие, и тикет уже другой. Нужно определять какой тикет произошёл от какого и перезаписывать запомненный. Впрочем, не понятно о какой платформе речь - в обеих чуть по-разному, но всё равно нужно отслеживать.
"Последняя закрытая, принадлежащая этому советнику" имеется в виду.