• Тинькофф Банк-лучшие банковские продукты еще выгоднее
    Выбирайте продукт от банка Тинькофф
  • Уважаемые форумчане, друзья и посетители!
    Поступило предложение ( ссылка на обсуждение ) на сбор средств поддержания форума в рабочем состоянии с 1 июня ( оплата хостинга, бэкап ежедневный на другой хостинг и тд), отчетность будет предоставляться ежемесячно. Пока на ЮMoney ( яндекс деньги), доступно картой перевод, далее добавлю другие способы. Сумму перевода указывайте на ваш выбор исходя из своих возможностей.
    Форум продолжает свою работу благодаря Вашим пожертвованиям.

Торговать из индикатора или вызов стратегии из индикатора

Парни, а что мешает для нормального восприятия, проделать следующее.
Код/части, прилагаемый заключать в редакторе в код..

вставить_код.png
 
Спасибо, будем иметь ввиду.
 
Вообщем ковырялся, ковырялся - всё перекинул в стратегию и по крайней мере работает) Только не дает тестить в Strategy Analizator( Никаких ошибок, просто не включается. В маркет реплеере всё норм работает.
Код бы глянуть. Сходу и не подскажешь.. может в коде есть что-то типа if (Historical) return? Или стратегия требует больше баров Min. bars required. Сталкивался, что анализатор не прогонял робота на дневных графиках (даже если установить минутки=1440) при отложенных стоп ордерах.
 
if (Historical) return - такая штука отсутствует. Может проблема в том, что не поддерживает работу функции protected override void OnMarketData(MarketDataEventArgs e)? Поставил точку останова внутрь функции, так она и не срабатывает, в OnMarketData просто не входит отладчик.
 
OnMarketData() вызывается только на реалтайме и только если поддерживается поставщиком данных (т.н. Level I)
 
Жаль.. А не подскажете, каким способом можно определить максимальный объём в баре (не объём всего бара), не прибегая к помощи OnMarketData()?
 
Если речь идет о максимальном проторгованном объеме за одну сделку, то самый надежный результат даст OnMarketData(). Второй по качеству источник - OnBarUpdate() при COBC=False, но там возможны аггрегирования. На истории, по понятным причинам, ничего определить не удастся.

Вообще говоря, для работы с такой статистикой вам необходим Level 1, он как раз и служит для подобных целей.
 
1 пункт на фото. Речь шла о максимальном объёме в баре (скажем за минуту). Насколько понял это не за одну сделку. Минута прошла, бар прорисовался до конца - вот в нём и ищем максимальное значение (в первом рассматриваемом баре с объёмами 27,11,23,10 мне нужно получить значение 27, в следующем баре 27, в следующем 43 и т.д.)
l7iSnjl.png

2 пункт на фото. Если ли возможность получить объёмы на high и low бара? (в рассматриваемом баре это 12 Low и 1 high)
И ещё вопрос: как ограничить "срок жизни" выставленного ордера? Скажем выставляю ордер EnterLongLimit(0, true, 1, ARRAY.price, "buy");. Необходимо после n баров его отменять. Находил функцию CancelOrder() в хэлпе. Другого варианта нету? Этот вариант, насколько я понял (точнее пример приведенный) он может обрабатывать только один ордер. В моём случае в момент времени могут быть выставлены несколько ордеров, т.е. необходимо для каждого отсчитывать n баров, и знать как обратиться именно к нужному ордеру и закрыть его.. В этом я не совсем разобрался(
 
Последнее редактирование:
Выставляйте параметр COBC=False и группируйте сделки по ценам в OnBarUpdate(). Таким образом и получите распределение по ценам. High & Low в этом смысле ничем не отличается от любой другой цены.

Что касается закрытия ордеров, то здесь 2 варианта:
  • в managed approach ордера по умолчанию выставляются на один бар и отменяются на следующем, т.е. просто на каждом баре снова ставьте ордер, до тех пор пока ваши условия выполняются.
  • в unmanaged approach придется следить за актуальностью ордера самостоятельно. В общем-то, это несложно: на каждом первом тике бара проверяете, актуален ли ваш ордер, и если нет - отменяете его.
Т.е. вы двигаетесь в правильном направлении.
 
Выставляйте параметр COBC=False и группируйте сделки по ценам в OnBarUpdate(). Таким образом и получите распределение по ценам. High & Low в этом смысле ничем не отличается от любой другой цены.
High & Low мне нужны не цены, а именно объёмы на High и Low бара (т.е. ask + bid на уровне этой цены скажем за 1 минуту). Либо я Вас не понял что Вы имели ввиду..

..и группируйте сделки по ценам в OnBarUpdate()
А каким образом это делать в OnBarUpdate()? Я знаю только как в OnMarketData() это делать.. Создаю массив и обрабатываю каждый тик - записываю bid и ask в массив с ценами, складываю ask + bid и получаю объём на уровне цены, что в принципе отражено на скрине выше)
 
OnBarUpdate() в теории дает вам поток тех же сделок, что и OnMarketData(). Поэтому логика тоже должна быть идентичной, хоть для первой функции, хоть для второй.
Cм. GetCurrentAsk(), GetCurrentAskVolume() и т.п.
 
Не подскажете, существует ли в NT функционал по отлавливанию событий "profit target" и "stop loss"?
 
И существует ли возможность выставления ордера, если один уже выставлен?
 
Что вы имеете ввиду под событием ProfitTarget?
Когда выставляется лимитный ордер (sell или buy) при фиксировании прибыли profit target или при стоп лоссе NT проговаривает что-то на английском, т.е. как завершился выставленный ордер. Можно ли как-то узнать (скажем время) когда фиксируется прибыль (profit target на графике) или срабатывает Stop loss выставленного ордера?
rZvZvEe.png
 
смотрите функции OnOrderUpdate()/OnExecution()
 
смотрите функции OnOrderUpdate()/OnExecution()
Ага, спасибо большое, буду разбираться)
И ещё назрел такой вопрос - если избавлюсь от OnMarketData() и буду группировать сделки по ценам в OnBarUpdate() - я смогу воспользоваться функцией Backtest и протестировать свою стратегию? Или же всё-таки придётся прибегнуть к индикатору и передавать необходимые данные из него?
 
Последнее редактирование:
Как раз если использовать OnMarketData() то бэктестинг недоступен. Т.е. тестируется на истории только OnBarUpdate(). Но опять же, польза от подобного тестирования весьма специфична, т.к. идет прогон стратегии по точкам Close.
 
Понятно, тогда то что нужно) Уже успел всё перекинуть/передать в OnBarUpdate(), не нашел только как переделать такие конструкции:
if (e.MarketDataType == MarketDataType.Last)
if (e.MarketDataType == MarketDataType.Ask)
if (e.MarketDataType == MarketDataType.Bid)
e.Volume

Не подскажете, как данные конструкции по аналогии будут выглядеть в OnBarUpdate()?
 
Назад
Верх Низ