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

Программирование АТМ стратегия в стратегии. Создаём вместе.

Iman

Well-Known Member
NinjaTrader
#1
АТМ стратегия в стратегии. Создаём вместе.

Предлагаю создать "оболочку" стратегии с необходимыми параметрами, в которую можно поместить свою идею(code).

Parameters
01. Instrument
02. Start Time
03. End Time
04. Maximum Daily Loss
05. Maximum Daily Profit
06. ATM strategy

Остальные параметры стратегии дописываем сами.

Попробовал сам, но САМ мало. Давайте вместе. File для поправки, прилагается.

Я любитель собирать, придумывать разные стратегии. В Ninja Trader ето доступно каждому, достаточно посмотреть вебинары и можно приступать. Но, при тесте стратеги в реале, сталкивался со многими проблемами.
Стратегия набирает профит, а потом теряет болшую часть, если не все. Trailing stop? Может быть, но он интересен если цена идет только по тренду. "Шаг в сторону, расстрел". И в итоде мы, нет я, теряю хороший тренд.
А вот с АТМ стратегией можно изощряться со стопами и профитами.
Тайминг, время торговли, тоже немаловажно.
И последнее. Инструмент в параметрах, тоже необходимая вещь. Об этом я уже говорил в прошлый раз.
 

Вложения

thinarthrill

Well-Known Member
NinjaTrader
#2
Не компилируется, много ошибок... приведу просто код по максимальным убытку/прибыли в день
в разделе Variables объявляем переменные
Код:
private double  dayTakeProfit=1000;
private double  dayStopLoss=1000;
в начале OnBarUpdate() пишем код
Код:
//На первом тике начала сессии запоминаем суммарный профит(убыток)
if (Bars.FirstBarOfSession && FirstTickOfBar)
                priorTradesCumProfit = Performance.AllTrades.TradesPerformance.Currency.CumProfit;

//Сравниваем разницу профита(убытка) на текущий момент и профит(убыток) на начало сессии
            if (Performance.AllTrades.TradesPerformance.Currency.CumProfit - priorTradesCumProfit >= dayTakeProfit)
                return;
         
            if (Performance.AllTrades.TradesPerformance.Currency.CumProfit - priorTradesCumProfit <= -dayStopLoss)
                return;
