Guest User

Untitled

a guest
Mar 5th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. using System;
  2. namespace Broker.StrategyLanguage.Strategy
  3. {
  4. public class InsideBar : BaseStrategyAdvisor
  5. {
  6. private double m_TP0;
  7. private double m_SL0;
  8. private double m_TP1;
  9. private double m_SL1;
  10. private IMarketOrder m_Order0;
  11. private IPriceOrder m_Order0_TP;
  12. private IPriceOrder m_Order0_SL;
  13. private IMarketOrder m_Order1;
  14. private IPriceOrder m_Order1_TP;
  15. private IPriceOrder m_Order1_SL;
  16. private bool Email_lock = true;
  17. public InsideBar(object ctx) :
  18. base(ctx) {}
  19.  
  20. private int m_Limit = 0;
  21. [Input]
  22. public int Limit
  23. {
  24. get{return m_Limit;}
  25. set{m_Limit=value;}
  26. }
  27.  
  28. private int m_Stop = 0;
  29. [Input]
  30. public int Stop
  31. {
  32. get{return m_Stop;}
  33. set{m_Stop=value;}
  34. }
  35.  
  36. private string m_Username = "";
  37. [Input]
  38. public string Username
  39. {
  40. get{return m_Username;}
  41. set{m_Username=value;}
  42. }
  43.  
  44. private string m_Password = "";
  45. [Input]
  46. public string Password
  47. {
  48. get{return m_Password;}
  49. set{m_Password=value;}
  50. }
  51.  
  52. private string m_Smtp = "";
  53. [Input]
  54. public string Smtp
  55. {
  56. get{return m_Smtp;}
  57. set{m_Smtp=value;}
  58. }
  59.  
  60. private string m_From = "";
  61. [Input]
  62. public string From
  63. {
  64. get{return m_From;}
  65. set{m_From=value;}
  66. }
  67.  
  68. private string m_To = "";
  69. [Input]
  70. public string To
  71. {
  72. get{return m_To;}
  73. set{m_To=value;}
  74. }
  75.  
  76. private bool m_UseSSL = false;
  77. [Input]
  78. public bool UseSSL
  79. {
  80. get{return m_UseSSL;}
  81. set{m_UseSSL=value;}
  82. }
  83.  
  84. private int m_Port = 25;
  85. [Input]
  86. public int Port
  87. {
  88. get{return m_Port;}
  89. set{m_Port=value;}
  90. }
  91.  
  92. private int m_TrailingStop = 0;
  93. [Input]
  94. public int TrailingStop
  95. {
  96. get{return m_TrailingStop;}
  97. set{m_TrailingStop=value;}
  98. }
  99.  
  100. private bool m_EmailAlert = false;
  101. [Input]
  102. public bool EmailAlert
  103. {
  104. get{return m_EmailAlert;}
  105. set{m_EmailAlert=value;}
  106. }
  107.  
  108. protected override void Construct() {
  109. m_Order0 =
  110. OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "InsBarLE", OrderAction.Buy));
  111. m_Order0_SL =
  112. OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default, "InsBarLE_SL", OrderAction.Sell));
  113. m_Order0_TP =
  114. OrdersFactory.CreateLimit(new OrdersCreateParams(Lots.Default, "InsBarLE_TP", OrderAction.Sell));
  115. m_Order1 =
  116. OrdersFactory.CreateMarketNextBar(new OrdersCreateParams(Lots.Default, "InsBarSE", OrderAction.SellShort));
  117. m_Order1_SL =
  118. OrdersFactory.CreateStop(new OrdersCreateParams(Lots.Default, "InsBarsSE_SL", OrderAction.BuyToCover));
  119. m_Order1_TP =
  120. OrdersFactory.CreateLimit(new OrdersCreateParams(Lots.Default, "InsBarsSE_TP", OrderAction.BuyToCover));
  121. }
  122. protected override void Initialize() {
  123. }
  124. protected override void Destroy() {}
  125. protected override void Execute() {
  126. if(Bars.Status == BarStatus.Close)
  127. Email_lock = true;
  128.  
  129. CheckTrailingStop();
  130. CheckExitLogic();
  131.  
  132. if ((Functions.DoubleLess(Bars.High[0], Bars.High[1]) && Functions.DoubleGreater(Bars.Low[0], Bars.Low[1]))){
  133. if (Functions.DoubleGreater(Bars.Close[0], Bars.Open[0])){
  134. if(Limit > 0) m_TP0 = Bars.Close[0] + Limit * Point; else m_TP0 = 0;
  135. if(Stop > 0) m_SL0 = Bars.Close[0] - Stop * Point; else m_SL0 = 0;
  136. if(EmailAlert == true && Email_lock == true) {
  137. SendMail("Order0", "Order0 is traded at Price " + Bars.Close[0]);
  138. Email_lock = false;
  139. }
  140. m_Order0.Generate();
  141. }
  142. if (Functions.DoubleLess(Bars.Close[0], Bars.Open[0])){
  143. if(Limit > 0) m_TP1 = Bars.Close[0] - Limit * Point; else m_TP1 = 0;
  144. if(Stop > 0) m_SL1 = Bars.Close[0] + Stop * Point; else m_SL1 = 0;
  145. if(EmailAlert == true && Email_lock == true) {
  146. SendMail("Order1", "Order1 is traded at Price " + Bars.Close[0]);
  147. Email_lock = false;
  148. }
  149. m_Order1.Generate();
  150. }
  151. }
  152. }
  153.  
  154. private void CheckExitLogic() {
  155. if(StrategyInfo.MarketPosition == 0) return;
  156. if(StrategyInfo.MarketPosition > 0) {
  157. if(m_TP0 > 0)
  158. m_Order0_TP.Generate(m_TP0);
  159. if(m_SL0 > 0)
  160. m_Order0_SL.Generate(m_SL0);
  161. }
  162. if(StrategyInfo.MarketPosition < 0) {
  163. if(m_TP1 > 0)
  164. m_Order1_TP.Generate(m_TP1);
  165. if(m_SL1 > 0)
  166. m_Order1_SL.Generate(m_SL1);
  167. }
  168. }
  169.  
  170. private void CheckTrailingStop() {
  171. if(m_TrailingStop == 0) return;
  172. if(StrategyInfo.MarketPosition > 0) {
  173. if(m_SL0 >0 && (Bars.Close[0] - m_SL0) > (Stop + m_TrailingStop) * Point)
  174. m_SL0 = Bars.Close[0] - Stop * Point;
  175. }
  176. if(StrategyInfo.MarketPosition < 0) {
  177. if(m_SL1 > 0 && (m_SL1 - Bars.Close[0]) > (Stop + m_TrailingStop) * Point)
  178. m_SL1 = Bars.Close[0] + Stop * Point;
  179. }
  180. }
  181.  
  182. private double Point //Returns the point value
  183. {
  184. get{
  185. if(Bars.Point < 0.01)
  186. {
  187. return(Bars.Point * 10);
  188. }
  189. else
  190. {
  191. return Bars.Point;
  192. }
  193. }
  194. }
  195.  
  196. protected void SendMail(string subject, string msgToSend)
  197. {
  198. try
  199. {
  200. System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient(Smtp);
  201. smtpClient.Credentials = new System.Net.NetworkCredential(Username, Password);
  202. smtpClient.EnableSsl = UseSSL;
  203. smtpClient.Port = Port;
  204. // send our email
  205. smtpClient.Send(From, To, subject, msgToSend);
  206. }
  207. catch (Exception e)
  208. {
  209. Console.WriteLine(e.Message);
  210. }
  211. }
  212. }
Add Comment
Please, Sign In to add comment