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

Образцы кодов стратегий для NT 6.5

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
#1
В этой ветке выложены запрограммированные для Вас девелоперами НТ популярные стратегии.

Что бы посмотреть пример, импортируйте его в НТ:
1. Загрузите файл на рабочий стол
2. В окне Control Center, выберите в меню File>Utilities>Import NinjaScript
3. Выберите сохраненный Вами файл на рабочем столе.

-Использование фильтрования времени для ограничения торговой сессии
-Использование нескольких сигналов на вход/выход одновременно
-Торговля на пересечениях (кроссоверах)
 

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
#2
Использование фильтрования времени для ограничения торговой сессии

Многие трейдеры справедливо замечают, что волатильность рынка может значительно менятся от времени суток, и в зависимости от своего стиля предпочитают торговать или в самое турбулентное, или в самое спокойное время. Прикрепленный образец кода показывает, как:
- сравнивать дни недели для торговли
- сразвнивать время суток для торговли

Важные элементы кода:

DayOfWeek
Time
ToTime
ToDay
 

Вложения

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
#3
Использование нескольких сигналов на вход/выход одновременно

Иногда необходимо выставить несколько возможных условий для входа/выхода из позиции, и отследить вручную, какое именно условие сработало при входе и выходе, может быть проблематично.

Прикрепленный образец показывает, как:
- Добавить указатели, доработанные пользователем для стратегии, на график
- Определить, как НТ будет активировать ордера при совпадении условий
- Как обозначить вход/выход по определенному условию индивидуально

Важные элементы кода:

Add()
EntriesPerDirection
EnterLongStopLimit
EnterLongLimit
EnterLongStop
EnterLongStopLimit
 

Вложения

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
#4
Торговля на пересечениях (кроссоверах)

Подобно концепции торговли на пробитии, многие трейдеры торгуют на пересечениях – будь то пересечение ценового барьера или скрещивание двух индикаторов.
Приведенный образец демонстрирует следующее:
- Определение и хранение первых 15ти самых высоких и самых низких значений баров текущей сессии
- Отправка ордеров long и short в зависимости от того, какой барьер пересечен
- Использование трейлинговых стопов для выхода из позиции

Подсказка: Этот образец устанавливает CalculateOnBarClose на False, для того, что бы ордера уходили именно в момент пересечения, а не в тот момент, когда закроется бар, в течении которого это пересечение произощло.
Важные элементы кода:
CalculateOnBarClose
CrossAbove()
CrossBelow()
SetTrailStop()
SetStopLoss()
SetProfitTarget()
 

Вложения

StatBars

New Member
NinjaTrader
#5
Здравствуйте.

Прошу помощи у всех кто работает с NT.
Мне нужно получить цены Ask/Bid с 2-х инструментов сразу, естественно почитал хелп накидал код - что-то вроде:
Код:
protected override void Initialize()
{
   CalculateOnBarClose = false;
   Add( first_Pair , PeriodType.Tick , 1 );
   Add( second_Pair , PeriodType.Tick , 1 );
}
protected override void OnBarUpdate()
{	
   // Вход стратегии
   if(Closes[0][0] > Closes[0][1] && Closes[1][0] > Closes[1][1]  && entryOrder == null )
      // SELL
      entryOrder = EnterShort();
}
// Остальное не важно потому как похоже в программном смысле
Принтами потом выяснилось, что если запускать эту стратегию на 2-х разных инструментах(first_Pair и second_Pair) то на second_Pair цена у first_Pair отличается от цены которую выводит стратегия запущенная на first_Pair. ВОт вобщем первичная проблема.
Попробовал всё это решить подключением NT к своему приложению(DLL), всё нормально работает! НО через некоторое время программа перестаёт получать котировки, хотя проверяю через деббагер запросы из моей программы идут, но ответ(return) из NT один и тот же, иногда бывает просто 0 возвращает хотя в NT цены нормально движутся.
А мне для автоматической торговли нужна стабильность программы(решения) это для меня самое важное.
Можете помочь?
 

Alexander

Administrator
Команда форума
Помогли тебе - помоги другим!
#8
Александр сказал(а):
Интересно... Quantum-Zen здесь ещё появится? ::rolleyes24.gif:: Или ограничется одним сообщением?)))
Должен появиться, с ним общался в переписке, пока держат личные дела.
Кроме Quantum-Zen вижу на форуме других спецов, наверно присматриваются.
  • Господа программисты, как писал, для Вас все условия, хотите оказывать платные услуги трейдерам в дополнение к бесплатным - пожалуйста, откроем для вас личные закрытые разделы при надобности.
 

NTDeveloper