в раздел Properties добавим код
Код:
        [Description("Ограничить профитом в день")]
        [GridCategory("parameters")]
        public double DayTakeProfit
        {
            get { return dayTakeProfit; }
            set { dayTakeProfit = Math.Max(1, value); }
        }
     
        [Description("Ограничить размером потерь в день")]
        [GridCategory("parameters")]
        public double DayStopLoss
        {
            get { return dayStopLoss; }
            set { dayStopLoss = Math.Max(1, value); }
 

Привал

Well-Known Member
NinjaTrader
#3
Код:
    private int timeStart1     = 100000; // Default setting for TimeStart
        private int timeEnd1     = 230000; // Default setting for TimeEnd

        private bool CheckTime()
        {           
            // Проверка диапазона времени
            bool rez=false;
            if (timeStart1 < timeEnd1 && ToTime(Time[0]) >= timeStart1 && ToTime(Time[0]) < timeEnd1)    rez=true;
            if(timeStart1 > timeEnd1) rez=true;
            return rez;
        }


        protected override void OnBarUpdate()
        {           
           if(!CheckTime()) return;
И в пропертис естественно вставить вот такой код
Код:
        [Description("Время начала работы робота")]
        [GridCategory("Parameters")]
        [Gui.Design.DisplayName("\t\t\t\t\t\t\t\t\t\t\t\tTimeStart1")]
        public int TimeStart1
        {
            get { return timeStart1; }
            set { timeStart1 = Math.Max(0, value); }
        }

        [Description("Время окончания работы робота")]
        [GridCategory("Parameters")]
        [Gui.Design.DisplayName("\t\t\t\t\t\t\t\t\t\t\tTimeEnd1")]
        public int TimeEnd1
        {
            get { return timeEnd1; }
            set { timeEnd1 = Math.Max(0, value); }
        }
 

Iman

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

Iman

Well-Known Member
NinjaTrader
#5
Код:
    private int timeStart1     = 100000; // Default setting for TimeStart
        private int timeEnd1     = 230000; // Default setting for TimeEnd

        private bool CheckTime()
        {          
            // Проверка диапазона времени
            bool rez=false;
            if (timeStart1 < timeEnd1 && ToTime(Time[0]) >= timeStart1 && ToTime(Time[0]) < timeEnd1)    rez=true;
            if(timeStart1 > timeEnd1) rez=true;
            return rez;
        }


        protected override void OnBarUpdate()
        {          
           if(!CheckTime()) return;
И в пропертис естественно вставить вот такой код
Код:
        [Description("Время начала работы робота")]
        [GridCategory("Parameters")]
        [Gui.Design.DisplayName("\t\t\t\t\t\t\t\t\t\t\t\tTimeStart1")]
        public int TimeStart1
        {
            get { return timeStart1; }
            set { timeStart1 = Math.Max(0, value); }
        }

        [Description("Время окончания работы робота")]
        [GridCategory("Parameters")]
        [Gui.Design.DisplayName("\t\t\t\t\t\t\t\t\t\t\tTimeEnd1")]
        public int TimeEnd1
        {
            get { return timeEnd1; }
            set { timeEnd1 = Math.Max(0, value); }
        }

A kuda eto vpisivat? Toze v Variables?

private bool CheckTime()
{
// Проверка диапазона времени
bool rez=false;
if (timeStart1 < timeEnd1 && ToTime(Time[0]) >= timeStart1 && ToTime(Time[0]) < timeEnd1) rez=true;
if(timeStart1 > timeEnd1) rez=true;
return rez;
}
 

Привал

Well-Known Member
NinjaTrader
#6
Вам нужно просмотреть какие нибудь курсы по программированию на С#
Найдите их много и бесплатных.
Это обыкновенная функция, возвращает переменную типа bool должна находится внутри класса.
 

Iman

Well-Known Member
NinjaTrader
#7
Вам нужно просмотреть какие нибудь курсы по программированию на С#
Найдите их много и бесплатных.
Это обыкновенная функция, возвращает переменную типа bool должна находится внутри класса.
Da, verno. Spasibo za sovet.
 

Iman

Well-Known Member
NinjaTrader
#8
АТМ стратегия в стратегии, 2-a этапа пройдены. Oстались Instrument и ATM strategy . Надеюсь, что будут желающие помочь.
Стратегия строится на базe SampleAtmStrategy, так что все получится.
Помогайте, кому не сложно.
 

Вложения

Iman

Well-Known Member
NinjaTrader
#9
кто подскажет, в чем ошибка?

#region Variables
// Wizard generated variables
private string _instrumentName = " "; // Default setting for Instrument

protected override void Initialize()
{
Add( _instrumentName);


CalculateOnBarClose = true;
}

#region Properties
[Description("Default setting for Instrument")]
[Category("Parameters")]
public string Instrument
{
get { return _instrumentName; }
set { _instrumentName = value; }
}
 

Привал

Well-Known Member
NinjaTrader
#10
Вы хотите создать мультивалютную стратегию ? Добавлять инструмент нужно если хотите торговать сразу на 2-х инструментах

Код:
private string second_instr = @"YM 12-15";



Add(second_instr, PeriodType.Minute, 1);
 
Последнее редактирование:

Iman

Well-Known Member
NinjaTrader
#11
для Future инструмент необходим, может я что-то неправильно делаю, свою проблему я изложил в видео. Мучаюсь с тестом, после экспирации приходится все параметры заново ставить, а история теста пропадает. Не знаю что делать. Вот и решил внести инструмент в параметры.

Add(second_instr, PeriodType.Minute, 1); a esli grafik renko(unirenko), PeriodTipe. toze minute?
 

Привал

Well-Known Member
NinjaTrader
#12
для Future инструмент необходим, может я что-то неправильно делаю, свою проблему я изложил в видео. Мучаюсь с тестом, после экспирации приходится все параметры заново ставить, а история теста пропадает. Не знаю что делать. Вот и решил внести инструмент в параметры.

Add(second_instr, PeriodType.Minute, 1); a esli grafik renko(unirenko), PeriodTipe. toze minute?
Знаете там есть волшебная кнопка F1
если её почаще нажимать то многое сможете найти. К примеру в данном варианте, нужно просто найти команду Add
И там есть примеры как эту команду правильно использовать.
https://ninjatrader.com/support/helpGuides/nt7/?addrenko.htm
 

Привал

Well-Known Member
NinjaTrader
#14
spasibo F1 ochen udobno, a ja vse cherez help..

kak ja vizu, vi nezamenimiy chelovek na etom sayte
Незаменимых не бывает. Тут есть программисты и по круче меня, настоящие мастера. Я против них ремесленник.
Плюс английски не знаю, это очень мешает. Единственное что мне помогает - это очень большой опыт программирования на разных языках + гуглтранслейт (яндек получше переводит)
З.Ы. Трудно первую 1000 индикаторов и стратегий, дальше будет легче :wink:
 

Привал

Well-Known Member
NinjaTrader
#17
если возможно , кто-же эти программисты ? можно услышать ?
Откройте платные индикаторы (сервисы), там они.
+ вот тут их очень много
https://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx
Целое сообщество C#
Есть много людей кто по образованию программист и всю свою жизнь посветил этому делу, работает где то программистом ...
 

Nikolaevich

Well-Known Member
NinjaTrader
#18
Откройте платные индикаторы (сервисы), там они.
+ вот тут их очень много
https://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx
Целое сообщество C#
Есть много людей кто по образованию программист и всю свою жизнь посветил этому делу, работает где то программистом ...
Привал спасибо за ответ .
Полагал что вы конкретно , назовёте программиста .
 

Привал

Well-Known Member
NinjaTrader
#19
vladko
Много делает вещей которые я даже не представляю как запрограммировать (к сожалению он прячет код в dll). Если не ошибаюсь единственный кто на русском языке проводил вебинар по программированию в NT (как делать индикаторы показывал).
Есть и еще программисты, ники сейчас не могу вспомнить, но они мне помогали, подсказывали как запрограммировать, избавится от ошибок заполнения ордеров (было очень важно для создания HFT робота), помогали (рассказывали как писать код непосредственно в ВижуалСтудии), а не во встроенном редакторе....
Всегда есть кто то кто лучше тебя знает именно этот вопрос, т.к. он когда то в свое время потратил кучу своего времени на его изучение и смог решить.
 
Вверх Снизу