• Demo счет NinjaTrader, регистрируется в брокерской компании NinjaTrader Brokerage . NinjaTrader™, LLC
    Ссылка на демо счет NinjaTrader
    Фид на соединении Continuum/CQG.
    Для справки: Continuum - это брэнд CQG, и ни чем они не отличаются друг от друга.
  • Сколько я реально плачу комиссии?
    Подробнее по ссылке

Программирование Управление ордерами с OnOrderUpdate()

smarthead

Member
NinjaTrader
#1
Коллеги, подскажите зачем в конце данного кода:
http://ninjatrader.com/support/helpGuides/nt8/en-us/?advanced_order_handling.htm#TheOrderClass

переменная entryOrder устанавливается в null:
if (order.OrderState == OrderState.Filled)
entryOrder = null;

ведь она остаётся в состоянии Filled и к ней надо будет обращаться для закрытия или трала, а она окажется пустой. Или я чего-то упустил?
 

Arkadiy

Well-Known Member
NinjaTrader
#2
Коллеги, подскажите зачем в конце данного кода:
http://ninjatrader.com/support/helpGuides/nt8/en-us/?advanced_order_handling.htm#TheOrderClass
переменная entryOrder устанавливается в null:
if (order.OrderState == OrderState.Filled)
entryOrder = null;

ведь она остаётся в состоянии Filled и к ней надо будет обращаться для закрытия или трала, а она окажется пустой. Или я чего-то упустил?
потому как есть условие на проверку этой переменной
 

smarthead

Member
NinjaTrader
#3
Arkadiy, можно по-подробнее, какой участок коды имеется ввиду? Я так понимаю, что entryOrder очищается для возможности входа по новому ордеру, а тогда что происходит с действующим открытым? Как им управлять?
Я так понял, что OnOrderUpdate() метод основанный на событии какого-либо изменения ордеров. Аналог OnBarUpdate(), который активизируется на возникновение нового бара.
Хотелось бы ясности в механизме его работы, простыми словами. Что куда летит, заносится и обнуляется. Если не сложно помогите разобраться.
 
Последнее редактирование:

Arkadiy

Well-Known Member
NinjaTrader
#4
я так думаю что вы все правильно поняли, но пример не несет в себе гарантии того что алгоритм будет заточен под вас. тут просто показано, как работать с ордером при открытии, т.е. вы открыли ордер, потом находите его среди прочих, и можете им манипулировать, то что он очищается, это или в виде примера так показали, или ошибка как и та что выше
Код:
if (order.Name == "myEntryOrder" && orderState != OrderState.Filled)
посмотрите внимательно стоит в втором сравнение одно равенство.
Если вы хотите управлять ордерами, думаю логично будет класть их в массив и оттуда уже управлять ими.
 

Arkadiy

Well-Known Member
NinjaTrader
#5
Не стал править прошлый пост специально!!!! при копировании кода на сайте оригинала знак "!" не виден, а тут есть. как так можно читать мануал???
 

Вложения

smarthead

Member
NinjaTrader
#6
После того как я увидел != вопросов нет. Как-то не доглядел что это =, а не ==. Знака присваивания там и не может быть.
Arkadiy, спасибо
 

Muratik

Well-Known Member
NinjaTrader
#7

Arkadiy

Well-Known Member
NinjaTrader
#8
После того как я увидел != вопросов нет. Как-то не доглядел что это =, а не ==. Знака присваивания там и не может быть.
Arkadiy, спасибо
да вот как бы теперь донести до авторов что на сайте такая бяда, наверное Светлане надо написать.
 

Георгий

Well-Known Member
NinjaTrader
#9
Сорри!) Не разобрался! Светлана ещё в отпуске.
 
Последнее редактирование:

smarthead

Member
NinjaTrader
#12
А вообще для интересующихся реализацией алгоритма управления ордерами и позициями, нашёл хороший пример форуме NT. Во вложении.
 

Вложения

Arkadiy

Well-Known Member
NinjaTrader
#13
Если ошибки есть на сайте может создать отдельную ветку на форуме, потому как если сюда заглядывают разработчики НТ8, им будет легче исправить мануал, ну и те кто учатся программировать так же найдут эти ошибки.
 

Muratik

Well-Known Member
NinjaTrader
#14
может создать отдельную ветку на форуме, потому как если сюда заглядывают разработчики НТ8
Вот давно хотелось узнать про это "если заглядываю сюда". Интересно, для "заглядывающих" сюда это их "заглядывание" - должностная обязанность, или просто что то личное... не обязательное... типа любопытства? Если обязанность, то тогда стоит такую тему/ветку открывать, если нет, то получается просто "гадание на кофе" - заглянет не заглянет. А для себя, для своих, да, такая тема будет иметь ценность.
 

smarthead

Member
NinjaTrader
#15
А вообще для интересующихся реализацией алгоритма управления ордерами и позициями, нашёл хороший пример форуме NT. Во вложении.
Ребята, помогите разобраться по файлу, который я вложил в ссылке выше (http://ninjafutures.ru/threads/upravlenie-orderami-s-onorderupdate.1581/#post-28460). Ход логики от выставления entryOrder и выставления под него первоначальных stopOrder и targetOrder в методе OnExecutionUpdate() вроде как понятен. Но теперь ломаю голову как правильно организовать подтягивание стопа по логике, которая будет сидеть в OnBarUpdate() и подавать сигналы на подтяжку. Не могу понять как это увязать во всех методах управления ордерами. Или логику подтяжки нужно размещать в OnExecutionUpdate(), то как тогда она будет согласована с обновлениями баров OnBarUpdate()? Чувствую что заблудился в трёх соснах, но решения найти не получается. Помогите в общих чертах описать принципы и подходы для организации подтяжки(трала) Стопа в рамках данного примера.
Спасибо.
 

Arkadiy

Well-Known Member
NinjaTrader
#16
Привет. Я не делал такого, думаю если у тебя логика просчета стопа будет находиться в методе OnBarUpdate() то делай там и управление ордером. Или вынеси в отдельный метод. Думаю дальше надо смотреть в функцию изменения ордера stopOrder.
 

smarthead

Member
NinjaTrader
#18
Я так понимаю, нет особого смысла вторые и последующие СтопОрдера (они же ТрейлингСтопы) контролировать исполнение их через OnOrderUpdate() и OnExecutionUpdate(). Ведь они будут устанавливаться под уже однажды проверенный на заполнение entryOrder. Будут брать количество entryOrder и его имя. Получается что методы OnOrderUpdate() и OnExecutionUpdate() можно не применять для трала, а отсылать ордера ТрейлингСтопов на установку прямо из OnBarUpdate() минуя их обработку и проверку в OnOrderUpdate() и OnExecutionUpdate(). Корректно ли так рассуждать? Будет ли это слабым алгоритмом?
 
Последнее редактирование:

NT8

Well-Known Member
NinjaTrader
#19
Получается что методы OnOrderUpdate() и OnExecutionUpdate() можно не применять для трала, а отсылать ордера ТрейлингСтопов на установку прямо из OnBarUpdate(). Корректно ли так рассуждать?
Да. Трал происходит при изменении котировок (OnBarUpdate), а OnOrderUpdate и OnExecutionUpdate вызывается при изменении ордеров и позиций.
 

smarthead

Member
NinjaTrader
#20
Ребята, кому интересно нарыл такой пример кода (см. вложение). Сижу изучаю что куда летит. Если кто ковыряется с подобными вещами, то пишите свои мысли или замечания.
 

Вложения