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

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

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? Может быть, но он интересен если цена идет только по тренду. "Шаг в сторону, расстрел". И в итоде мы, нет я, теряю хороший тренд.
А вот с АТМ стратегией можно изощряться со стопами и профитами.
Тайминг, время торговли, тоже немаловажно.
И последнее. Инструмент в параметрах, тоже необходимая вещь. Об этом я уже говорил в прошлый раз.
 

Вложения

  • Stanok3.zip
    2,3 КБ · Просмотры: 29
  • Like
Реакции: Muratik, thinarthrill и Alexander
T

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); }
 
  • Like
Реакции: Iman, Muratik, Привал и ещё 2
Привал

Привал

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); }
        }
 
  • Like
Реакции: Iman, Muratik, Alexander и ещё 1 человек

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 должна находится внутри класса.
 
  • Like
Реакции: Muratik, Iman, Alexander и ещё 1 человек

Iman

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

Da, verno. Spasibo za sovet.
 
  • Like
Реакции: Muratik

Iman

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

Вложения

  • ATMstrategyVstrategy.zip
    2,4 КБ · Просмотры: 4
  • Like
Реакции: Muratik и Alexander

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);
 
Последнее редактирование:
  • Like
Реакции: Muratik, thinarthrill и Iman

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
Iman сказал(а):
для 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
 
  • Like
Реакции: Muratik, thinarthrill и Iman

Iman

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

kak ja vizu, vi nezamenimiy chelovek na etom sayte
 
  • Like
Реакции: Muratik
Привал

Привал

Well-Known Member
NinjaTrader
  • #14
Iman сказал(а):
spasibo F1 ochen udobno, a ja vse cherez help..

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

Iman

Well-Known Member
NinjaTrader
  • #15
daaaaa, podbodril
 
  • Like
Реакции: Muratik
Nikolaevich

Nikolaevich

Well-Known Member
NinjaTrader
  • #16
Привал сказал(а):
Тут есть программисты и по круче меня, настоящие мастера.
если возможно , кто-же эти программисты ? можно услышать ?
 
Привал

Привал

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

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 робота), помогали (рассказывали как писать код непосредственно в ВижуалСтудии), а не во встроенном редакторе....
Всегда есть кто то кто лучше тебя знает именно этот вопрос, т.к. он когда то в свое время потратил кучу своего времени на его изучение и смог решить.
 
  • Like
Реакции: Muratik
Nikolaevich

Nikolaevich

Well-Known Member
NinjaTrader
  • #20
Ок "
спасибо .
 
Верх Низ