Advertisement
Guest User

gustav

a guest
Dec 24th, 2015
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.89 KB | None | 0 0
  1. //+------------------------------------------------------------------+
  2. //| Strategy: gustav.mq4 |
  3. //| Created with EABuilder.com |
  4. //| http://eabuilder.com |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Created with EABuilder.com"
  7. #property link "http://eabuilder.com"
  8. #property version "1.00"
  9. #property description "trend following with nonlagdot(20)"
  10.  
  11. #include <stdlib.mqh>
  12. #include <stderror.mqh>
  13.  
  14. extern double BreakEven_Points = 21;
  15. int LotDigits; //initialized in OnInit
  16. extern int MagicNumber = 358105;
  17. int NextOpenTradeAfterBars = 1; //next open trade after time
  18. datetime LastTradeTime = 0;
  19. double TradeSize = 0.01;
  20. int MaxSlippage = 3; //adjusted in OnInit
  21. int MaxOpenTrades = 1000;
  22. int MaxLongTrades = 1000;
  23. int MaxShortTrades = 1000;
  24. int MaxPendingOrders = 1000;
  25. bool Hedging = false;
  26. int OrderRetry = 5; //# of retries if sending order returns error
  27. int OrderWait = 5; //# of seconds to wait if sending order returns error
  28. double myPoint; //initialized in OnInit
  29.  
  30. void myAlert(string type, string message)
  31. {
  32. if(type == "print")
  33. Print(message);
  34. else if(type == "error")
  35. {
  36. Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
  37. }
  38. else if(type == "order")
  39. {
  40. Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
  41. }
  42. else if(type == "modify")
  43. {
  44. Print(type+" | gustav @ "+Symbol()+","+Period()+" | "+message);
  45. }
  46. }
  47.  
  48. int TradesCount(int type) //returns # of open trades for order type, current symbol and magic number
  49. {
  50. int result = 0;
  51. int total = OrdersTotal();
  52. for(int i = 0; i < total; i++)
  53. {
  54. if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
  55. if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
  56. result++;
  57. }
  58. return(result);
  59. }
  60.  
  61. int myOrderSend(int type, double price, double volume, string ordername) //send order, return ticket ("price" is irrelevant for market orders)
  62. {
  63. if(!IsTradeAllowed()) return(-1);
  64. int ticket = -1;
  65. int retries = 0;
  66. int err;
  67. int long_trades = TradesCount(OP_BUY);
  68. int short_trades = TradesCount(OP_SELL);
  69. int long_pending = TradesCount(OP_BUYLIMIT) + TradesCount(OP_BUYSTOP);
  70. int short_pending = TradesCount(OP_SELLLIMIT) + TradesCount(OP_SELLSTOP);
  71. string ordername_ = ordername;
  72. if(ordername != "")
  73. ordername_ = "("+ordername+")";
  74. //test Hedging
  75. if(!Hedging && ((type % 2 == 0 && short_trades + short_pending > 0) || (type % 2 == 1 && long_trades + long_pending > 0)))
  76. {
  77. myAlert("print", "Order"+ordername_+" not sent, hedging not allowed");
  78. return(-1);
  79. }
  80. //test maximum trades
  81. if((type % 2 == 0 && long_trades >= MaxLongTrades)
  82. || (type % 2 == 1 && short_trades >= MaxShortTrades)
  83. || (long_trades + short_trades >= MaxOpenTrades)
  84. || (type > 1 && long_pending + short_pending >= MaxPendingOrders))
  85. {
  86. myAlert("print", "Order"+ordername_+" not sent, maximum reached");
  87. return(-1);
  88. }
  89. //prepare to send order
  90. while(IsTradeContextBusy()) Sleep(100);
  91. RefreshRates();
  92. if(type == OP_BUY)
  93. price = Ask;
  94. else if(type == OP_SELL)
  95. price = Bid;
  96. else if(price < 0) //invalid price for pending order
  97. {
  98. myAlert("order", "Order"+ordername_+" not sent, invalid price for pending order");
  99. return(-1);
  100. }
  101. int clr = (type % 2 == 1) ? clrRed : clrBlue;
  102. while(ticket < 0 && retries < OrderRetry+1)
  103. {
  104. ticket = OrderSend(Symbol(), type, NormalizeDouble(volume, LotDigits), NormalizeDouble(price, Digits()), MaxSlippage, 0, 0, ordername, MagicNumber, 0, clr);
  105. if(ticket < 0)
  106. {
  107. err = GetLastError();
  108. myAlert("print", "OrderSend"+ordername_+" error #"+err+" "+ErrorDescription(err));
  109. Sleep(OrderWait*1000);
  110. }
  111. retries++;
  112. }
  113. if(ticket < 0)
  114. {
  115. myAlert("error", "OrderSend"+ordername_+" failed "+(OrderRetry+1)+" times; error #"+err+" "+ErrorDescription(err));
  116. return(-1);
  117. }
  118. string typestr[6] = {"Buy", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop"};
  119. myAlert("order", "Order sent"+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
  120. return(ticket);
  121. }
  122.  
  123. int myOrderModify(int ticket, double SL, double TP) //modify SL and TP (absolute price), zero targets do not modify
  124. {
  125. if(!IsTradeAllowed()) return(-1);
  126. bool success = false;
  127. int retries = 0;
  128. int err;
  129. SL = NormalizeDouble(SL, Digits());
  130. TP = NormalizeDouble(TP, Digits());
  131. if(SL < 0) SL = 0;
  132. if(TP < 0) TP = 0;
  133. //prepare to select order
  134. while(IsTradeContextBusy()) Sleep(100);
  135. if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
  136. {
  137. err = GetLastError();
  138. myAlert("error", "OrderSelect failed; error #"+err+" "+ErrorDescription(err));
  139. return(-1);
  140. }
  141. //prepare to modify order
  142. while(IsTradeContextBusy()) Sleep(100);
  143. RefreshRates();
  144. if(CompareDoubles(SL, 0)) SL = OrderStopLoss(); //not to modify
  145. if(CompareDoubles(TP, 0)) TP = OrderTakeProfit(); //not to modify
  146. if(CompareDoubles(SL, OrderStopLoss()) && CompareDoubles(TP, OrderTakeProfit())) return(0); //nothing to do
  147. while(!success && retries < OrderRetry+1)
  148. {
  149. success = OrderModify(ticket, NormalizeDouble(OrderOpenPrice(), Digits()), NormalizeDouble(SL, Digits()), NormalizeDouble(TP, Digits()), OrderExpiration(), CLR_NONE);
  150. if(!success)
  151. {
  152. err = GetLastError();
  153. myAlert("print", "OrderModify error #"+err+" "+ErrorDescription(err));
  154. Sleep(OrderWait*1000);
  155. }
  156. retries++;
  157. }
  158. if(!success)
  159. {
  160. myAlert("error", "OrderModify failed "+(OrderRetry+1)+" times; error #"+err+" "+ErrorDescription(err));
  161. return(-1);
  162. }
  163. string alertstr = "Order modified: ticket="+ticket;
  164. if(!CompareDoubles(SL, 0)) alertstr = alertstr+" SL="+SL;
  165. if(!CompareDoubles(TP, 0)) alertstr = alertstr+" TP="+TP;
  166. myAlert("modify", alertstr);
  167. return(0);
  168. }
  169.  
  170. void myOrderClose(int type, int volumepercent, string ordername) //close open orders for current symbol, magic number and "type" (OP_BUY or OP_SELL)
  171. {
  172. if(!IsTradeAllowed()) return;
  173. if (type > 1)
  174. {
  175. myAlert("error", "Invalid type in myOrderClose");
  176. return;
  177. }
  178. bool success = false;
  179. int err;
  180. string ordername_ = ordername;
  181. if(ordername != "")
  182. ordername_ = "("+ordername+")";
  183. int total = OrdersTotal();
  184. for(int i = total-1; i >= 0; i--)
  185. {
  186. while(IsTradeContextBusy()) Sleep(100);
  187. if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  188. if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
  189. while(IsTradeContextBusy()) Sleep(100);
  190. RefreshRates();
  191. double price = (type == OP_SELL) ? Ask : Bid;
  192. double volume = NormalizeDouble(OrderLots()*volumepercent * 1.0 / 100, LotDigits);
  193. if (NormalizeDouble(volume, LotDigits) == 0) continue;
  194. success = OrderClose(OrderTicket(), volume, NormalizeDouble(price, Digits()), MaxSlippage, clrWhite);
  195. if(!success)
  196. {
  197. err = GetLastError();
  198. myAlert("error", "OrderClose"+ordername_+" failed; error #"+err+" "+ErrorDescription(err));
  199. }
  200. }
  201. string typestr[6] = {"Buy", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop"};
  202. if(success) myAlert("order", "Orders closed"+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
  203. }
  204.  
  205. void TrailingStopBE(int type, double profit) //set Stop Loss to open price if in profit
  206. {
  207. int total = OrdersTotal();
  208. profit = NormalizeDouble(profit, Digits());
  209. for(int i = total-1; i >= 0; i--)
  210. {
  211. while(IsTradeContextBusy()) Sleep(100);
  212. if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  213. if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
  214. RefreshRates();
  215. if((type == OP_BUY && Ask > OrderOpenPrice() + profit)
  216. || (type == OP_SELL && Bid < OrderOpenPrice() - profit))
  217. myOrderModify(OrderTicket(), OrderOpenPrice(), 0);
  218. }
  219. }
  220.  
  221. //+------------------------------------------------------------------+
  222. //| Expert initialization function |
  223. //+------------------------------------------------------------------+
  224. int OnInit()
  225. {
  226. //initialize myPoint
  227. myPoint = Point();
  228. if(Digits() == 5 || Digits() == 3)
  229. {
  230. myPoint *= 10;
  231. MaxSlippage *= 10;
  232. }
  233. //initialize LotDigits
  234. double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
  235. if(LotStep >= 1) LotDigits = 0;
  236. else if(LotStep >= 0.1) LotDigits = 1;
  237. else if(LotStep >= 0.01) LotDigits = 2;
  238. else LotDigits = 3;
  239. LastTradeTime = 0;
  240. return(INIT_SUCCEEDED);
  241. }
  242.  
  243. //+------------------------------------------------------------------+
  244. //| Expert deinitialization function |
  245. //+------------------------------------------------------------------+
  246. void OnDeinit(const int reason)
  247. {
  248. }
  249.  
  250. //+------------------------------------------------------------------+
  251. //| Expert tick function |
  252. //+------------------------------------------------------------------+
  253. void OnTick()
  254. {
  255. int ticket = -1;
  256. double price;
  257. double SL;
  258.  
  259. TrailingStopBE(OP_BUY, BreakEven_Points * myPoint); //Trailing Stop = go break even
  260. TrailingStopBE(OP_SELL, BreakEven_Points * myPoint); //Trailing Stop = go break even
  261.  
  262. //Close Long Positions (Close_Buy_1st_Candle_a_revers)
  263. RefreshRates();
  264. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  265. && Ask < Open[1] //Price < Candlestick Open
  266. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  267. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  268. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  269. )
  270. {
  271. if(IsTradeAllowed())
  272. myOrderClose(OP_BUY, 100, "Close_Buy_1st_Candle_a_revers");
  273. else //not autotrading => only send alert
  274. myAlert("order", "Close_Buy_1st_Candle_a_revers");
  275. }
  276.  
  277. //Close Long Positions (Close_Buy_2nd_Candle_a_revers)
  278. RefreshRates();
  279. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  280. && Ask < Open[1] //Price < Candlestick Open
  281. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  282. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  283. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  284. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  285. )
  286. {
  287. if(IsTradeAllowed())
  288. myOrderClose(OP_BUY, 100, "Close_Buy_2nd_Candle_a_revers");
  289. else //not autotrading => only send alert
  290. myAlert("order", "Close_Buy_2nd_Candle_a_revers");
  291. }
  292.  
  293. //Close Long Positions (Close_Buy_3rd_Candle_a_revers)
  294. RefreshRates();
  295. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  296. && Ask < Open[1] //Price < Candlestick Open
  297. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  298. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  299. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  300. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  301. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
  302. )
  303. {
  304. if(IsTradeAllowed())
  305. myOrderClose(OP_BUY, 100, "Close_Buy_3rd_Candle_a_revers");
  306. else //not autotrading => only send alert
  307. myAlert("order", "Close_Buy_3rd_Candle_a_revers");
  308. }
  309.  
  310. //Close Long Positions (Close_Buy_4rd_Candle_a_revers)
  311. RefreshRates();
  312. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  313. && Ask < Open[1] //Price < Candlestick Open
  314. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  315. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  316. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  317. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  318. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
  319. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) > 0 //nonlagdot > fixed value
  320. )
  321. {
  322. if(IsTradeAllowed())
  323. myOrderClose(OP_BUY, 100, "Close_Buy_4rd_Candle_a_revers");
  324. else //not autotrading => only send alert
  325. myAlert("order", "Close_Buy_4rd_Candle_a_revers");
  326. }
  327.  
  328. //Close Short Positions (Close_Shrt_1st_Candle_a_revers)
  329. RefreshRates();
  330. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  331. && Ask > Open[1] //Price > Candlestick Open
  332. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  333. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  334. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  335. )
  336. {
  337. if(IsTradeAllowed())
  338. myOrderClose(OP_SELL, 100, "Close_Shrt_1st_Candle_a_revers");
  339. else //not autotrading => only send alert
  340. myAlert("order", "Close_Shrt_1st_Candle_a_revers");
  341. }
  342.  
  343. //Close Short Positions (Close_Shrt_2nd_Candle_a_revers)
  344. RefreshRates();
  345. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  346. && Ask > Open[1] //Price > Candlestick Open
  347. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  348. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  349. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  350. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  351. )
  352. {
  353. if(IsTradeAllowed())
  354. myOrderClose(OP_SELL, 100, "Close_Shrt_2nd_Candle_a_revers");
  355. else //not autotrading => only send alert
  356. myAlert("order", "Close_Shrt_2nd_Candle_a_revers");
  357. }
  358.  
  359. //Close Short Positions (Close_Shrt_3rd_Candle_a_revers)
  360. RefreshRates();
  361. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  362. && Ask > Open[1] //Price > Candlestick Open
  363. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  364. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  365. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  366. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  367. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
  368. )
  369. {
  370. if(IsTradeAllowed())
  371. myOrderClose(OP_SELL, 100, "Close_Shrt_3rd_Candle_a_revers");
  372. else //not autotrading => only send alert
  373. myAlert("order", "Close_Shrt_3rd_Candle_a_revers");
  374. }
  375.  
  376. //Close Short Positions (Close_Shrt_4rd_Candle_a_revers)
  377. RefreshRates();
  378. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  379. && Ask > Open[1] //Price > Candlestick Open
  380. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  381. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  382. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  383. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  384. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
  385. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) < 0 //nonlagdot < fixed value
  386. )
  387. {
  388. if(IsTradeAllowed())
  389. myOrderClose(OP_SELL, 100, "Close_Shrt_4rd_Candle_a_revers");
  390. else //not autotrading => only send alert
  391. myAlert("order", "Close_Shrt_4rd_Candle_a_revers");
  392. }
  393.  
  394. //Open Buy Order (BUY_1st_after_Trendreverse)
  395. RefreshRates();
  396. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  397. && Ask > Open[1] //Price > Candlestick Open
  398. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  399. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  400. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  401. )
  402. {
  403. RefreshRates();
  404. price = Ask;
  405. SL = Low[1]; //Stop Loss = Candlestick Low
  406. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  407. if(IsTradeAllowed())
  408. {
  409. ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_1st_after_Trendreverse");
  410. if(ticket <= 0) return;
  411. }
  412. else //not autotrading => only send alert
  413. myAlert("order", "BUY_1st_after_Trendreverse");
  414. LastTradeTime = TimeCurrent();
  415. myOrderModify(ticket, SL, 0);
  416. }
  417.  
  418. //Open Buy Order (BUY_2nd_after_Trendreverse)
  419. RefreshRates();
  420. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  421. && Ask > Open[1] //Price > Candlestick Open
  422. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  423. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  424. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  425. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  426. )
  427. {
  428. RefreshRates();
  429. price = Ask;
  430. SL = Low[2]; //Stop Loss = Candlestick Low
  431. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  432. if(IsTradeAllowed())
  433. {
  434. ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_2nd_after_Trendreverse");
  435. if(ticket <= 0) return;
  436. }
  437. else //not autotrading => only send alert
  438. myAlert("order", "BUY_2nd_after_Trendreverse");
  439. LastTradeTime = TimeCurrent();
  440. myOrderModify(ticket, SL, 0);
  441. }
  442.  
  443. //Open Buy Order (BUY_3rd_after_Trendreverse)
  444. RefreshRates();
  445. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  446. && Ask > Open[1] //Price > Candlestick Open
  447. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  448. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  449. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  450. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  451. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
  452. )
  453. {
  454. RefreshRates();
  455. price = Ask;
  456. SL = Low[3]; //Stop Loss = Candlestick Low
  457. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  458. if(IsTradeAllowed())
  459. {
  460. ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_3rd_after_Trendreverse");
  461. if(ticket <= 0) return;
  462. }
  463. else //not autotrading => only send alert
  464. myAlert("order", "BUY_3rd_after_Trendreverse");
  465. LastTradeTime = TimeCurrent();
  466. myOrderModify(ticket, SL, 0);
  467. }
  468.  
  469. //Open Buy Order (BUY_4rd_after_Trendreverse)
  470. RefreshRates();
  471. if(Open[1] > Close[1] //Candlestick Open > Candlestick Close
  472. && Ask > Open[1] //Price > Candlestick Open
  473. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) > 0 //nonlagdot > fixed value
  474. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) > 0 //nonlagdot > fixed value
  475. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  476. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  477. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
  478. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) < 0 //nonlagdot < fixed value
  479. )
  480. {
  481. RefreshRates();
  482. price = Ask;
  483. SL = Low[4]; //Stop Loss = Candlestick Low
  484. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  485. if(IsTradeAllowed())
  486. {
  487. ticket = myOrderSend(OP_BUY, price, TradeSize, "BUY_4rd_after_Trendreverse");
  488. if(ticket <= 0) return;
  489. }
  490. else //not autotrading => only send alert
  491. myAlert("order", "BUY_4rd_after_Trendreverse");
  492. LastTradeTime = TimeCurrent();
  493. myOrderModify(ticket, SL, 0);
  494. }
  495.  
  496. //Open Sell Order (SELL_1st_after_Trendreverse)
  497. RefreshRates();
  498. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  499. && Ask < Open[1] //Price < Candlestick Open
  500. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  501. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  502. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) > 0 //nonlagdot > fixed value
  503. )
  504. {
  505. RefreshRates();
  506. price = Bid;
  507. SL = High[1]; //Stop Loss = Candlestick High
  508. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  509. if(IsTradeAllowed())
  510. {
  511. ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_1st_after_Trendreverse");
  512. if(ticket <= 0) return;
  513. }
  514. else //not autotrading => only send alert
  515. myAlert("order", "SELL_1st_after_Trendreverse");
  516. LastTradeTime = TimeCurrent();
  517. myOrderModify(ticket, SL, 0);
  518. }
  519.  
  520. //Open Sell Order (SELL_2nd_after_Trendreverse)
  521. RefreshRates();
  522. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  523. && Ask < Open[1] //Price < Candlestick Open
  524. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  525. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  526. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  527. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) > 0 //nonlagdot > fixed value
  528. )
  529. {
  530. RefreshRates();
  531. price = Bid;
  532. SL = High[2]; //Stop Loss = Candlestick High
  533. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  534. if(IsTradeAllowed())
  535. {
  536. ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_2nd_after_Trendreverse");
  537. if(ticket <= 0) return;
  538. }
  539. else //not autotrading => only send alert
  540. myAlert("order", "SELL_2nd_after_Trendreverse");
  541. LastTradeTime = TimeCurrent();
  542. myOrderModify(ticket, SL, 0);
  543. }
  544.  
  545. //Open Sell Order (SELL_3rd_after_Trendreverse)
  546. RefreshRates();
  547. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  548. && Ask < Open[1] //Price < Candlestick Open
  549. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  550. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  551. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  552. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  553. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) > 0 //nonlagdot > fixed value
  554. )
  555. {
  556. RefreshRates();
  557. price = Bid;
  558. SL = High[3]; //Stop Loss = Candlestick High
  559. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  560. if(IsTradeAllowed())
  561. {
  562. ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_3rd_after_Trendreverse");
  563. if(ticket <= 0) return;
  564. }
  565. else //not autotrading => only send alert
  566. myAlert("order", "SELL_3rd_after_Trendreverse");
  567. LastTradeTime = TimeCurrent();
  568. myOrderModify(ticket, SL, 0);
  569. }
  570.  
  571. //Open Sell Order (SELL_4rd_after_Trendreverse)
  572. RefreshRates();
  573. if(Open[1] < Close[1] //Candlestick Open < Candlestick Close
  574. && Ask < Open[1] //Price < Candlestick Open
  575. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 0) < 0 //nonlagdot < fixed value
  576. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 1) < 0 //nonlagdot < fixed value
  577. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 2) < 0 //nonlagdot < fixed value
  578. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 3) < 0 //nonlagdot < fixed value
  579. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 4) < 0 //nonlagdot < fixed value
  580. && iCustom(NULL, PERIOD_CURRENT, "nonlagdot", 0, 20, 0, 0, 1, 0, 0, 4, 5) > 0 //nonlagdot > fixed value
  581. )
  582. {
  583. RefreshRates();
  584. price = Bid;
  585. SL = High[4]; //Stop Loss = Candlestick High
  586. if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterBars * PeriodSeconds()) return; //next open trade after time
  587. if(IsTradeAllowed())
  588. {
  589. ticket = myOrderSend(OP_SELL, price, TradeSize, "SELL_4rd_after_Trendreverse");
  590. if(ticket <= 0) return;
  591. }
  592. else //not autotrading => only send alert
  593. myAlert("order", "SELL_4rd_after_Trendreverse");
  594. LastTradeTime = TimeCurrent();
  595. myOrderModify(ticket, SL, 0);
  596. }
  597. }
  598. //+------------------------------------------------------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement