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

NinjaTrader 8 Пытаюсь протестировать простую стратегию, созданную в Построителе стратегий НТ8

gelono

Member
NinjaTrader
#1
Народ, подскажите, что я не так делаю. Пытаюсь протестировать простую стратегию, созданную в Построителе стратегий НТ8. Индикатор считает дельту и условием для сделки является разворот дельты на минутном баре. Вроде все просто. Но выставляя галочку "проиграть тик" в анализаторе стратегий за один день на минутном графике появляется порядка 10 000 сделок. Ужас((. Кстати, при создании стратегии выбирал расчет с каждым тиком. Если менять расчет по закрытию бара, то сделок вообще нет! В общем похоже, что при функции "проиграть тик" сделки появляются на развороте дельты на каждом тике. То что график минутный вообще фиолетово(((
 

gelono

Member
NinjaTrader
#3
namespace NinjaTrader.NinjaScript.Strategies
{
public class My01 : Strategy
{
private double Zero;

private A01 A011;

protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Enter the description for your new custom Стратегия here.";
Name = "My01";
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 = false;
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;
Zero = 0;
}
else if (State == State.Configure)
{
SetProfitTarget("", CalculationMode.Ticks, 5);
SetStopLoss("", CalculationMode.Ticks, 5, false);
}
else if (State == State.DataLoaded)
{
A011 = A01(Close);
A011 = A01(Close);
A011.Plots[0].Brush = Brushes.DarkCyan;
A011.Plots[1].Brush = Brushes.Crimson;
AddChartIndicator(A011);
}
}

protected override void OnBarUpdate()
{
if (CurrentBars[0] < 1)
return;

// Установить 1
if ((A011.Buys[0] > Zero)
&& (A011.Buys[1] == Zero))
{
EnterLong(Convert.ToInt32(DefaultQuantity), "");
}

}
}
}
 

gelono

Member
NinjaTrader
#4
На основе этого индюка считается дельта. В стратегии только сделки в лонг прописаны.
namespace NinjaTrader.NinjaScript.Indicators
{
public class A01 : Indicator
{
private double buys;
private double sells;
private int activeBar = 0;
double delta = 0;

protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionBuySellVolume;
Name = "A01";
BarsRequiredToPlot = 1;
Calculate = Calculate.OnEachTick;
DrawOnPricePanel = false;
IsOverlay = false;
DisplayInDataBox = true;

// Plots will overlap each other no matter which one of these comes first
// in NT8, we would add the Sells first in code and then Buys, and the "Sells" was always in front of the buys.
AddPlot(new Stroke(Brushes.DarkCyan, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.BuySellVolumeBuys);
AddPlot(new Stroke(Brushes.Crimson, 2), PlotStyle.Bar, NinjaTrader.Custom.Resource.BuySellVolumeSells);
}
else if (State == State.Historical)
{
if (Calculate != Calculate.OnEachTick)
{
Draw.TextFixed(this, "NinjaScriptInfo", string.Format(NinjaTrader.Custom.Resource.NinjaScriptOnBarCloseError, Name), TextPosition.BottomRight);
Log(string.Format(NinjaTrader.Custom.Resource.NinjaScriptOnBarCloseError, Name), LogLevel.Error);
}
}
}

protected override void OnMarketData(MarketDataEventArgs e)
{
if(e.MarketDataType == MarketDataType.Last)
{
if(e.Price >= e.Ask)
{
buys += e.Volume;
}
else if (e.Price <= e.Bid)
{
sells += e.Volume;
}
}
}

protected override void OnBarUpdate()
{
if (CurrentBar < activeBar || CurrentBar <= BarsRequiredToPlot)
return;

// New Bar has been formed
// - Assign last volume counted to the prior bar
// - Reset volume count for new bar
if (CurrentBar != activeBar)
{
if (delta > 0)
{
Sells[1] = 0;
Buys[1] = delta;
}
else
{
Sells[1] = delta;
Buys[1] = 0;
}
//Sells[1] = sells;
//Buys[1] = buys;
buys = 0;
sells = 0;
activeBar = CurrentBar;
}

delta = buys - sells;

if (delta > 0)
{
Sells[0] = 0;
Buys[0] = delta;
}
else
{
Sells[0] = delta;
Buys[0] = 0;
}
}
 

gelono

Member
NinjaTrader
#7
Выложил два раза. Но не вижу своих сообщений. Не пойму, видите ли Вы их или нет?
 

Alexander

Administrator
Член команды
Помогли тебе - помоги другим!
#8

Arkadiy

Well-Known Member
NinjaTrader
#9
пробую решить такой же вариант, не получается отобразить данные индикатора. Скачал твой вариант, если стоит
Код:
Calculate                = Calculate.OnEachTick;
то ничего нет в подвале индикатора,
если ставлю
Код:
Calculate                = Calculate.OnBarClose;
то в окне индикатора получаю сообщение, скрин прилагаю
Screenshot_3.png
 

Arkadiy

Well-Known Member
NinjaTrader
#10
пробую решить такой же вариант, не получается отобразить данные индикатора. Скачал твой вариант, если стоит
Код:
Calculate                = Calculate.OnEachTick;
то ничего нет в подвале индикатора,
если ставлю
Код:
Calculate                = Calculate.OnBarClose;
то в окне индикатора получаю сообщение, скрин прилагаю
Посмотреть вложение 4428
разобрался со своей проблемой.

А по поводу вашей могу предположить что вы правильно поняли, при каждой смени дельты у вас стратегия открывает сделку, если вы хотите сделать по закрытию бара, тогда делайте проверку на ПервыйТик в баре, и проверяйте дельты [1] и [2]

Код:
            if (IsFirstTickOfBar)
            {
                // Set 1
                if ((A011.Buys[1] > Zero)
                     && (A011.Buys[2] == Zero))
                {
                    EnterLong(Convert.ToInt32(DefaultQuantity), "");
                }
            }
 
Последнее редактирование:

gelono

Member
NinjaTrader
#11
Спасибо за отклик, Arkadiy. Для начала попробовал сравнивать дельты на [1] и [2]. Действительно сделки начали открываться как надо. Но, в течение дня появляется бар, на котором открывается больше 1000 сделкок(((. И он такой единственный. Остальные сделки все в норме. Мистика. Далее попробовал использовать код с проверкой на ПервыйТик. Сделки вообще не открываются. Я конечно еще "зеленый" в программировании и может что-то не так сделал.
 

Arkadiy

Well-Known Member
NinjaTrader
#12
Спасибо за отклик, Arkadiy. Для начала попробовал сравнивать дельты на [1] и [2]. Действительно сделки начали открываться как надо. Но, в течение дня появляется бар, на котором открывается больше 1000 сделкок(((. И он такой единственный. Остальные сделки все в норме. Мистика. Далее попробовал использовать код с проверкой на ПервыйТик. Сделки вообще не открываются. Я конечно еще "зеленый" в программировании и может что-то не так сделал.
Пробуй и придет опыт. Я долго не мог реализовать то что смог ты )))). Смотри другие примеры, всем миром по нитке как говорится и рубаха получится.
 

Nikolaevich

Well-Known Member
NinjaTrader
#13
Спасибо за отклик, Arkadiy. Для начала попробовал сравнивать дельты на [1] и [2]. Действительно сделки начали открываться как надо. Но, в течение дня появляется бар, на котором открывается больше 1000 сделкок(((. И он такой единственный. Остальные сделки все в норме. Мистика. Далее попробовал использовать код с проверкой на ПервыйТик. Сделки вообще не открываются. Я конечно еще "зеленый" в программировании и может что-то не так сделал.
Да действительно возникает такой бар , продолбался с этой проблемой несколько дней !
Интересно вот что ,все знают откуда пришла эта стратегия и все видели этот сумасшедший результат ,
как только убрался этот бар при помощи кода , результат упал до почти убыточного!
То есть в видео,
был продемонстрирован результат с этой ошибкой ,но мы этого не увидели ,
а увидели супер результат и бросились строить стратегию.
Хотя может я и ошибаюсь.. не обессудте .
код добавленный показал результат. выполнялось построение стратегии точно как на видео ,только средствами стратежи билдер.
 

Arkadiy

Well-Known Member
NinjaTrader
#14
Да действительно возникает такой бар , продолбался с этой проблемой несколько дней !
Интересно вот что ,все знают откуда пришла эта стратегия и все видели этот сумасшедший результат ,
как только убрался этот бар при помощи кода , результат упал до почти убыточного!
То есть в видео,
был продемонстрирован результат с этой ошибкой ,но мы этого не увидели ,
а увидели супер результат и бросились строить стратегию.
Хотя может я и ошибаюсь.. не обессудте .
код добавленный показал результат. выполнялось построение стратегии точно как на видео ,только средствами стратежи билдер.
я видимо упустил истоки сообщений, не видел видео. киньте ссылку на пост, посмотрю.
 

Arkadiy

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

Nikolaevich

Well-Known Member
NinjaTrader
#17
спасибо, я даже был на этом вэбе )))
да тестер стратегий обнадеживает сильно. сам попадаюсь на это, и слышал мнение что тестеру верить нельзя, поэтому надо прогонять на реплее, а потом на демо. и только потом реал.
Всё верно по этапам обкатки стратегии !
Но здесь немного вопрос в другом ,
то что все видят в результате этого видео - это рез с ошибкой .
Поэтому он такой фантастический.
Да можно исправленную версию про оптимизировать и т.д. , но это уже другая повесть.
Есть данное видео ,в видео есть четкий алгоритм , мы его строим и получаем что то ......
 

Arkadiy

Well-Known Member
NinjaTrader
#18
Всё верно по этапам обкатки стратегии !
Но здесь немного вопрос в другом ,
то что все видят в результате этого видео - это рез с ошибкой .
Поэтому он такой фантастический.
Да можно исправленную версию про оптимизировать и т.д. , но это уже другая повесть.
Есть данное видео ,в видео есть четкий алгоритм , мы его строим и получаем что то ......
ну автор в видео говорит что это не готовый пример для запуска в работу, он на этом сильно акцентирует внимание. вот чем хороши вэбы от Ланы, там первый слайд и начало каждого вэба начинается с понятие о РИСКАХ. каждый должен понимать это, если не понимаешь рынок научит очень быстро, но больно!!!
 

Arkadiy

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

Привал

Well-Known Member
NinjaTrader
#20
ну автор в видео говорит что это не готовый пример для запуска в работу, он на этом сильно акцентирует внимание. вот чем хороши вэбы от Ланы, там первый слайд и начало каждого вэба начинается с понятие о РИСКАХ. каждый должен понимать это, если не понимаешь рынок научит очень быстро, но больно!!!
Всем добрый вечер. Да действительно это пример, учебный пример. И я об этом говорил, что до боевого робота, очень и очень далеко. Это просто 1 кирпичик, плохой или хороший, вам решать. Но я использую его при постооении роботов, это дает смещение вероятности, не 50/50, а чуть по лучше.
Я и не планировал и вряд ли когда выложу боевого робота в свободный доступ + покажу как его запрограммировать. Надеюсь вы меня правильно поймете.
Цель вебинара была другой - постараться донести до трейдеров мысль, что каждую, любую торговую стратегию нужно проверять. Не верить никому на слово. Единственная объективная проверка, это её программирование и тестирование на истории. А для этого нужно уметь программировать. Часто стали в последнее время попадаться "трейдеры" которые верят на слово всяким гуру. И самое плохое, что уверены в том что ТС класная, рабочая, а дело в психологии, в них... и идут на следующие тренинги, по психологии, силе, духа и т.д. А проверить ТС на вшивость не догадываются. И когда им говоришь про это обижаются....
Я рад что хоть несколько человек, попытались что то запрограммировать. Это здорово, это их первый шаг.