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

NinjaTrader 8 Не отображается индикатор в стратегии

Arkadiy

Well-Known Member
NinjaTrader
#1
Привет всем. Кто может подсказать в чем проблема при тестировании стратегии не отображается индикатор прописанный в коде.
Индикатор основывается на данных тикреплея, при обычном использовании на графике все работает. В коде стратегии использовал такой код(взял из хелпа)
Код:
namespace NinjaTrader.NinjaScript.Strategies
{
    public class MyCustomStrategy : Strategy
    {
        private GomDeltaVolume gomDeltaVol;
        private double filter, multipler;
        private int period;
     
        protected override void OnStateChange()
        {
                 
            if (State == State.SetDefaults)
            {
                Description                                    = @"Enter the description for your new custom Strategy here.";
                Name                                        = "MyCustomStrategy";
                Calculate                                    = Calculate.OnBarClose;
                EntriesPerDirection                            = 1;
                EntryHandling                                = EntryHandling.AllEntries;
                IsExitOnSessionCloseStrategy                = true;
                ExitOnSessionCloseSeconds                    = 30;
                IsFillLimitOnTouch                            = false;
                MaximumBarsLookBack                            = MaximumBarsLookBack.TwoHundredFiftySix;
                OrderFillResolution                            = OrderFillResolution.Standard;
                Slippage                                    = 0;
                StartBehavior                                = StartBehavior.WaitUntilFlat;
                TimeInForce                                    = TimeInForce.Gtc;
                TraceOrders                                    = true;
                RealtimeErrorHandling                        = RealtimeErrorHandling.StopCancelClose;
                StopTargetHandling                            = StopTargetHandling.PerEntryExecution;
                BarsRequiredToTrade                            = 20;
                // Disable this property for performance gains in Strategy Analyzer optimizations
                // See the Help Guide for additional information
                IsInstantiatedOnEachOptimizationIteration    = true;
                multipler =  0.5;
                period = 1;
             
            }
            else if (State == State.Configure)
            {
             
                AddChartIndicator(SMA(14));
            }
            else if(State == State.DataLoaded)
            {
                gomDeltaVol = GomDeltaVolume(multipler);
                AddChartIndicator(gomDeltaVol);

            }
        }

        protected override void OnBarUpdate()
        {
            if (CurrentBar < BarsRequiredToTrade)
                return;
         }
}
т.е. чтобы индикатор получил тиковые данные он должен быть создан когда загрузились данные на график, в момент State.DataLoaded.
код компилится, но при тесте на графике индикатор не показывает данные, как будто тикреплей не сработал. если я просто в том же окне тестера кину этот же индикатор на график то он покажет все замечательно.
Что я делаю не так???
 

Вложения

fx.practic

New Member
NinjaTrader
#2
Аркадий, привет!
Разобрался?
А ты в host индикатор загружаешь доп. таймфрейм?
VisualStudio показывает ошибку? В Output что-то ругательное пишется?
 

Arkadiy

Well-Known Member
NinjaTrader
#3
fx.practic, нет не разобрался. писал на форум разработчикам, но шас у самого нет времени добить этот вопрос до конца. Что такое host индикатора? и не доп. тайм фрейм, а тот же. студия ошибок не показывает, как я понял то надо переделывать алгоритм индикатора, потому как в тестере нет обращения к функции OnMarketData, поэтому и нет данных для отображения. В общем пока не решил ((
 

fx.practic

New Member
NinjaTrader
#4
Если ты из какого-то скрипта (индикатор, стратегия) вызываешь другой скрипт (индикатор), то в хелпе "носитель" называется host, а вызываемый (вложенный) hosted.
И если hosted загружает доп. таймфрейм, то этот же таймфрейм надо загрузить и в host. И это тут не причём, как я понял из ответа. И VS про эту ошибку конкретно сообщает.

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

Ещё припоминается мне, что TickReplay должен быть явно включен в обоих скриптах.
И что к вызываемому (hosted) индикатору желательно явно обращаться на каждом баре, причём, пытаться получить координату какой-то Plot:
double trigger = My_Great_Indicator.Values[0];

В общем, можно попробовать по свободе глянуть.
 

Arkadiy

Well-Known Member
NinjaTrader
#6
когда идет дискуссия прям хочется заново начать разбирать вопрос. Думаю на днях подниму то что делали тогда отпишусь, надеюсь никто не уйдёт к тому времени)))
 

Arkadiy

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

gelono

Member
NinjaTrader
#9
Всем привет. За счет этой темы разобрался и в своей.
Надо было включить в стратегии Calculate.OnEachTick. Так же выбрать при запуске TickReplay. Теперь буду дальше разбираться с логикой открытия и закрытия ордеров. Если у кого есть примеры, киньте посмотреть. Интересует открытие 2 и более а закрытие частями, или тралить.
Поддерживаю. Народ, скиньте примеры работы с ордерами, если у кого есть. Спасибо.