New Member
NinjaTrader
#9
StatBars сказал(а):
Прошу помощи у всех кто работает с NT.
Мне нужно получить цены Ask/Bid с 2-х инструментов сразу, естественно почитал хелп накидал код - что-то вроде:
После того, как Вы в Initialize добавили 2 серии данных, аски и биды Вы можете получать следующим образом:
Код:
ask1=GetCurrentAsk(1);
ask2=GetCurrentAsk(2);
bid1=GetCurrentBid(1);
bid2=GetCurrentBid(2);
т.е. в скобках единица соответствует first_Pair в Вашем примере, двойка соответствует second_Pair
 

Bifff

New Member
NinjaTrader
#10
Здравствуйте!
Прошу помочь в написании стратегии. Необходимо установить срок действия лимитного ордера. Например необходимо, чтобы ордер EnterLongLimit отменялся по истечении 5 баров. Пробовал использовать CancelOrder, однако появились непонятные трудности. Просьба выложить часть простенького кода, чтобы выполнялась вышеописанная операция. Спасибо.
 

NTDeveloper

New Member
NinjaTrader
#11
Bifff сказал(а):
Здравствуйте!
Прошу помочь в написании стратегии. Необходимо установить срок действия лимитного ордера. Например необходимо, чтобы ордер EnterLongLimit отменялся по истечении 5 баров. Пробовал использовать CancelOrder, однако появились непонятные трудности. Просьба выложить часть простенького кода, чтобы выполнялась вышеописанная операция. Спасибо.
Здравствуйте.
Напрямую это, к сожалению, сделать нельзя, нужно немного поколдовать)

Например, в момент поступления сигнала на выставление лимитного ордера, Вы запоминаете данное время и вычисляете время, которое будет через 5 баров(назовем его t1). И пока текущее время меньше этого второго времени(t1), Вы выполняете установку лимитного ордера:
Код:
//В регион Variables добавляем переменную со временем
private DateTime SignalTime=DateTime.Now;
//и переменную, указывающую что появился сигнал
private bool GetSignal=false;


protected override void OnBarUpdate()
{
if (CrossAbove(SMA(20), SMA(10), 1))
   {
    //Например здесь мы получаем сигнал на выставление лимитного ордера
    //Устанавливаем флаг получения сигнала и запоминаем время свечки
    GetSignal=true;
    SignalTime=Time[1];
    }	
//Здесь проверяем установлен ли флаг получения сигнала или нет. 
//Если установлен, то проверяем меньше ли текущее время времени, 
//которое получается через 5 свечей
if(GetSignal)
{
if(Time[1]>SignalTime.AddMinutes(Period*5))
  {
   //Это значит что 5 свечей уже прошло. Обнуляем сигнал
   GetSignal=false;
  }
else
{
EnterLongLimit(limitprice);
}
}
}
Если есть более простые способы решения этого вопроса, прошу поделиться..
 

Bifff

New Member
NinjaTrader
#12
NTDeveloper, спасибо. Попробую применить вашу идею. Если доработаю свою, то обязательно поделюсь с Вами.
 

Bifff

New Member
NinjaTrader
#13
NTDeveloper, вот как удалось осуществить отмену лимитного ордера с использованием CancelOrder()

Код:
#region Variables
//в регион добавляем переменную следующего характера
private IOrder myEntryShortOrder = null;


 protected override void OnBarUpdate()
{
            // ставим следующее или подобное условие на выставление лимитного ордера

            if (myEntryShortOrder == null && Close[1] > Close[0])
            {

//собственно выставляем лимитник
                myEntryShortOrder = EnterShortLimit(0,true,DefaultQuantity, Close[1] + ticksShortLimitPrice * TickSize, "Short");
              
//запоминаем бар, на котором высталяем лимитник
	nbarsShort = CurrentBar;
				
            }

//далее записываем условие на отмену ордера если прошло с момента выставления ордера barsLife свечей. Этот параметр задаем сами
            if (myEntryShortOrder != null && CurrentBar == nbarsShort + barsLife)
            {
	       CancelOrder(myEntryShortOrder);
             }


//и для толка запишем какое-нибудь условие на выход из позиции.
            if (BarsSinceEntry("Short") > 10)
            	ExitShort("shorttarget", "Short");


}



//далее запишем цикл в котором будем обнулять лимитный ордер, если он исполнился или отменился.

protected override void OnOrderUpdate(IOrder order){						
     if (order != null && order.OrderState == OrderState.Filled)
     {     			
	myEntryShortOrder = null;				
     }
   				
			
     if (order != null && order.OrderState == OrderState.Cancelled)
     {	
	myEntryShortOrder = null;
     }

Ну вот как-то так :) Если будут вопросы попробую ответить.
В свою очередь хотел еще поинтересоваться возможно ли как-то параметр CalculateOnBarClose изменять в процессе работы системы?
 

NTDeveloper

New Member
NinjaTrader
#14
да, нормальный вариант.

Насчет CalculateOnBarClose думаю наврядли можно в процессе работы стратегии это дело изменять. Единственное, можно пойти на собственные функции и методы определения нового бара, например запоминать время нулевого бара и сравнивать на каждом тике его со временем опять же нулевого бара...
 

FOKS

Member
NinjaTrader
#15
Просьба кто знает, как настроить в АТМ условие (стратегию): Если Close бара выше ЕМА то покупать, а если Close бара ниже ЕМА - то продавать? Система реверсная. ::smile24.gif:: Мне бы узнать именно как это сделать имеющимися в Нинзе настройками. С кодами не разберусь к сожалению. ::yield::
 

NTDeveloper

New Member
NinjaTrader
#16
FOKS сказал(а):
Просьба кто знает, как настроить в АТМ условие (стратегию): Если Close бара выше ЕМА то покупать, а если Close бара ниже ЕМА - то продавать? Система реверсная. Улыбка Мне бы узнать именно как это сделать имеющимися в Нинзе настройками. С кодами не разберусь к сожалению. Белый флаг
Вот сделал небольшое видео, на котором показал как создать нужную Вам стратегию
http://www.screencast.com/t/YzkyNmQ1NWYt
 

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
#17

FOKS

Member
NinjaTrader
#18
Вот сделал небольшое видео, на котором показал как создать нужную Вам стратегию
http://www.screencast.com/t/YzkyNmQ1NWYt

Благодарю за ответ! Оказалось, что я делал настройки стратегии по такомуже порядку, но при настройках графиков, которые не соответствуют "общепринятым", Нинзя глючит не по-детски. С чем и обращусь к вам за платной консультацией в личку. Обращался я так же на официальный сайт Нинзи в техподдержку, но пока не ответили...
 

hammerlights

New Member
NinjaTrader
#19
Доброго времени - у меня такие вопросы.
1. Метод OnBarUpdate() - отвечает за обновление бара, тоесть как только приходит новый тик то он срабатывает ?
2. Не мог бы ты дать пример кода - как воити в длинную позицию с выставлением Стоплосса , тейкпрофита, объема сделки(лота), установки какого нибудь примечания на ордер(что бы можно было потом найти его через селект или forsearch).
3. Выставление трала идет как функция и выполняеться уже на сервере - или надо вести его на клиенте - тащя стоплосс за ценой?
4. Если есть пример кода выбора(select-а, forsearch) ордера по допустим какому нибудь примечанию или мэйджеку, для последующей обработки ордера.
 

NTDeveloper

New Member
NinjaTrader
#20
hammerlights сказал(а):
1) Если не сложно - покажите пример кода - входа допустим в длинную позицию. Установки ТП SL ,Объема сделки и Трала. Если трал реализуеться отдельно - то большая просьба так же показать пример. Установки какого нибудь примечания ордера.
Пример: рыночный бай
int Lot=1;
EnterLong(Lot,"строковой идентификатор сделки");

установка стоп лосса в пунктах:
int SL=50;
SetStopLoss(CalculationMode.Ticks,SL);

Тейк профит:
SetProfitTarget(CalculationMode.Ticks,TP);

hammerlights сказал(а):
3. Выставление трала идет как функция и выполняеться уже на сервере - или надо вести его на клиенте - тащя стоплосс за ценой?
Идет на клиентской части, вот пример процедуры:
Код:
void Tral()
        {
            
            if(Position.MarketPosition==MarketPosition.Long)
            {
                pnlPoint=Convert.ToInt32(Math.Round((Close[0]-Position.AvgPrice)/TickSize,0));
            }
            if(Position.MarketPosition==MarketPosition.Short)
            {
                pnlPoint=Convert.ToInt32(Math.Round((Position.AvgPrice-Close[0])/TickSize,0));
            }
            
            
            if(Position.MarketPosition==MarketPosition.Long)
            {
                    if(Close[0]-Tral*TickSize>SLPrice)
                    {
                        SLPrice=Close[0]Tral*TickSize;
                        SetStopLoss(CalculationMode.Price,SLPrice);
                    }
         
            }
            if(Position.MarketPosition==MarketPosition.Short)
            {
                    if(Close[0]+Tral*TickSize<SLPrice)
                    {
                    SLPrice=Close[0]+Tral*TickSize
                    SetStopLoss(CalculationMode.Price,SLPrice);
                    }
                            
        }            
        }
Поиск ордера, открытого вышеуказанным способом по magic можно лишь среди позиций на счете(Account.Orders, либо позиций в данной стратегии this.Orders)

Код:
foreach(Order ord in Account.Orders)
                {
                    string s=ord.Name;
                    if(s.IndexOf(magic)!=-1) 
                    {//Здесь что то делаем с ордером

}}
 
Вверх Снизу