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

Программирование Использование индикатора Sim22_DeltaV2 в роботах.

Scrittore

New Member
NinjaTrader
В начале скажу что у меня очень скромный стаж программирования исчисляющийся днями. Поэтому не судите за возможно глупые вопросы.
Нужен робот учитывающий дельту. Из бесплатных нашёл только этот индикатор поэтому его и заюзал. Может кто другой сможет предложитьне откажусь.
Суть в том что в дата боксе данные по нему отображаются норм, а когда пытаешься запихать эту инфу в код он не в какую не хочет работать.
Код:
Sim22_DeltaV21                = Sim22_DeltaV2(Close, Sim22_DeltaV2_Type.BidAsk, false, false, false, Sim22_DeltaV2_FilterModeType.None, 1);
if (Sim22_DeltaV21[0] > 500)
Что я не так делаю? Мои мысли - мог накосячить только с копированием, хендла индикатора (так это тут называется). В самом индикаторе есть опция настройки глубины истории, но при вызове через хендл такой опции нет, а по умолчанию он с нулевого бара начинает считать.
P.S. И я запутался, в ниндзе нулевым баром считается текущий? Через визард когда ноль ставишь, он обрабатывает предыдущий бар.
 

Scrittore

New Member
NinjaTrader
Я тут пораскинул мозгами и сообразил. На одну свечу в этом индикаторе приходится четыре числа, а у меня тут массив с номерами баров. Странно что он сразу предупреждение не выдаёт, или... Вобщем может помочь кто-нибудь?
 

Scrittore

New Member
NinjaTrader
Помогать тут любят)) но телепатов мало.прикладывайте код или исходники.
Да код простецкий, я специально кусок кода роботом сделал, разобраться. Выше указанная конструкция и не работает. Тут где-то грубейшая ошибка, но я по неопытности не понимаю. Как уже сказал, скорее всего на одну свечу тут приходится OHLC данные, а я в одну ячейку массива похоже пытаюсь это запихать. Не понятно только в этом случае почему код с такой ошибкой компилируется. Я так полагаю. По сути мне нужна переменная отвечающая за Close в индикаторе, чтобы в дальнейшем провести if и принять решение о сделке. Дело в том что там где обычные бары, например VOL у меня всё тоже самое нормально работает. Так что собака порылась именно там где я указал.
Код:
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.Indicators;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion

//This namespace holds Strategies in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Strategies
{
    public class EasyVDSLongTest : Strategy
    {
        private NinjaTrader.NinjaScript.Indicators.Sim22.Sim22_DeltaV2 Sim22_DeltaV21;

        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description                                    = @"Enter the description for your new custom Strategy here.";
                Name                                        = "EasyVDSLongTest";
                Calculate                                    = Calculate.OnBarClose;
                EntriesPerDirection                            = 10;
                EntryHandling                                = EntryHandling.UniqueEntries;
                IsExitOnSessionCloseStrategy                = true;
                ExitOnSessionCloseSeconds                    = 30;
                IsFillLimitOnTouch                            = true;
                MaximumBarsLookBack                            = MaximumBarsLookBack.Infinite;
                OrderFillResolution                            = OrderFillResolution.Standard;
                Slippage                                    = 1;
                StartBehavior                                = StartBehavior.ImmediatelySubmit;
                TimeInForce                                    = TimeInForce.Gtc;
                TraceOrders                                    = true;
                RealtimeErrorHandling                        = RealtimeErrorHandling.StopCancelClose;
                StopTargetHandling                            = StopTargetHandling.PerEntryExecution;
                BarsRequiredToTrade                            = 2;
                // Disable this property for performance gains in Strategy Analyzer optimizations
                // See the Help Guide for additional information
                IsInstantiatedOnEachOptimizationIteration    = true;
                TP                    = 25;
                SL                    = 10;
            }
            else if (State == State.Configure)
            {
            }
            else if (State == State.DataLoaded)
            {               
                Sim22_DeltaV21                = Sim22_DeltaV2(Close, Sim22_DeltaV2_Type.BidAsk, false, false, false, Sim22_DeltaV2_FilterModeType.None, 1);
                SetStopLoss("", CalculationMode.Ticks, 12, false);
                SetProfitTarget("", CalculationMode.Ticks, 25);
            }
        }

        protected override void OnBarUpdate()
        {
            if (BarsInProgress != 0)
                return;

            if (CurrentBars[0] < 1)
                return;

             // Set 1
            if (Sim22_DeltaV21[0] > 1)
            {
                EnterLong(Convert.ToInt32(DefaultQuantity), "");
            }
            
        }

        #region Properties
        [NinjaScriptProperty]
        [Range(10, int.MaxValue)]
        [Display(Name="TP", Order=1, GroupName="Parameters")]
        public int TP
        { get; set; }

        [NinjaScriptProperty]
        [Range(10, int.MaxValue)]
        [Display(Name="SL", Order=2, GroupName="Parameters")]
        public int SL
        { get; set; }
        #endregion

    }
}
 

