Вопросы по Мастеру MQL5 и стандартной библиотеке торговых классов - страница 10

 
Sevrer:

Здравствуйте.

 Решил написать свой модуль сигналов исключительно в познавательных целях. Столкнулся с проблемой. Мне необходимо устанавливать отложенные ордера, вроде разобрался, что это можно делать через CExpertSignal::OpenLongParams(...). Да вот незадача, тестер матерится на Invalid Expiration. Поковыряв исходники, стало понятно, что никаких type time, как кроме ORDER_TIME_SPECIFIED, не получится, а хотелось бы ORDER_TIME_GTC.

 

Я пока сделал хитрый ход, но он не совсем правильный. Я поправил в библиотеке функцию:

 

Что можете посоветовать 

Здравствуйте.

Вы совершенно правы. Нулевую экспирацию я не учёл.

Ваше решение нормальное. Я внесу соответствующие правки в Стандартную Библиотеку.

Спасибо.

 
uncleVic:

Здравствуйте.

Вы совершенно правы. Нулевую экспирацию я не учёл.

Ваше решение нормальное. Я внесу соответствующие правки в Стандартную Библиотеку.

Спасибо.

Это будет хорошо, а пока, в данной ситуации я нашел другой выход, правильный :) , создав класс унаследованный от CExpert, в котором я переопределил функции CheckOpenLong() и CheckOpenShort(), и уже там внес коррективы такого рода:

        if (expiration == TimeCurrent() || expiration == 0)
        {
                m_expiration = 0;
                m_trade.SetOrderTypeTime(ORDER_TIME_GTC);
        }
        else
        {
              if(!m_trade.SetOrderExpiration(expiration))
        	{
         		m_expiration=expiration;
        	}
        }
 
Sevrer:

Это будет хорошо, а пока, в данной ситуации я нашел другой выход, правильный :) , создав класс унаследованный от CExpert, в котором я переопределил функции CheckOpenLong() и CheckOpenShort(), и уже там внес коррективы такого рода:

 


Наследование - это самый правильный подход.
 

Поясните пожалуйста логику роботы параметра Expert_EveryTick

При Expert_EveryTick=true эксперт обрабатывает каждый тик? Тоесть на каждом новом тике проверяет и условия входа\выхода, и сопровождения позиции(трал), верно?

А при Expert_EveryTick=fasle - только при первом тике нового бара? и трал тоже только на первом тике будет срабатывать?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
mr.Taras:

Поясните пожалуйста логику роботы параметра Expert_EveryTick

При Expert_EveryTick=true эксперт обрабатывает каждый тик? Тоесть на каждом новом тике проверяет и условия входа\выхода, и сопровождения позиции(трал), верно?

А при Expert_EveryTick=fasle - только при первом тике нового бара? и трал тоже только на первом тике будет срабатывать?


Да, Вы всё правильно поняли.
 

Еще вопросы по самой логике работы эксперта:


есть открытая позиция например бай и фиксированый лот например 1.

есть сигнал в другую сторону, на селл.

какие действия советника? будет две сделки селл по 1 лоту( первая "закроет" бай) или же одна на 2 лота? есть ли разница  в "минусе" или в "плюсе" текущий бай?


советник сам не "доливается", тоесть, если есть позиция бай и опять сигнал на бай? какие методы надо переопределить что б "долился", CheckOpenLong()?

 
mr.Taras:

Еще вопросы по самой логике работы эксперта:


1. есть открытая позиция например бай и фиксированый лот например 1.

есть сигнал в другую сторону, на селл.

какие действия советника? будет две сделки селл по 1 лоту( первая "закроет" бай) или же одна на 2 лота? есть ли разница  в "минусе" или в "плюсе" текущий бай?


2. советник сам не "доливается", тоесть, если есть позиция бай и опять сигнал на бай? какие методы надо переопределить что б "долился", CheckOpenLong()?


1. два порога срабатывания (параметры настройка советника). если превышен порог Close позиция просто закроется. если превышены два порога (Close и Open) позиция развернётся. -/+ разницы нет.

2. метод Processing

 
uncleVic:

1. два порога срабатывания (параметры настройка советника). если превышен порог Close позиция просто закроется. если превышены два порога (Close и Open) позиция развернётся. -/+ разницы нет.

2. метод Processing

Пороги Close и Open - это результат "голосования" что возвращают ShortCondition() или LongCondition() в модуле сигналов?

 
mr.Taras:

Пороги Close и Open - это результат "голосования" что возвращают ShortCondition() или LongCondition() в модуле сигналов?

Пороги - это параметры (Signal_ThresholdOpen и Signal_ThresholdClose) с которыми сравнивается результат "голосования".
 

Три вопроса:

  1. Как заставить сигнальный модуль работать только по ценам открытия, а не на каждом тике?
  2. Как получить значения голосования сигнального модуля в модуле сопровождения позиций? Необходимо тралить по уже вычисленному сигналу, а не сочинять другой сигнальный модуль для сопровождения.
  3. Как получить значения голосования сигнального модуля в модуле управления капиталом и риском? Необходимо открывать объемы в зависимости от уже вычисленных торговых сигналов, а не сочинять другой сигнальный модуль для вычисления объемов.

Теоретически, можно конечно же собрать советник с помощью мастера, а потом влезть в код и вручную все это хозяйство прикрутить. Но желательно чтобы это все было реализовано в виде стандартных методов, т.е. для чайников, которые захотят воспользоваться мастером, чтобы им не пришлось лезть в код и править, например, в случае если он захотел заменить один сигнальный модуль на другой.

Причина обращения: