Обсуждение статьи "Кроссплатформенный торговый советник: Классы CExpertAdvisor и CExpertAdvisors" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Как исправить эти ошибки? Программа разработана на основе вашего примера.
В функции OnDeinit() у меня есть только experts.OnDeinit().
В функции OnInit() только experts.OnTick();
А в функции signal я просто создаю пользовательские объекты индикатора так же, как в ваших примерах.
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Как исправить эти ошибки? Программа разработана на основе вашего примера.
В функции OnDeinit() у меня есть только experts.OnDeinit().
В функции OnInit() только experts.OnTick();
А в функции signal я просто создаю пользовательские объекты индикатора так же, как и в ваших примерах.
Это нормально, моя ошибка
Позвольте мне сообщить еще об одной возможной ошибке, если вы не возражаете.
Он не возвращает количество открытых ордеров. Я начал проверять и обнаружил, что проблема связана с OrdersBase и режимом сортировки.
Пришлось добавить следующий код:
Я не знаю, почему он не инициализируется с правильным режимом сортировки или я должен инициализировать его дополнительно... без понятия.
Позвольте мне сообщить еще об одной возможной ошибке, если вы не возражаете.
Он не возвращает количество открытых ордеров. Я начал проверять и обнаружил, что проблема связана с OrdersBase и режимом сортировки.
Пришлось добавить следующий код:
Я не знаю, почему он не инициализируется с правильным режимом сортировки или я должен инициализировать его дополнительно... без понятия.
Конструктор COrdersBase имеет следующий код:
В начале он сортирует свой внутренний массив объектов, если он еще не отсортирован, но я уверен, что вы уже знаете об этом.
Он может стать неотсортированным, если в него добавляются другие элементы без использования NewOrder() (например, Add()).
Я не могу воспроизвести возникшую у вас проблему. Мои результаты всегда возвращаются отсортированными на протяжении всего теста. Попробуйте найти момент времени, когда массив впервые становится неотсортированным в вашем тесте. Это может дать подсказку об источнике проблемы.
Здравствуйте,
Я дам вам знать, если снова столкнусь с этой проблемой.
У меня есть еще один вопрос. Как получить текущий экземпляр эксперта, который вызывает модуль signal?
Допустим, у меня есть класс signal, в котором есть функция проверки результатов предыдущих ордеров. У меня есть несколько экземпляров экспертов. Так как же мне получить текущие ордера эксперта, который вызывает функцию проверки сигнала?
Или, может быть, есть другое правильное решение? Не могли бы вы поделиться какой-нибудь идеей или куском кода для этого.
Моя цель - создать сигнал, который будет работать по-разному в зависимости от результата предыдущего ордера/позиции.
Существует множество способов сделать это, и они могут отличаться у разных программистов. По умолчанию экземпляры экспертов действуют независимо друг от друга. Вы можете реализовать это так, чтобы экземпляры могли обмениваться одной и той же информацией.
Если вы хотите различать сделки, открытые каждым из экспертов, вы можете начать с присвоения уникального магического номера для каждого экземпляра. Я не смогу помочь вам дальше, если вы не покажете свой код.
Энрико,
Мой код полностью основан на ваших последних примерах.
У меня есть только одно глобальное определение CExpertAdvisors experts;
В OnInit() я инициализирую модуль money/stops/signal и затем добавляю их для каждого эксперта.
В OnTick() у меня есть только experts.OnTick()
И у меня есть мой пользовательский класс сигнала с Calculate(), LongCondition(), ShortCondition() и другими. Этот сигнал добавляется для каждого экземпляра эксперта.
Теперь я просто хочу, чтобы логика сигнала зависела от последнего ордера/результата позиции каждого конкретного эксперта. Это не связано с магическим числом (кстати, все мои экспертные экземпляры имеют разные магические числа). В вызываемых функциях Calculate(), LongCondition(), ShortCondition() у меня нет ни магии, ни каких-либо других деталей, которые могли бы помочь мне идентифицировать эксперта и в дальнейшем найти его ордера.
Что касается кода, то пусть это будет функция Calculate(), вот так:
Надеюсь, вы меня поняли. Есть ли способ реализовать это без модификации кода вашей библиотеки?
Здравствуйте, Энрико,
Я все еще пытаюсь найти возможный способ определить, какой именно эксперт вызывает функции проверки сигнала. Как мне это сделать? Подскажите, пожалуйста.
Еще один вопрос. Если я хочу иметь эксперта, торгующего несколькими парами, как мне его инициализировать? В CExpertAdvisorBase::Init() я должен указать имя символа.
Как создать тип ММ на основе результатов предыдущих заказов? Это так негибко...