Arkadiy

Well-Known Member
NinjaTrader
Да код простецкий, я специально кусок кода роботом сделал, разобраться. Выше указанная конструкция и не работает. Тут где-то грубейшая ошибка, но я по неопытности не понимаю. Как уже сказал, скорее всего на одну свечу тут приходится OHLC данные, а я в одну ячейку массива похоже пытаюсь это запихать. Не понятно только в этом случае почему код с такой ошибкой компилируется. Я так полагаю. По сути мне нужна переменная отвечающая за Close в индикаторе, чтобы в дальнейшем провести if и принять решение о сделке. Дело в том что там где обычные бары, например VOL у меня всё тоже самое нормально работает. Так что собака порылась именно там где я указал.
Код:
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.Indicators;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion

//This namespace holds Strategies in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Strategies
{
    public class EasyVDSLongTest : Strategy
    {
        private NinjaTrader.NinjaScript.Indicators.Sim22.Sim22_DeltaV2 Sim22_DeltaV21;

        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description                                    = @"Enter the description for your new custom Strategy here.";
                Name                                        = "EasyVDSLongTest";
                Calculate                                    = Calculate.OnBarClose;
                EntriesPerDirection                            = 10;
                EntryHandling                                = EntryHandling.UniqueEntries;
                IsExitOnSessionCloseStrategy                = true;
                ExitOnSessionCloseSeconds                    = 30;
                IsFillLimitOnTouch                            = true;
                MaximumBarsLookBack                            = MaximumBarsLookBack.Infinite;
                OrderFillResolution                            = OrderFillResolution.Standard;
                Slippage                                    = 1;
                StartBehavior                                = StartBehavior.ImmediatelySubmit;
                TimeInForce                                    = TimeInForce.Gtc;
                TraceOrders                                    = true;
                RealtimeErrorHandling                        = RealtimeErrorHandling.StopCancelClose;
                StopTargetHandling                            = StopTargetHandling.PerEntryExecution;
                BarsRequiredToTrade                            = 2;
                // Disable this property for performance gains in Strategy Analyzer optimizations
                // See the Help Guide for additional information
                IsInstantiatedOnEachOptimizationIteration    = true;
                TP                    = 25;
                SL                    = 10;
            }
            else if (State == State.Configure)
            {
            }
            else if (State == State.DataLoaded)
            {              
                Sim22_DeltaV21                = Sim22_DeltaV2(Close, Sim22_DeltaV2_Type.BidAsk, false, false, false, Sim22_DeltaV2_FilterModeType.None, 1);
                SetStopLoss("", CalculationMode.Ticks, 12, false);
                SetProfitTarget("", CalculationMode.Ticks, 25);
            }
        }

        protected override void OnBarUpdate()
        {
            if (BarsInProgress != 0)
                return;

            if (CurrentBars[0] < 1)
                return;

             // Set 1
            if (Sim22_DeltaV21[0] > 1)
            {
                EnterLong(Convert.ToInt32(DefaultQuantity), "");
            }
           
        }

        #region Properties
        [NinjaScriptProperty]
        [Range(10, int.MaxValue)]
        [Display(Name="TP", Order=1, GroupName="Parameters")]
        public int TP
        { get; set; }

        [NinjaScriptProperty]
        [Range(10, int.MaxValue)]
        [Display(Name="SL", Order=2, GroupName="Parameters")]
        public int SL
        { get; set; }
        #endregion

    }
}
это все классно, но вся соль в том индикаторе который ты используешь и к которому обращаешься - Sim22_DeltaV2. приложи файл сюда
 

Arkadiy

Well-Known Member
NinjaTrader
посмотрел бегло индикатор, все там хорошо создается. мне кажется тебе надо просто написать условие иначе. там есть датасерия Delta, к ней и обращайся
Код:
 if (Sim22_DeltaV21.Delta[0] > 1)
            {
                EnterLong(Convert.ToInt32(DefaultQuantity), "");
            }
 

Scrittore

New Member
NinjaTrader
посмотрел бегло индикатор, все там хорошо создается. мне кажется тебе надо просто написать условие иначе. там есть датасерия Delta, к ней и обращайся
Код:
if (Sim22_DeltaV21.Delta[0] > 1)
            {
                EnterLong(Convert.ToInt32(DefaultQuantity), "");
            }
Спасибо, попробую данный вариант. Но я уже свою дельту написал :) Уже другие проблемы. Если интересно суть тут
 

Arkadiy

Well-Known Member
NinjaTrader
в чем смысл что написал сам, только что прокачал свой уровень. а так суть пока не понятно что ты хочешь написать?
 

elsnere777

Well-Known Member
NinjaTrader

Вложения

Верх Низ