1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

  2. Demo счет NinjaTrader, регистрируется в брокерской компании NinjaTrader Brokerage . NinjaTrader™, LLC
    Ссылка на демо счет NinjaTrader
    Фид на соединении Continuum/CQG.
    Для справки: Continuum - это брэнд CQG, и ни чем они не отличаются друг от друга.
  3. Уважаемые форумчане!
    Перед тем как написать пост или создать тему с просьбой оказания технической поддержки, вам нужно указать как можно больше информации по теме, к примеру: счет реал или демо, версия Windows, версия NinjaTrader, прикрепить скрин с проблемой и прочее.
    Не забывайте воспользоваться поиском на форуме, возможно уже есть решение вашей проблемы.

    Подробнее по ссылке

    Скрыть объявление
  4. Уважаемые трейдеры!
    NinjaTrader 8 официально начала свой путь!
    Ветка форума для обсуждения по ссылке.
    Скрыть объявление
  5. Сколько я реально плачу комиссии?
    Подробнее по ссылке
    Скрыть объявление
Скрыть объявление
Вебинар: Быстрое управление сложными ордерами с ATM
Когда: среда, 8 ноябрь, 11-00 по Чикаго (CT), 20-00 по Московскому времени
Подробнее по ссылке

Закрыть/прекратить показ объявления можно по крестику, верхнем правом углу.

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

