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

Программирование Шаблон стратегии. Что не так?

smarthead

Member
NinjaTrader
#1
Ребята, всем привет.
Написал шаблон стратегии для проверки торговых идей, а он не работает. То не запускается, то проблемы с ордерами. Суть шаблона в использовании дополнительной серии и применение трейлинга. Что не так? Подскажите пожалуйста. Вроде всё просто - но блин что-то не так. На анализаторе стратегии всё работает и показывает результативность. Но включаю на демосчёт и начинаются проблемы. Может пригодится ещё кому из новичков.
Спасибо.

C#:
#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

namespace NinjaTrader.NinjaScript.Strategies
{
    public class ksMaket : Strategy
    {
        #region OnStateChange
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Description                                    = @"Strat  ";
                Name                                        = "ksMaket";
             
                Calculate                                    = Calculate.OnBarClose;
                EntriesPerDirection                            = 1;
                EntryHandling                                = EntryHandling.AllEntries;
                IsExitOnSessionCloseStrategy                = true;
                ExitOnSessionCloseSeconds                    = 1800;
                IsFillLimitOnTouch                            = false;
                MaximumBarsLookBack                            = MaximumBarsLookBack.TwoHundredFiftySix;
                OrderFillResolution                            = OrderFillResolution.Standard;
                Slippage                                    = 0;
                IsAdoptAccountPositionAware                 = true;
                StartBehavior                                = StartBehavior.AdoptAccountPosition;
                TimeInForce                                    = TimeInForce.Day;
                TraceOrders                                    = true;
                RealtimeErrorHandling                        = RealtimeErrorHandling.StopCancelClose;
                StopTargetHandling                            = StopTargetHandling.PerEntryExecution;
                BarsRequiredToTrade                            = 5;
                ConnectionLossHandling                         = ConnectionLossHandling.KeepRunning;
                IsInstantiatedOnEachOptimizationIteration    = true;
             
                QuantityContracts                            = 21;
             
            }
            else if (State == State.Configure)
            {
                             
                AddDataSeries(Data.BarsPeriodType.Day, 1);
                SetTrailStop(@"MyEntryLong", CalculationMode.Ticks, 5, false);
                SetTrailStop(@"MyEntryShort", CalculationMode.Ticks, 5, false);
            }
        }
        #endregion
     
        #region OnBarUpdate
        protected override void OnBarUpdate()
        {
            if (BarsInProgress != 0) return;
            if (CurrentBars[0] < BarsRequiredToTrade || CurrentBars[1] < BarsRequiredToTrade) return;
            Print("BarsInProgress & CurrentBars - yes");
         
            if(    
                //Логика любая
                Close[0] > CurrentDayOHL().CurrentOpen[0]
            )
             
            {
                EnterLong(Convert.ToInt32(QuantityContracts), @"MyEntryLong");
            }
         
            else if(
                Close[0] < Opens[1][0]
            )
             
            {
                EnterShort(Convert.ToInt32(QuantityContracts), @"MyEntryShort");
            }
         
        }
        #endregion
     
        #region Properties
     
        [NinjaScriptProperty]
        [Range(1, int.MaxValue)]
        [Display(Name="QuantityContracts", Description="Количество контрактов", Order=1, GroupName="Parameters")]
        public int QuantityContracts
        { get; set; }
     
        #endregion

    }
}
 
Последнее редактирование: