Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 247
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вставляйте код правильно, альт S или по иконке, подсказка код.
А зачем вам массив SaveTick?
Вы используете только 2 элемента массива. Замените их на глобальные или статик переменные, если объявляете в функции.
Не разумно для 2х переменных использовать массив.
И судя по всему, вы вызываете массивы до вызова функции FindTicket() в которой задается размер массива SaveTick. И происходит выход за пределы массива.
Спасибо. разобрался.
Подскажите в чем ошибка, мне кажется не правильно считает функция
***Спасибо. разобрался.
Подскажите в чем ошибка, мне кажется не правильно считает функция
Код правильно вставляйте, это 13-й квадратик сверху окна ответа.
А вы можете словами написать, что делает функция построчно.
Судя по всему конечно не правильно.
И непонятно, где и как переменной Tick присваивается тикет ордера. И зачем проверки на магик и тип ордера по такому условия
_magic < 0 || OrderMagicNumber() == _magic
Если функция вызывается с магиком меньше нуля или магик равек магик номеру выбранного ордера мы запрашиваем размер пункта и если он равен нулю мы ищем пустое значение в символе инструмента ордера... ну и далее.
Да и помните, ордер селект заполняет структуру данных ордера и хранит ее. И только после следующего ордер селект с другим номером или тикетом ордера данные в этой структуре поменяются.
Т.е. ОрдерСенд не заполняет структуру данных ордера, но возвращает тикет ордера или минус 1. А структура ордера заполняется только ОрдерСелект. И потом из этой структуры можно получить данные этого ордера.
Код правильно вставляйте, это 13-й квадратик сверху окна ответа.
А вы можете словами написать, что делает функция построчно.
Судя по всему конечно не правильно.
И непонятно, где и как переменной Tick присваивается тикет ордера. И зачем проверки на магик и тип ордера по такому условия
_magic < 0 || OrderMagicNumber() == _magic
Если функция вызывается с магиком меньше нуля или магик равек магик номеру выбранного ордера мы запрашиваем размер пункта и если он равен нулю мы ищем пустое значение в символе инструмента ордера... ну и далее.
Да и помните, ордер селект заполняет структуру данных ордера и хранит ее. И только после следующего ордер селект с другим номером или тикетом ордера данные в этой структуре поменяются.
Т.е. ОрдерСенд не заполняет структуру данных ордера, но возвращает тикет ордера или минус 1. А структура ордера заполняется только ОрдерСелект. И потом из этой структуры можно получить данные этого ордера.
В первой функции нахожу тикет нужного ордера. А вторая должна посчитать профит всех закрытых ордеров после этого тикета. Профит тех, что были до него, мне неинтересны. Вот вторая, считает криво. При открытие ордера вызывается эти 2 функции, и соответственно он должен быть равен 0, но он не равен.
PS воспользовался Вашим советом, отказался от массивов)
12-й квадратик сверху)
В первой функции нахожу тикет нужного ордера. А вторая должна посчитать профит всех закрытых ордеров после этого тикета. Профит тех, что были до него, мне неинтересны.
PS воспользовался Вашим советом, отказался от массивов)
12-й квадратик сверху)
В первой функции находится тикет с наибольшим номером, если тикеты возрастают с номерами))) На следующей итерации цикла тикет следующего по номеру ордера сравнивается с тикетом предыдущего ордера. Ордер селект заполняет структуры ордера, а ОрдерТикет получает из этой структуры значение тикета.
Построчно для себя напиши или проговори, что делает каждая строчка кода) Лучше напиши, так самому будет понятней.
Во второй функции ОрдерСелект по одному и тому же тикету будет заполнять структуру ордера одними и теми же данными ордера с тикетом ТикФ)
В первой функции находится тикет с наибольшим номером, если тикеты возрастают с номерами))) На следующей итерации цикла тикет следующего по номеру ордера сравнивается с тикетом предыдущего ордера. Ордер селект заполняет структуры ордера, а ОрдерТикет получает из этой структуры значение тикета.
Построчно для себя напиши или проговори, что делает каждая строчка кода) Лучше напиши, так самому будет понятней.
Во второй функции ОрдерСелект по одному и тому же тикету будет заполнять структуру ордера одними и теми же данными ордера с тикетом ТикФ)
Проговаривал, но видно плохо с логикой в отношении данного языка. Подскажи Как определить тикет последнего открытого ордера?
И как посчитать профит всех закрытых ордеров идущих после него?
Проговаривал, но видно плохо с логикой в отношении данного языка. Подскажи Как определить тикет последнего открытого ордера?
И как посчитать профит всех закрытых ордеров идущих после него?
По времени открытия ордера. Оно должно быть самым большим) И только не по номеру ордера, и часто тикеты тоже не помогут. Или запоминать в свою базу порядковые номера, тикеты, состояние ордеров и время открытия / закрытия.
И лучше проговаривать логику до конца. Так потом легче. Начинать лучше с необходимых данных, и их должно быть достаточно для решения)
У нас есть время открытия ордеров (не отложенных). Есть их тикеты. Есть у каждого рыночного ордера цена открытия, СЛ и ТП. И есть время закрытия ордеров. И после закрытия ордера заполняются поля Профит.
Вот из этих данных нужно сверстать логику.
Фраза закрытые ордера идущие после последнего открытого не определена совсем. Идти могут по номеру, по тикету и по времени.
По времени открытия ордера. Оно должно быть самым большим)
пишите правильно, но что то код получился несколько витиеватый )))
по моему как пишите так и делать:
ЗЫ: OrderSelect() по номеру тикета будет намного дольше выполняться чем просто перебор по открытым ордерам
пишите правильно, но что то код получился несколько витиеватый )))
по моему как пишите так и делать:
ЗЫ: OrderSelect() по номеру тикета будет намного дольше выполняться чем просто перебор по открытым ордерам
Спасибо Игорь, просто когда не понимают сути, правильный код по чему-то сути не доносит, поэтому и прошу сформулировать не сложные алгоритмы словами)))
По времени открытия ордера. Оно должно быть самым большим) И только не по номеру ордера, и часто тикеты тоже не помогут. Или запоминать в свою базу порядковые номера, тикеты, состояние ордеров и время открытия / закрытия.
И лучше проговаривать логику до конца. Так потом легче. Начинать лучше с необходимых данных, и их должно быть достаточно для решения)
У нас есть время открытия ордеров (не отложенных). Есть их тикеты. Есть у каждого рыночного ордера цена открытия, СЛ и ТП. И есть время закрытия ордеров. И после закрытия ордера заполняются поля Профит.
Вот из этих данных нужно сверстать логику.
Фраза закрытые ордера идущие после последнего открытого не определена совсем. Идти могут по номеру, по тикету и по времени.
Спасибо большое за ответы. Часть из Ваших предложений я реализовал.
Написал функция, находит нужный тик.
Написал функцию, которая считает профит всех закрытых ордеров после нужного ордер тика выбранной функции. Осталось одно поправить ее по вашим рекомендациям, добавить проверку по времени и так далее.
Только одно теперь меня смущает, а считает как то не так. Если ТР выходит 0.02 в результате теста, то она считает и пишет в Comment 0.1300. Подскажите, что с ней не так?