Advertisement
retesere20

test-NT8-strategy-sync-ChartTrader

Aug 27th, 2018
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.27 KB | None | 0 0
  1. #region Using declarations
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.ComponentModel.DataAnnotations;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Xml.Serialization;
  13. using NinjaTrader.Cbi;
  14. using NinjaTrader.Gui;
  15. using NinjaTrader.Gui.Chart;
  16. using NinjaTrader.Gui.SuperDom;
  17. using NinjaTrader.Gui.Tools;
  18. using NinjaTrader.Data;
  19. using NinjaTrader.NinjaScript;
  20. using NinjaTrader.Core.FloatingPoint;
  21. using NinjaTrader.NinjaScript.Indicators;
  22. using NinjaTrader.NinjaScript.DrawingTools;
  23. #endregion
  24.  
  25. //This namespace holds Strategies in this folder and is required. Do not change it.
  26. namespace NinjaTrader.NinjaScript.Strategies.LJ
  27. {
  28. public class ThreeBars : Strategy
  29. {
  30. protected override void OnStateChange()
  31. {
  32. if (State == State.SetDefaults)
  33. {
  34. Description = @"Enter the description for your new custom Strategy here.";
  35. Name = "ThreeBars";
  36. Calculate = Calculate.OnBarClose;
  37. EntriesPerDirection = 1;
  38. EntryHandling = EntryHandling.AllEntries;
  39. IsExitOnSessionCloseStrategy = true;
  40. ExitOnSessionCloseSeconds = 30;
  41. IsFillLimitOnTouch = false;
  42. MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
  43. OrderFillResolution = OrderFillResolution.Standard;
  44. Slippage = 0;
  45. StartBehavior = StartBehavior.WaitUntilFlat;
  46. TimeInForce = TimeInForce.Gtc;
  47. TraceOrders = false;
  48. RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
  49. StopTargetHandling = StopTargetHandling.PerEntryExecution;
  50. BarsRequiredToTrade = 20;
  51. // Disable this property for performance gains in Strategy Analyzer optimizations
  52. // See the Help Guide for additional information
  53. IsInstantiatedOnEachOptimizationIteration = true;
  54.  
  55. IsAdoptAccountPositionAware = true;
  56. StartBehavior = StartBehavior.AdoptAccountPosition;
  57.  
  58. }
  59. else if (State == State.Configure)
  60. {
  61. }
  62. }
  63.  
  64. protected override void OnBarUpdate()
  65. {
  66. if (CurrentBar<2 || State != State.Realtime) return;
  67. main_logic();
  68. }
  69.  
  70. protected override void OnMarketData(MarketDataEventArgs marketDataUpdate)
  71. {
  72. if (CurrentBar<2 || State != State.Realtime) return;
  73. order_sync();
  74. }
  75.  
  76. private Dictionary<string,bool> _bool = new Dictionary<string,bool>();
  77. private bool lock_trade = false;
  78.  
  79. protected void main_logic()
  80. {
  81. //Print("OBU:"+lock_trade.ToString() + "---" + DateTime.Now.ToString() + " , " + PositionAccount.MarketPosition.ToString() + ", "+ Position.MarketPosition.ToString() +", ");
  82. string ls_name ="";
  83.  
  84. Print("-----");
  85. Print(PositionAccount.MarketPosition.ToString() +"---" + PositionAccount.Quantity.ToString());
  86. Print(Position.MarketPosition.ToString() +"---" + Position.Quantity.ToString());
  87.  
  88. if (lock_trade) return;
  89. if (PositionAccount.MarketPosition == MarketPosition.Flat)
  90. {
  91. ls_name="Long";
  92. _bool["volumeOk_"+ls_name] = true ;
  93. _bool["barsOk_"+ls_name] = true ;
  94.  
  95. _bool["cond_"+ls_name]= _bool["volumeOk_"+ls_name] && _bool["barsOk_"+ls_name];
  96. if( _bool["cond_"+ls_name] )
  97. {
  98. if(Position.MarketPosition == MarketPosition.Long)
  99. Print("Why there is already:"+Position.MarketPosition.ToString());
  100. else {
  101. EnterLong("ord_"+ls_name);
  102. }
  103. }
  104. }
  105. }
  106.  
  107.  
  108. protected void order_sync()
  109. {
  110. if (lock_trade) return;
  111. if (PositionAccount.MarketPosition != Position.MarketPosition)
  112. {
  113. if(PositionAccount.MarketPosition == MarketPosition.Flat)
  114. {
  115. if(Position.MarketPosition == MarketPosition.Long) {
  116. myOrder("Exit", "Long", true, 0);
  117. }
  118. else if(Position.MarketPosition == MarketPosition.Short) {
  119. myOrder("Exit", "Short", true, 0);
  120. }
  121. }
  122. else if(PositionAccount.MarketPosition == MarketPosition.Long)
  123. {
  124. if(Position.MarketPosition == MarketPosition.Flat) {
  125. myOrder("Enter", "Long", true, PositionAccount.Quantity);
  126. }
  127. else if(Position.MarketPosition == MarketPosition.Short) {
  128. myOrder("Enter", "Long", true, PositionAccount.Quantity);
  129. }
  130. }
  131.  
  132. if (!try_auto_change_order)
  133. {
  134. Position.MarketPosition=PositionAccount.MarketPosition;
  135. Position.Quantity = PositionAccount.Quantity;
  136. Print("Positions was manually re-set");
  137. }
  138.  
  139. }
  140.  
  141. }
  142.  
  143. private OrderAction oa;
  144. public void myOrder(string action, string L_or_S, bool autoCorrection, int quantity)
  145. {
  146. if( !try_auto_change_order ) return;
  147.  
  148. Print("Auto-correct from: " + Position.MarketPosition.ToString() +"-->"+ PositionAccount.MarketPosition.ToString() );
  149.  
  150. if( action== "Enter" && L_or_S == "Long")
  151. {
  152. oa = OrderAction.Buy;
  153. EnterLong(quantity, "ord_"+L_or_S);
  154. }
  155. if( action== "Enter" && L_or_S == "Short")
  156. {
  157. oa = OrderAction.SellShort;
  158. EnterShort(quantity, "ord_"+L_or_S);
  159. }
  160. if( action== "Exit" && L_or_S == "Long")
  161. {
  162. oa = OrderAction.Sell;
  163. ExitLong("ord_"+L_or_S);
  164. }
  165. if( action== "Exit" && L_or_S == "Short")
  166. {
  167. oa = OrderAction.BuyToCover;
  168. ExitShort("ord_"+L_or_S);
  169. }
  170. //SubmitOrderUnmanaged(
  171. }
  172.  
  173. //OnPositionUpdate(Position position, double averagePrice, int quantity, MarketPosition marketPosition)
  174. protected override void OnOrderUpdate(Order order, double limitPrice, double stopPrice, int quantity, int filled, double averageFillPrice, OrderState orderState, DateTime time, ErrorCode error, string comment)
  175. {
  176. Print("Ord.Update:" + order.ToString());
  177. if(orderState == OrderState.Submitted )
  178. {
  179. lock_trade=true;
  180. }
  181. if(orderState == OrderState.Filled || orderState == OrderState.Rejected || orderState == OrderState.PartFilled || orderState == OrderState.Cancelled )
  182. {
  183. Print("--");
  184. Print(orderState.ToString());
  185. lock_trade=false;
  186. }
  187. }
  188.  
  189. // OnExecutionUpdate(Execution execution, string executionId, double price, int quantity, MarketPosition marketPosition, string orderId, DateTime time)
  190.  
  191.  
  192.  
  193. #region Properties
  194.  
  195.  
  196. public bool try_auto_change_order
  197. { get; set; }
  198.  
  199.  
  200. #endregion
  201.  
  202. }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement