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

Мультитаймфреймовая стратегия и CCI

romanick

New Member
NinjaTrader
#1
Добрый день!
Требуется получить значение функции индикатора CCI со второго таймфрема. Но почему-то возвращаемые значения далеки от реальных, - тех которых наблюдаю на графике.

Делаю так:
1. Add(PeriodType.Minute, 15); в функции Initialize()
2. В OnBarUpdate() делаю Print(Time[0] + " " + CCI(BarsArray[1], 21)[0]) что теоретически должно возвратить текущее значение индикатора CCI на M15-графике. Но значения отличаются кардинально. Реально значение больше плюс 175, а функция возвращает минус 145.
Что я делаю не так?
Основной тайм-фрейм - M1. Print делаю когда BarsInProgress==0, т.е. обрабатываю по-идее только закрытие баров основного таймфрейма (в Initialize() стоит CalculateOnBarClose = true;)
 

Дмитрий 1

Active Member
NinjaTrader
#3
romanick, получилось с кодом?

если вам как индикатор нужен, то ниже пример.
как образец - рабочий график 3ренж, дополнительный 5ренж по которому берется расположение двух машек с параметром 3 и 7.
выдает текстовое сообщение на графике.

Код:
protected override void Initialize()
        {
			
			CalculateOnBarClose = false;
            Overlay = true;
            PriceTypeSupported	= false;
			PaintPriceMarkers = false;
			DisplayInDataBox = false;
			Add(PeriodType.Range,3);
			Add(PeriodType.Range, 5);
			
			// Note: Bars are added to the BarsArray and can be accessed via an index value
			// E.G. BarsArray[1] ---> Accesses the 3-Range Bars object added above
		}

		protected override void OnBarUpdate()
        {
			if (CurrentBars[0]<BarsRequired ||CurrentBars[1]<BarsRequired ||CurrentBars[2]<BarsRequired)//Make sure we have enough bars
				return;
				
			// Checks MA conditions on 5R (higher time frame) and Draw Visual Label on 3R (lower time frame)
			if (SMA(BarsArray[2], 7)[0] - SMA(BarsArray[2], 3)[0] <=2*TickSize//Maximum 2 pips between MAs
				&& Highs[2][0] > SMA(BarsArray[2], 7)[0]//Price breaks above SMA 7
				&& Rising(SMA(BarsArray[2],7)) && Rising(SMA(BarsArray[2],3)))//both SMAs Rising
			DrawTextFixed("Possible Long", " POSSIBLE LONG ON 3R ", tPosition, Color.White, textFontMed, Color.Gray, Color.DarkBlue, 10);
				else
			RemoveDrawObject("Possible Long");
			
			if (SMA(BarsArray[2], 3)[0] - SMA(BarsArray[2], 7)[0] <=2*TickSize//Maximum 2 pips between MAs
				&& Lows[2][0] < SMA(BarsArray[2], 7)[0]//Price breaks below SMA 7
				&& Falling(SMA(BarsArray[2],7)) && Falling(SMA(BarsArray[2],3)))//both SMAs Falling
			DrawTextFixed("Possible Short", " POSSIBLE SHORT ON 3R ", tPosition, Color.White, textFontMed, Color.Gray, Color.DarkOrange, 10);
				else
			RemoveDrawObject("Possible Short");
       		
		}
как применить значение индикатора от другого графика в роботе ........ пока разбираю. ::dry.gif::
 
Вверх Снизу