• Demo счет NinjaTrader, регистрируется в брокерской компании NinjaTrader Brokerage . NinjaTrader™, LLC
    Ссылка на демо счет NinjaTrader
    Фид на соединении Continuum/CQG.
    Для справки: Continuum - это брэнд CQG, и ни чем они не отличаются друг от друга.
    Обратите внимание, что в настоящее время CQG не высылает логин и пароль на электронные адреса от mail.ru, bk.ru, list.ru, inbox.ru, поэтому необходимо повторить регистрацию с электронного адреса от другого домейна (yahoo, gmail, и тд).
  • NinjaTrader с зарекомендовавшим себя брокерским сервисом предоставляет наилучшие условия для фьючерсной торговли, включая:
    • Низкие комиссии: Экономьте на торгах через низкие и понятные комиссии
    • Низкая маржа: Всего $50 для микро контрактов
    • Низкие минимумы: Откройте счет от $400
    • Бесплатная платформа: Включает весь необходимый функционал для торговли в реале
  • Уважаемые посетители форума!
    При регистрации на форуме отправляется письмо подтверждения на ваш почтовый ящик, если письмо не пришло, просьба проверить папку "спам" вашего почтового ящика, возможно письмо попало туда.
  • Сколько я реально плачу комиссии?
    Подробнее по ссылке

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

smarthead

Member
NinjaTrader
Коллеги, подскажите зачем в конце данного кода:
http://ninjatrader.com/support/helpGuides/nt8/en-us/?advanced_order_handling.htm#TheOrderClass
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
Коллеги, подскажите зачем в конце данного кода:
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
Arkadiy, можно по-подробнее, какой участок коды имеется ввиду? Я так понимаю, что entryOrder очищается для возможности входа по новому ордеру, а тогда что происходит с действующим открытым? Как им управлять?
Я так понял, что OnOrderUpdate() метод основанный на событии какого-либо изменения ордеров. Аналог OnBarUpdate(), который активизируется на возникновение нового бара.
Хотелось бы ясности в механизме его работы, простыми словами. Что куда летит, заносится и обнуляется. Если не сложно помогите разобраться.
 
Последнее редактирование:

Arkadiy

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

Arkadiy

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

Вложения

smarthead

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

Arkadiy

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

Георгий

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

Arkadiy

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

Muratik

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

smarthead

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

Arkadiy

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

smarthead

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

NT8

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

smarthead

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

Вложения

Верх Низ