Тема в разделе "Вопросы программирования на C#", создана пользователем NoName, 20 июн 2015.

  1. NoName

    NoName Member NinjaTrader

    Почему если в индикаторе в функции OnBarUpdate() выставлять ордер таким образом:
    Strategy.EnterShortLimit(0, true, 1, PRICE_VOLUME - 1 * TickSize, "sell"); - то он не работает, в отладчике просто выбивает на этой строке. Можно ли как-то по другому из индикатора выставить ордер?
    Или можно ли как-то при определенных условиях в индикаторе вызывать стратегию и в ней уже выставлять ордера?
     
  2. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    Вы вызываете нестатическую функцию класса не имея объекта этого класса, естественно, это приведет к крашу. Существует несколько методов работы с ордерами из индикатора, поищите по ключевому слову Order в метаданных основных классов NT7.
     
    Gellyus, Alexander и Георгий нравится это.
  3. NoName

    NoName Member NinjaTrader

    Не это ли Вы имели ввиду?
    [​IMG]
    "Вы вызываете нестатическую функцию класса не имея объекта этого класса" - это да, понял ошибку, спасибо.
    "..поищите по ключевому слову Order в метаданных основных классов NT7." - можно подробнее где это искать? Или пример неплохо бы.. С платформой знаком недавно, да и с программированием туговато.
     
  4. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    Нет, не это. Вы хотите использовать unsupported features of NinjaTrader не зная платформы и языка - это будет непросто. Я бы рекомендовал начать с простых вещей. Установите VS 2013, разберитесь, как смотреть метаданные классов из DLL. Затем посмотрите на классы из DLL, включенных в поставку NT. Обратите внимание на класс Account - там и будут интересующие вас методы.

    Данный подход поможет вам в написании нестандартного кода. Именно метаданные позволяют понять - какую функциональность можно "наловить" с помощью недокументированных классов, благо разработчики NT в целом следовали best practices & code standards.

    А лучше всего начните с более простых вещей. Скорее всего, вам не нужно программировать ордера из индикатора, скорее всего ваша задача может быть переформулирована/решена в более простых терминах.
     
    Muratik и Alexander нравится это.
  5. NoName

    NoName Member NinjaTrader

    С C# знаком, со студией знаком, знаю в основном как с ней обращаться, с ninjatrader не очень. Также плохо с английским, изучал другой язык..
    Попросили реализовать стратегию. Я писал всё это дело в индикаторе, всё проверил Alertами. Вроде всё работает, где выполняется определенное условие - идёт оповещение. Теперь вместо алертов надо уже непосредственно выставлять ордера.. Вот в этом вся моя проблема.
    Были варианты при наступлении определенных условий в индикаторе вызывать стратегию и там уже выставлять ордера. Либо выставлять ордера из самого индикатора. Но ни то ни другое в виду отсутствия опыта программирования и навыков работы с ордерами да и с NT в целом реализовать не получается, не знаю с чего начать.. Как вариант после вашего сообщения пришла в голову мысль о создании объекта в инициализации индикатора, и потом обращаться к этому объекту, но опять же не знаю с чего начать да и вообще, верный ли подход..

    "Установите VS 2013, разберитесь, как смотреть метаданные классов из DLL. Затем посмотрите на классы из DLL, включенных в поставку NT. Обратите внимание на класс Account - там и будут интересующие вас методы." - Правильно ли я понимаю, что вы предлагаете поиграть с IntelliSense, посмотреть методы, поля классов, что от кого наследуется и т.д.? Поглядел класс Account через IntelliSense - ввиду отсутствия описания методов так и не понял что именно мне нужно(
    И ещё хотелось бы уточнить: смогу ли я потом через маркет реплеер всё это дело прогнать и увидеть где выставляются ордера? Использую OnMarketData()
    И о каких DLL идёт речь?
     
    Последнее редактирование: 25 июн 2015
    Muratik нравится это.
  6. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    В данном случае вы пытаетесь выполнить стандартную задачу стратегии через нестандартное использование индикатора. Лучше так не делать, а использовать прямые методы. Ваша задача - типовая, и решаться она должна самым обычным образом - путем написания стратегии.

    Перепишите ваш индикатор таким образом, чтобы он выдавал торговые сигналы наружу (см. реализацию стандартных индикаторов, вся их, собственно, польза заключается в том, что внешний наблюдатель может видеть сигналы индикаторов). Далее, уже ваше стратегия будет использовать ваш индикатор как генератор сигналов. В классе Strategy есть вся необходимая инфраструктура для работы с ордерами.
     
    Muratik, Георгий и Alexander нравится это.
  7. NoName

    NoName Member NinjaTrader

    "Перепишите ваш индикатор таким образом, чтобы он выдавал торговые сигналы наружу" - именно это я пытался реализовать, но не знаю как, поэтому обращаюсь за помощью к данному форуму..)
    (Я спрашивал: "..Или можно ли как-то при определенных условиях в индикаторе вызывать стратегию и в ней уже выставлять ордера?".)

    Посмотрел стандартные индикаторы, стандартные стратегии - так и не понял механизм, как внешний наблюдатель может видеть сигналы индикаторов. Если вас не затруднит, приведите, пожалуйста, простейший пример как внешний наблюдатель может видеть сигналы индикаторов.


    Попытаюсь дать ответ на свой вопрос:
    В стратегии имеется фрагмент:
    ...
    if (CrossAbove(RSI(14, 0), 30, 1))
    {
    // Draws a square 1 tick above the high of the bar identifying when a limit order is issued
    DrawSquare("My square" + CurrentBar, false, 0, High[0] + 1 * TickSize, Color.DodgerBlue);

    // Enter a long position via a limit order at the current ask price
    EnterLongLimit(GetCurrentAsk(), "RSI");
    ...
    EnterLongLimit(GetCurrentAsk(), "RSI"); - именно здесь идёт обращение к индикатору RSI и берётся оттуда сигнал или снова что-то не правильно понимаю?
     
  8. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    Смотрите, например, реализацию MACD.
    public DataSeries Avg
    ...

    Это и есть серия для внешнего пользователя, т.е. пользователь иникатора MACD имеет доступ к серии Avg.

    По аналогии вы определяет серию в своем индикаторе, которая дает торговые сигналы. Самый простой пример:
    public DataSeries Signal // -1 = Short, 0 = no signal, +1 = Long

    или, если у вас одновременно возможны разносторонние сигналы:
    public BoolSeries LongSignal
    public BoolSeries ShortSignal

    Таким образом, вы можете узнать сигнал в стретегии:
    if (MyCustomIndicator().LongSignal[0])
    {
    // enter long position

    Данное выражении не имеет отношения к RSI, т.к. "RSI" - это строка, в данном случае это просто имя сигнала. Не игнорируйте документацию, она ваш самый главный помощник/источник. Смотрите, вот здесь http://ninjatrader.com/support/helpGuides/nt7/?enterlonglimit.htm написано об этой функции.

    RSI у вас используется в функции CrossAbove().
     
    Георгий и Alexander нравится это.
  9. NoName

    NoName Member NinjaTrader

    Спасибо большое, походу то что нужно! Буду изучать соответствующие материалы. Документацию стараюсь не игнорировать, но какой толк ею пользоваться, если не знаю английского.. Перевожу по возможности то что надо, но всю справку таким образом увы не изучить(
    И ещё один вопрос - подключаю к чарту стратегию, с помощью visual studio присоединяюсь к процессу и пытаюсь поставить точку останова на обновлении бара в стратегии. Почему-то точка останова не срабатывает( (В индикаторах всё хорошо работает). В чём может быть причина, не подскажете?
     
    Alexander нравится это.
  10. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    1) Стратегию необходимо перевести в режим Debug
    2) Иногда точки действительно не подхватываются с первого раза. Похоже, это побочный эффект особенностей компиляции скриптов самим NT. Обычно помогает перекомпилировать и затем перенабросить стратегию. После этого переключитесь в студию - она должна обновить файлы и, как правило, точки останова активируются.
     
    Alexander нравится это.
  11. NoName

    NoName Member NinjaTrader

    Вылезает сообщение "although you have order confirmation enabled, orders generated by a strategy will be submitted without confirmation" при наложении стратегии на чарт - может ли это быть причиной того, что не останавливается на точке останова? Уж как не пробовал, ни в какую не останавливается(( Перевел, но корявый перевод ни о чём толковом не поведал..
    И кстати, такой момент:
    По сути если я сделаю глобальную переменную (скажем типа bool), и буду устанавливать её в true при наступлении определенного условия в индикаторе - то можно в стратегии всё это отслеживать (при обновлении бара проверять состояние) и по сути выставлять ордера после установления переменной в true?
     
  12. Muratik

    Muratik Well-Known Member NinjaTrader

    Приветствую.
    Вышеизложенное наглядный пример того, что категорично, и обязательно, нужен сериал видео уроков (скорее всего много сезонный), в котором максимально подробно детализировать все возможности программирования (робото-, скрипто-, индикаторо-, плагино и т.п.,-строение) в NT её же средствами.
    Наверно большой объём темы, и предполагаемый массовый переход на ожидаемую NT 8 сдерживает. Но всё равно - пробел в этой информации существует и его надо как то качественно заполнить...
     
    Привал нравится это.
  13. NoName

    NoName Member NinjaTrader

    Приветствую! Абсолютно с Вами согласен, но из русскоязычного материала я нашел только пару видеуроков Светланы и этот форум. Остальное всё, к сожалению, на английском( А этой информации конечно же недостаточно.. Была идея купить книжку даже на английском и переводить её, но не нашел ни одной толковой книжки. Приобрел с Амазона одну, но там 54 страницы бестолковщины. Если где либо существуют материалы (видео уроки, робото-, скрипто-, индикаторо-, плагино и т.п.,-строение, толковые книжки, касающиеся NT) - поделитесь информацией о таковых, буду рад изучить данные материалы, чтобы впредь здесь не задавать глупых вопросов)

    Хотелось бы дополнить: обычные уроки по ручной торговле в NT меня не интересуют, т.к. сам я не трейдер. У меня имеются очень скромные навыки программирования на C#, поэтому меня озадачили попытаться написать торгового робота. Вот я и пытаюсь с той информацией, которая у меня есть, сделать что-то толковое.
     
    Последнее редактирование: 26 июн 2015
    Георгий, Muratik и Alexander нравится это.
  14. NoName

    NoName Member NinjaTrader

    NinjaScript Programmer's Launch Pad - кто-нибудь может прокомментировать данную книжку? Какого характера информация, поможет ли новичку в изучении NinjaScript, расскажет ли о взаимодействии индикаторов и стратегий, существуют ли в ней практические примеры, или это переписанный help?
     
  15. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    Это стандартное предупреждение NT, его можно отключить в настройках.

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

    NoName Member NinjaTrader

    OnBarUpdate() почему то в стратегии так и не работает, не могу найти причину( И через отладчик пробовал с включенным дебагом, и пробовал заново компилировать, накладывать стратегию на чарт - безрезультатно.
    Создаю новую стратегию, там в OnBarUpdate() пишу на график и пытаюсь организовать звуковое оповещение - также безрезультатно( Повторюсь, в индикаторе всё прекрасно работает. Какие ещё причины могут быть?

    protected override void OnBarUpdate()
    {
    DrawTextFixed("Text", "Text", TextPosition.TopLeft);
    Alert("Alert", NinjaTrader.Cbi.Priority.High, "Alert", "Alert1.wav", 10, Color.Red, Color.White);
    }
     
  17. NoName

    NoName Member NinjaTrader

    Обнаружил, что когда Enabled перевожу в true и жму Apply (применить стратегию), то Enabled автоматически переводится в false и поэтому наверно всё не работает( С чем это может быть связано?
    [​IMG]
     
  18. CustomTradingSystem

    CustomTradingSystem Member NinjaTrader

    Ваш код - рабочий, дело не в нем. Обратите внимание, что Alert() работает только на реалтайме/реплее.

    Это означает, что NT по какой-то причине деактивирует стратегию. Самая распространенная причина - ошибка в скрипте. Используйте Output Window для отладки.
     
    NoName нравится это.
  19. NoName

    NoName Member NinjaTrader

    Стратегия заработала, теперь вопрос вот в чём:
    Спасибо за пример, делаю так:
    В индикаторе объявляю переменную: public BoolSeries temp;
    инициализирую объект: temp = new BoolSeries(this);
    Далее, где мне надо передать сигнал в стратегию, делаю так: temp.Set(true); И уже в стратегии обрабатываю сигнал:
    if (MyCustomIndicator().temp[0])
    {
    ...
    }

    Но это условие MyCustomIndicator().temp[0] почему-то не срабатывает, в отладчике вообще почему то ни тип не видит переменной, ни значение.. Что опять не так делаю?)
     
  20. NoName

    NoName Member NinjaTrader

    Вообщем ковырялся, ковырялся - всё перекинул в стратегию и по крайней мере работает) Только не дает тестить в Strategy Analizator( Никаких ошибок, просто не включается. В маркет реплеере всё норм работает.
     

Поделиться этой страницей