Вау сколько кода! :)
Вау сколько кода! :)
И главное - весь работает! =)))
Здравствуйте!
У меня вопрос по функции пункта №3 Одна позиция одного типа.
Мне понятно, что если у меня ордера по двум магическим числам,
то простое решение сделать две таких функции с magic1 и magic2.
Но мне необходимо это сделать в одной функции.
Если можно, покажите схематично.
С уважением, Вячеслав.
Мне необходимо, каждый раз как появляется сигнал на продажу или покупку, сравнить его с предыдущим сигналом, точнее сравнить уровни на которых эти сигналы находятся. Кроме этого необходимо вести и еще другие арифметические подсчеты. Я пробовал различные варианты, но без успешно.
Теперь с помощью вашей статьи хочу сделать следующее.
Ниже указанную функцию записать как include, и таким образом зная время открытия последнего ордера (который может быть как в рынке, так и в истории) получить значение цены открытия этого ордера так и другие нужные мне значения.
datetime GetLastOpenTime(int type) { datetime tm = -1; int cnt = OrdersTotal(); for (int i=0; i<cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() != type) continue; tm = MathMax(tm, OrderOpenTime()); } cnt = HistoryTotal(); for (i=0; i<cnt; i++) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() != type) continue; tm = MathMax(tm, OrderOpenTime()); } return (tm); }
И таким образом, вызывая данную функцию в необходимых местах
я смогу получать необходимые мне данные. Но как это правильно
и без ошибок сделать я пока затрудняюсь. Кроме этого, поскольку
тактика связана с локированными позициями, то мне необходимо
вести учет разности цен открытия локированных позиций, и здесь
как я вижу, очевидные преимущества функций размещенных в папке
include.
Хотелось бы поподробнее и детельнее понять работу таких функций
include.
С уважением, Вячеслав.
Здравствуйте!
У меня вопрос по функции пункта №3 Одна позиция одного типа.
Мне понятно, что если у меня ордера по двум магическим числам,
то простое решение сделать две таких функции с magic1 и magic2.
Но мне необходимо это сделать в одной функции.
Если можно, покажите схематично.
- вызываем функцию OneTypeOrdersInit для magic1, обрабатываем первую часть ордеров, а потом вызываем её же с magic2, и обрабатываем 2-ю часть.
- копируем функцию OneTypeOrdersInit, переименовываем её и все переменные, объявленные на глобальном уровне, и вызываем последовательно OneTypeOrdersInit и OneTypeOrdersInit_1 (например).
Оба варианта - не самые правильные...
Для вашего случая была создана функция AllOrdersInit - с её помощью можно управлять любым количеством ордеров ;)
Если можно, то поясните, пожалуйста, еще такой вопрос.
Мне необходимо, каждый раз как появляется сигнал на продажу или покупку, сравнить его с предыдущим сигналом, точнее сравнить уровни на которых эти сигналы находятся. Кроме этого необходимо вести и еще другие арифметические подсчеты. Я пробовал различные варианты, но без успешно.
И таким образом, вызывая данную функцию в необходимых местах
я смогу получать необходимые мне данные. Но как это правильно
и без ошибок сделать я пока затрудняюсь. Кроме этого, поскольку
тактика связана с локированными позициями, то мне необходимо
вести учет разности цен открытия локированных позиций, и здесь
как я вижу, очевидные преимущества функций размещенных в папке
include.
Хотелось бы поподробнее и детельнее понять работу таких функций
include.
Нет разницы, где находится функция - во включаемом файле, или
в коде эксперта.
Мне кажется, вы не совсем понимаете назначение директивы include.
.. Почитайте справку, ответы на многие вопросы вы найдете там.
Для вашего случая была создана функция AllOrdersInit - с её помощью можно управлять любым количеством ордеров ;)
Вопрос, но уже по функции AllOrdersInit я вынес на форум, чтобы не "засорять" место для коментариев.
С уважением, Вячеслав.
Я полностью пересмотрел свой подход при написании советников,
очень легко стало находить ошибки, безумно удобно работать с кодом,
доступна любая переменная ордеров в рынке со своими значениями.
Слегка подредактировав функцию OneTypeOrdersInit( MagicNumber ),
приспособил ее под ордера из истории. И у меня по данной функции
есть уточняющий вопрос, который я и задал на форуме.
С уважением, Вячеслав.
Просьба к автору!
Нельзя ли показать работу последней функции с массивами на
примере вашего же советника, использованного для примера в
данной статье, предположив что вместо 2 отложенных ордеров необходимо
выставить 4 или более, но на других уровнях.
Для меня очень важен пример использования данной функции с
массивами в торгующем советнике.
С уважением, Вячеслав.
Нельзя ли показать работу последней функции с массивами на примере
вашего же советника, использованного для примера в данной статье,
предположив что вместо 2 отложенных ордеров необходимо выставить
4 или более, но на других уровнях.
Для меня очень важен пример использования данной функции с
массивами в торгующем советнике.
Эксперт с использованием этой функции будет очень похож на обычный, только вместо перебора ордеров "от 0 до OrdersTotal()-1" будет перебор ордеров "от 0 до _ExpertOrdersTotal-1". Значение параметров ордеров во втором случае будут получаться не с помощью функций OrderType(), OrderLots() и подобных, а напрямую из массивов _OrderType[], _OrderLots[], и т.д.
Использовать функцию есть смысл только если логика эксперта достаточно сложная, и в течении одного выполнения функции start() необходимо получать значения параметров ордеров много раз. Иначе проще (и быстрее) использовать обычный блок контроля позиций.
Если у вас возникают трудности в написании экспертов, обратитесь к опытному программисту.
Мои координаты есть в моем профиле, других разработчиков вы можете найти на многочисленых форумах (в том числе на этом).
Удачи ;)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
New article Управление ордерами – это просто has been published:
Author: Andrey Khatimlianskii