• Тинькофф Банк-лучшие банковские продукты еще выгоднее
    Выбирайте продукт от банка Тинькофф
  • Уважаемые форумчане, друзья и посетители!
    Поступило предложение ( ссылка на обсуждение ) на сбор средств поддержания форума в рабочем состоянии с 1 июня ( оплата хостинга, бэкап ежедневный на другой хостинг и тд), отчетность будет предоставляться ежемесячно. Пока на ЮMoney ( яндекс деньги), доступно картой перевод, далее добавлю другие способы. Сумму перевода указывайте на ваш выбор исходя из своих возможностей.
    Форум продолжает свою работу благодаря Вашим пожертвованиям.

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

Iman

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

Предлагаю создать "оболочку" стратегии с необходимыми параметрами, в которую можно поместить свою идею(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
Не компилируется, много ошибок... приведу просто код по максимальным убытку/прибыли в день
в разделе 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); }
 
Код:
    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); }
        }
 
Спасибо все очень ясно, начал все с новой стратегии, чтобы не путать вас своими ошибками. Переписываю как могу, поэтому проверяйте пожалуста и по мере возможности дописывайте.
 
Код:
    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;
}
 
Вам нужно просмотреть какие нибудь курсы по программированию на С#
Найдите их много и бесплатных.
Это обыкновенная функция, возвращает переменную типа bool должна находится внутри класса.
 
Вам нужно просмотреть какие нибудь курсы по программированию на С#
Найдите их много и бесплатных.
Это обыкновенная функция, возвращает переменную типа bool должна находится внутри класса.

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

Вложения

  • ATMstrategyVstrategy.zip
    2,4 КБ · Просмотры: 4
кто подскажет, в чем ошибка?

#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; }
}
 
Вы хотите создать мультивалютную стратегию ? Добавлять инструмент нужно если хотите торговать сразу на 2-х инструментах

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



Add(second_instr, PeriodType.Minute, 1);
 
Последнее редактирование:
для Future инструмент необходим, может я что-то неправильно делаю, свою проблему я изложил в видео. Мучаюсь с тестом, после экспирации приходится все параметры заново ставить, а история теста пропадает. Не знаю что делать. Вот и решил внести инструмент в параметры.

Add(second_instr, PeriodType.Minute, 1); a esli grafik renko(unirenko), PeriodTipe. toze minute?
 
для 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
 
spasibo F1 ochen udobno, a ja vse cherez help..

kak ja vizu, vi nezamenimiy chelovek na etom sayte
 
spasibo F1 ochen udobno, a ja vse cherez help..

kak ja vizu, vi nezamenimiy chelovek na etom sayte
Незаменимых не бывает. Тут есть программисты и по круче меня, настоящие мастера. Я против них ремесленник.
Плюс английски не знаю, это очень мешает. Единственное что мне помогает - это очень большой опыт программирования на разных языках + гуглтранслейт (яндек получше переводит)
З.Ы. Трудно первую 1000 индикаторов и стратегий, дальше будет легче :wink:
 
если возможно , кто-же эти программисты ? можно услышать ?
Откройте платные индикаторы (сервисы), там они.
+ вот тут их очень много
https://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx
Целое сообщество C#
Есть много людей кто по образованию программист и всю свою жизнь посветил этому делу, работает где то программистом ...
 
Откройте платные индикаторы (сервисы), там они.
+ вот тут их очень много
https://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx
Целое сообщество C#
Есть много людей кто по образованию программист и всю свою жизнь посветил этому делу, работает где то программистом ...
Привал спасибо за ответ .
Полагал что вы конкретно , назовёте программиста .
 
vladko
Много делает вещей которые я даже не представляю как запрограммировать (к сожалению он прячет код в dll). Если не ошибаюсь единственный кто на русском языке проводил вебинар по программированию в NT (как делать индикаторы показывал).
Есть и еще программисты, ники сейчас не могу вспомнить, но они мне помогали, подсказывали как запрограммировать, избавится от ошибок заполнения ордеров (было очень важно для создания HFT робота), помогали (рассказывали как писать код непосредственно в ВижуалСтудии), а не во встроенном редакторе....
Всегда есть кто то кто лучше тебя знает именно этот вопрос, т.к. он когда то в свое время потратил кучу своего времени на его изучение и смог решить.
 
Назад
Верх Низ