Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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.LJ
- {
- public class ThreeBars : Strategy
- {
- protected override void OnStateChange()
- {
- if (State == State.SetDefaults)
- {
- Description = @"Enter the description for your new custom Strategy here.";
- Name = "ThreeBars";
- Calculate = Calculate.OnBarClose;
- EntriesPerDirection = 1;
- EntryHandling = EntryHandling.AllEntries;
- IsExitOnSessionCloseStrategy = true;
- ExitOnSessionCloseSeconds = 30;
- IsFillLimitOnTouch = false;
- MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
- OrderFillResolution = OrderFillResolution.Standard;
- Slippage = 0;
- StartBehavior = StartBehavior.WaitUntilFlat;
- TimeInForce = TimeInForce.Gtc;
- TraceOrders = false;
- RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
- StopTargetHandling = StopTargetHandling.PerEntryExecution;
- BarsRequiredToTrade = 20;
- // Disable this property for performance gains in Strategy Analyzer optimizations
- // See the Help Guide for additional information
- IsInstantiatedOnEachOptimizationIteration = true;
- IsAdoptAccountPositionAware = true;
- StartBehavior = StartBehavior.AdoptAccountPosition;
- }
- else if (State == State.Configure)
- {
- }
- }
- protected override void OnBarUpdate()
- {
- if (CurrentBar<2 || State != State.Realtime) return;
- main_logic();
- }
- protected override void OnMarketData(MarketDataEventArgs marketDataUpdate)
- {
- if (CurrentBar<2 || State != State.Realtime) return;
- order_sync();
- }
- private Dictionary<string,bool> _bool = new Dictionary<string,bool>();
- private bool lock_trade = false;
- protected void main_logic()
- {
- //Print("OBU:"+lock_trade.ToString() + "---" + DateTime.Now.ToString() + " , " + PositionAccount.MarketPosition.ToString() + ", "+ Position.MarketPosition.ToString() +", ");
- string ls_name ="";
- Print("-----");
- Print(PositionAccount.MarketPosition.ToString() +"---" + PositionAccount.Quantity.ToString());
- Print(Position.MarketPosition.ToString() +"---" + Position.Quantity.ToString());
- if (lock_trade) return;
- if (PositionAccount.MarketPosition == MarketPosition.Flat)
- {
- ls_name="Long";
- _bool["volumeOk_"+ls_name] = true ;
- _bool["barsOk_"+ls_name] = true ;
- _bool["cond_"+ls_name]= _bool["volumeOk_"+ls_name] && _bool["barsOk_"+ls_name];
- if( _bool["cond_"+ls_name] )
- {
- if(Position.MarketPosition == MarketPosition.Long)
- Print("Why there is already:"+Position.MarketPosition.ToString());
- else {
- EnterLong("ord_"+ls_name);
- }
- }
- }
- }
- protected void order_sync()
- {
- if (lock_trade) return;
- if (PositionAccount.MarketPosition != Position.MarketPosition)
- {
- if(PositionAccount.MarketPosition == MarketPosition.Flat)
- {
- if(Position.MarketPosition == MarketPosition.Long) {
- myOrder("Exit", "Long", true, 0);
- }
- else if(Position.MarketPosition == MarketPosition.Short) {
- myOrder("Exit", "Short", true, 0);
- }
- }
- else if(PositionAccount.MarketPosition == MarketPosition.Long)
- {
- if(Position.MarketPosition == MarketPosition.Flat) {
- myOrder("Enter", "Long", true, PositionAccount.Quantity);
- }
- else if(Position.MarketPosition == MarketPosition.Short) {
- myOrder("Enter", "Long", true, PositionAccount.Quantity);
- }
- }
- if (!try_auto_change_order)
- {
- Position.MarketPosition=PositionAccount.MarketPosition;
- Position.Quantity = PositionAccount.Quantity;
- Print("Positions was manually re-set");
- }
- }
- }
- private OrderAction oa;
- public void myOrder(string action, string L_or_S, bool autoCorrection, int quantity)
- {
- if( !try_auto_change_order ) return;
- Print("Auto-correct from: " + Position.MarketPosition.ToString() +"-->"+ PositionAccount.MarketPosition.ToString() );
- if( action== "Enter" && L_or_S == "Long")
- {
- oa = OrderAction.Buy;
- EnterLong(quantity, "ord_"+L_or_S);
- }
- if( action== "Enter" && L_or_S == "Short")
- {
- oa = OrderAction.SellShort;
- EnterShort(quantity, "ord_"+L_or_S);
- }
- if( action== "Exit" && L_or_S == "Long")
- {
- oa = OrderAction.Sell;
- ExitLong("ord_"+L_or_S);
- }
- if( action== "Exit" && L_or_S == "Short")
- {
- oa = OrderAction.BuyToCover;
- ExitShort("ord_"+L_or_S);
- }
- //SubmitOrderUnmanaged(
- }
- //OnPositionUpdate(Position position, double averagePrice, int quantity, MarketPosition marketPosition)
- protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string comment)
- {
- Print("Ord.Update:" + order.ToString());
- if(orderState == OrderState.Submitted )
- {
- lock_trade=true;
- }
- if(orderState == OrderState.Filled || orderState == OrderState.Rejected || orderState == OrderState.PartFilled || orderState == OrderState.Cancelled )
- {
- Print("--");
- Print(orderState.ToString());
- lock_trade=false;
- }
- }
- // OnExecutionUpdate(Execution execution, string executionId, double price, int quantity, MarketPosition marketPosition, string orderId, DateTime time)
- #region Properties
- public bool try_auto_change_order
- { get; set; }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement