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
}
}
Последнее редактирование: