Нет описания

BOS_CHOCH.mq5 60KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767
  1. //+------------------------------------------------------------------+
  2. //| MK_BOS_CHOCH.mq5 |
  3. //| Copyright 2023, MetaQuotes Ltd. |
  4. //| https://www.mql5.com |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Copyright 2023, MetaQuotes Ltd."
  7. #property link "https://www.mql5.com"
  8. #property version "1.00"
  9. #include <Trade\Trade.mqh>
  10. CTrade trade;
  11. #define orderNum 200
  12. struct tradeOrder
  13. {
  14. datetime choch_index_date_time;
  15. datetime reversal_index_date_time;
  16. string Signal;
  17. datetime Time_OF_Candle;
  18. datetime Time_of_candle_For_trade;
  19. tradeOrder()
  20. {
  21. choch_index_date_time = 0;
  22. Signal = "";
  23. reversal_index_date_time = 0;
  24. Time_OF_Candle = 0.0;
  25. Time_of_candle_For_trade = 0.0;
  26. }
  27. };
  28. tradeOrder od_1[orderNum];
  29. input string Entry_condition_1 = "1"; // from here to start -------------------------------------------------------------
  30. sinput string str = "<><><><><><> Set Object Name <><><><><><>";
  31. input string object_name = "line";
  32. sinput string str1 = "<><><><><><> Set time of vertical line <><><><><><>";
  33. input datetime inpTime = 0;//First Line Draw time
  34. sinput string str2 = "<><><><><><> Default Settings <><><><><><>";
  35. input double lot_size = 0.1;
  36. input double stoploss = 20;
  37. input double takeProfit = 20;
  38. input int magic_no = 123;
  39. string trend = " ";
  40. string signal = "";
  41. datetime reversal_bar_time = 0;
  42. datetime choch_index_time ;
  43. datetime index_of_low_time;
  44. datetime index_of_high_time;
  45. datetime store_last_bos_index_time;
  46. datetime time_of_candle = 0.0;
  47. datetime time_to_place_trade = 0.0;
  48. datetime high_index_time;
  49. datetime low_index_time;
  50. double hi;
  51. double lo;
  52. double high,low,low1,high1,low2,high2;
  53. bool bearish_found = false;
  54. bool bullish_found = false;
  55. bool choch_at_index = false;
  56. int choch_index = 0;
  57. int reversal_candle_index = 0;
  58. int ind = 0;
  59. int index_of_last_high = 0;
  60. int index_of_last_low = 0;
  61. int index_of_low = 0;
  62. int index_of_high = 0;
  63. int high_index=0;
  64. int low_index =0;
  65. int Store_bos_last_index = 0;
  66. int index = 0;
  67. //+------------------------------------------------------------------+
  68. //| Expert initialization function |
  69. //+------------------------------------------------------------------+
  70. void Bos(int i)
  71. {
  72. int save_bullish_index = 0;
  73. int save_bearish_index = 0;
  74. if(trend == "uptrend")
  75. {
  76. high1 = iHigh(Symbol(),PERIOD_CURRENT,i);
  77. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  78. if(close > high)
  79. {
  80. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  81. for(int j=high_index-1; j > i; j--)
  82. {
  83. if(checkCandle(j) == "Bearish")
  84. {
  85. save_bullish_index = j;
  86. if(object_find("high") > 0)
  87. {
  88. ObjectDelete(0,"high");
  89. }
  90. high = high1;
  91. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  92. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  93. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  94. ObjectCreate(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point());
  95. ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  96. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  97. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  98. low = iLow(Symbol(),PERIOD_CURRENT,j);
  99. bearish_found = true;
  100. index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,j);
  101. break;
  102. }
  103. }
  104. if(bearish_found == true)
  105. {
  106. for(int k=save_bullish_index; k > i ; k--)
  107. {
  108. low1 = iLow(Symbol(),PERIOD_CURRENT,k);
  109. if(low1 < low)
  110. {
  111. low = low1;
  112. index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,k);
  113. bearish_found = false;
  114. }
  115. }
  116. if(object_find("low") > 0)
  117. {
  118. if(ObjectDelete(0,"low"))
  119. {
  120. //Print("object deleted :");
  121. }
  122. }
  123. index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, index_of_low_time, false);
  124. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  125. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  126. ObjectSetInteger(0,"low",OBJPROP_RAY_LEFT,false);
  127. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  128. }
  129. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  130. }
  131. }
  132. if(trend == "downtrend")
  133. {
  134. low1 = iLow(Symbol(),PERIOD_CURRENT,i);
  135. double close1 = iClose(Symbol(),PERIOD_CURRENT,i);
  136. if(close1 < low)
  137. {
  138. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  139. for(int j=low_index - 1; j > i; j--)
  140. {
  141. if(checkCandle(j) == "Bullish")
  142. {
  143. save_bullish_index = j;
  144. if(object_find("low") > 0)
  145. {
  146. ObjectDelete(0,"low");
  147. }
  148. low = low1;
  149. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  150. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  151. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  152. ObjectCreate(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low);
  153. ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  154. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  155. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  156. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  157. high = iHigh(Symbol(),PERIOD_CURRENT,j);
  158. bullish_found = true;
  159. index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,j);
  160. break;
  161. }
  162. }
  163. if(bullish_found == true)
  164. {
  165. for(int k=save_bullish_index; k > i ; k--)
  166. {
  167. high1 = iHigh(Symbol(),PERIOD_CURRENT,k);
  168. if(high1 > high)
  169. {
  170. high = high1;
  171. index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,k);
  172. bullish_found = false;
  173. }
  174. }
  175. if(object_find("high") > 0)
  176. {
  177. ObjectDelete(0,"high");
  178. }
  179. index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, index_of_high_time, false);
  180. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  181. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  182. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  183. bullish_found = false;
  184. }
  185. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  186. }
  187. }
  188. }
  189. //+------------------------------------------------------------------+
  190. //| |
  191. //+------------------------------------------------------------------+
  192. void Entry_Action_1_down(int Store_bos_last_index, int i,int diff)
  193. {
  194. for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
  195. {
  196. diff++;
  197. if(checkCandle(j) == "Bullish")
  198. {
  199. //Print("bullish found at index ",j);
  200. ind = j; // reversal candle index
  201. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,j);
  202. bullish_found = true;
  203. break;
  204. }
  205. }
  206. Print("condition satisfied in downtrend buy trade : ",check_values_less_than_choch_high(diff,i));
  207. if(check_values_less_than_choch_high(diff,i) == true)
  208. {
  209. if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
  210. {
  211. signal = "buy";
  212. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  213. // Print("Place buy order -----------------------------------------------------------------------: ");
  214. }
  215. }
  216. //Print(diff);
  217. if(bullish_found == true)
  218. {
  219. ObjectCreate(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
  220. ObjectCreate(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
  221. ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  222. ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  223. ObjectCreate(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
  224. ObjectCreate(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
  225. ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  226. ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  227. diff = 0;
  228. bullish_found = false;
  229. }
  230. }
  231. //+------------------------------------------------------------------+
  232. //| |
  233. //+------------------------------------------------------------------+
  234. void Entry_Action_2_down(int Store_bos_last_index, int i,int diff)
  235. {
  236. ind = Store_bos_last_index +1; // reversal candle index
  237. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  238. Print("condition satisfied in downtrend buy trade : ",check_values_less_than_choch_high1(ind,i));
  239. if(check_values_less_than_choch_high(ind,i) == true)
  240. {
  241. if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
  242. {
  243. signal = "buy";
  244. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  245. // Print("Place buy order -----------------------------------------------------------------------: ");
  246. }
  247. }
  248. ObjectCreate(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
  249. ObjectCreate(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
  250. ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  251. ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  252. ObjectCreate(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
  253. ObjectCreate(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
  254. ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  255. ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  256. diff = 0;
  257. }
  258. //+------------------------------------------------------------------+
  259. //| |
  260. //+------------------------------------------------------------------+
  261. void Entry_Action_1_up(int Store_bos_last_index, int i,int diff)
  262. {
  263. for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
  264. {
  265. diff++;
  266. if(checkCandle(j) == "Bearish")
  267. {
  268. ind = j; // reversal candle index
  269. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,j);
  270. bearish_found = true;
  271. break;
  272. }
  273. }
  274. Print("condition satisfied in uptrend sell trade : ",check_values_less_than_choch_low(diff,i));
  275. if(check_values_less_than_choch_low(diff,i) == true)
  276. {
  277. if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
  278. {
  279. signal = "sell";
  280. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  281. // Print("Place sell order -----------------------------------------------------------------------: ");
  282. }
  283. }
  284. if(bearish_found == true)
  285. {
  286. ObjectCreate(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
  287. ObjectCreate(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
  288. ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  289. ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  290. ObjectCreate(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
  291. ObjectCreate(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
  292. ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  293. ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  294. bearish_found = false;
  295. }
  296. }
  297. //+------------------------------------------------------------------+
  298. //| |
  299. //+------------------------------------------------------------------+
  300. void Entry_Action_2_up(int Store_bos_last_index, int i,int diff)
  301. {
  302. ind = Store_bos_last_index +1; // reversal candle index
  303. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  304. Print("condition satisfied in uptrend sell trade : ",check_values_less_than_choch_low(ind,i));
  305. if(check_values_less_than_choch_low1(ind,i) == true)
  306. {
  307. if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
  308. {
  309. signal = "sell";
  310. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  311. // Print("Place sell order -----------------------------------------------------------------------: ");
  312. }
  313. }
  314. ObjectCreate(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iHigh(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,ind));
  315. ObjectCreate(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iLow(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,ind));
  316. ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  317. ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  318. ObjectCreate(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iClose(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iClose(Symbol(),PERIOD_CURRENT,ind));
  319. ObjectCreate(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,ind),iOpen(Symbol(),PERIOD_CURRENT,ind),iTime(Symbol(),PERIOD_CURRENT,i),iOpen(Symbol(),PERIOD_CURRENT,ind));
  320. ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  321. ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  322. }
  323. //+------------------------------------------------------------------+
  324. //| |
  325. //+------------------------------------------------------------------+
  326. bool check_values_less_than_choch_high(int diff,int i) // downtrend
  327. {
  328. bool found = false;
  329. int value = (diff + i) - 1;
  330. for(int k=value; k>i; k--)
  331. {
  332. //Print("high values ",iHigh(Symbol(),PERIOD_CURRENT,k));
  333. //Print("close values ",iClose(Symbol(),PERIOD_CURRENT,i));
  334. if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
  335. {
  336. found = true;
  337. }
  338. }
  339. if(found == true)
  340. {
  341. return false;
  342. }
  343. return true;
  344. }
  345. //+------------------------------------------------------------------+
  346. //| |
  347. //+------------------------------------------------------------------+
  348. bool check_values_less_than_choch_high1(int ind,int i) // downtrend
  349. {
  350. for(int k=ind; k>i; k--)
  351. {
  352. if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
  353. {
  354. return false;
  355. }
  356. }
  357. return true;
  358. }
  359. //+------------------------------------------------------------------+
  360. //| |
  361. //+------------------------------------------------------------------+
  362. bool check_values_less_than_choch_low(int diff,int i) // uptrend
  363. {
  364. bool found = false;
  365. int value = (diff + i) - 1; // from which it start to check value is less in index
  366. //Print("value to be start is ",value);
  367. for(int k=value; k>i; k--)
  368. {
  369. if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
  370. {
  371. found = true;
  372. }
  373. }
  374. if(found == true)
  375. {
  376. return false;
  377. }
  378. return true;
  379. }
  380. //+------------------------------------------------------------------+
  381. //| |
  382. //+------------------------------------------------------------------+
  383. bool check_values_less_than_choch_low1(int ind,int i) // uptrend
  384. {
  385. for(int k=ind; k>i; k--)
  386. {
  387. if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
  388. {
  389. return false;
  390. }
  391. }
  392. return true;
  393. }
  394. //+------------------------------------------------------------------+
  395. //| |
  396. //+------------------------------------------------------------------+
  397. void choch(int i)
  398. {
  399. if(trend == "uptrend")
  400. {
  401. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  402. if(close < low)
  403. {
  404. remove_value_from_structure();
  405. choch_at_index = true;
  406. ObjectCreate(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  407. ObjectSetString(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  408. ObjectCreate(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_DOWN,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+100*Point());
  409. ObjectSetInteger(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrRed);
  410. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  411. int diff1 = Store_bos_last_index - (i);
  412. // Entry_Action_1_up(Store_bos_last_index,i,diff1);
  413. Entry_Action_2_up(Store_bos_last_index,i,diff1);
  414. low = iLow(Symbol(),PERIOD_CURRENT,i);
  415. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  416. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  417. low_index = i;
  418. if(object_find("low") > 0)
  419. {
  420. ObjectDelete(0,"low");
  421. }
  422. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  423. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  424. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  425. trend = "downtrend";
  426. choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  427. int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  428. chock_index++;
  429. iHigh(Symbol(),PERIOD_CURRENT,chock_index);
  430. iLow(Symbol(),PERIOD_CURRENT,chock_index);
  431. if(object_find("target line") > 0)
  432. {
  433. ObjectDelete(0,"target line");
  434. }
  435. ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index));
  436. ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
  437. ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
  438. if(object_find("target line1") > 0)
  439. {
  440. ObjectDelete(0,"target line1");
  441. }
  442. ObjectCreate(0,"target line1",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iLow(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iLow(Symbol(),PERIOD_CURRENT,chock_index));
  443. ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true);
  444. ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen);
  445. if(signal == "sell")
  446. {
  447. MqlDateTime edate;
  448. time_to_place_trade = 0.0;
  449. int current_time_frame = Period();
  450. string current_time_frame_string;
  451. switch(current_time_frame)
  452. {
  453. case PERIOD_M1:
  454. current_time_frame_string = "1 minute";
  455. if(TimeToStruct(time_of_candle,edate))
  456. {
  457. edate.hour = 0;
  458. edate.min = edate.min + 2;
  459. edate.sec = 0;
  460. }
  461. break;
  462. case PERIOD_M5:
  463. current_time_frame_string = "5 minutes";
  464. if(TimeToStruct(time_of_candle,edate))
  465. {
  466. edate.hour = 0;
  467. edate.min = edate.min + 10;
  468. edate.sec = 0;
  469. }
  470. break;
  471. case PERIOD_M15:
  472. current_time_frame_string = "15 minutes";
  473. if(TimeToStruct(time_of_candle,edate))
  474. {
  475. edate.hour = 0;
  476. edate.min = edate.min + 30;
  477. edate.sec = 0;
  478. }
  479. break;
  480. case PERIOD_M30:
  481. current_time_frame_string = "30 minutes";
  482. if(TimeToStruct(time_of_candle,edate))
  483. {
  484. edate.hour = 0;
  485. edate.min = edate.min + 60;
  486. edate.sec = 0;
  487. }
  488. break;
  489. case PERIOD_H1:
  490. current_time_frame_string = "1 hour";
  491. if(TimeToStruct(time_of_candle,edate))
  492. {
  493. edate.hour = edate.hour + 1;
  494. edate.min = 0;
  495. edate.sec = 0;
  496. }
  497. time_to_place_trade = StructToTime(edate);
  498. Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0));
  499. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade);
  500. //Print("choch_index_time ",choch_index_time);
  501. //Print("reversal_bar_time ",reversal_bar_time);
  502. //Print("time_of_candle",time_of_candle);
  503. //Print("time_to_place_trade",time_to_place_trade);
  504. //Print("signal is ",signal);
  505. break;
  506. default:
  507. current_time_frame_string = "unknown";
  508. break;
  509. }
  510. //signal = "";
  511. }
  512. signal = "";
  513. }
  514. }
  515. if(trend == "downtrend")
  516. {
  517. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  518. if(close > high)
  519. {
  520. remove_value_from_structure();
  521. choch_at_index = true;
  522. ObjectCreate(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+20*Point());
  523. ObjectSetString(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  524. ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point());
  525. ObjectSetInteger(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen);
  526. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  527. int diff = Store_bos_last_index - (i);
  528. //Entry_Action_1_down(Store_bos_last_index,i,diff);
  529. Entry_Action_2_down(Store_bos_last_index,i,diff);
  530. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  531. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  532. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  533. high_index = i;
  534. if(object_find("high") > 0)
  535. {
  536. ObjectDelete(0,"high");
  537. }
  538. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  539. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  540. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  541. trend = "uptrend";
  542. choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  543. int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  544. chock_index++;
  545. iHigh(Symbol(),PERIOD_CURRENT,chock_index);
  546. iLow(Symbol(),PERIOD_CURRENT,chock_index);
  547. if(object_find("target line") > 0)
  548. {
  549. ObjectDelete(0,"target line");
  550. }
  551. ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iHigh(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,chock_index));
  552. ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
  553. ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
  554. if(object_find("target line1") > 0)
  555. {
  556. ObjectDelete(0,"target line1");
  557. }
  558. ObjectCreate(0,"target line1",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,chock_index),iLow(Symbol(),PERIOD_CURRENT,chock_index),iTime(Symbol(),PERIOD_CURRENT,0),iLow(Symbol(),PERIOD_CURRENT,chock_index));
  559. ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true);
  560. ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen);
  561. if(signal == "buy")
  562. {
  563. MqlDateTime edate;
  564. time_to_place_trade = 0.0;
  565. int current_time_frame = Period();
  566. string current_time_frame_string;
  567. switch(current_time_frame)
  568. {
  569. case PERIOD_M1:
  570. current_time_frame_string = "1 minute";
  571. if(TimeToStruct(time_of_candle,edate))
  572. {
  573. edate.hour = 0;
  574. edate.min = edate.min + 2;
  575. edate.sec = 0;
  576. }
  577. break;
  578. case PERIOD_M5:
  579. current_time_frame_string = "5 minutes";
  580. if(TimeToStruct(time_of_candle,edate))
  581. {
  582. edate.hour = 0;
  583. edate.min = edate.min + 10;
  584. edate.sec = 0;
  585. }
  586. break;
  587. case PERIOD_M15:
  588. current_time_frame_string = "15 minutes";
  589. if(TimeToStruct(time_of_candle,edate))
  590. {
  591. edate.hour = 0;
  592. edate.min = edate.min + 30;
  593. edate.sec = 0;
  594. }
  595. break;
  596. case PERIOD_M30:
  597. current_time_frame_string = "30 minutes";
  598. if(TimeToStruct(time_of_candle,edate))
  599. {
  600. edate.hour = 0;
  601. edate.min = edate.min + 60;
  602. edate.sec = 0;
  603. }
  604. break;
  605. case PERIOD_H1:
  606. current_time_frame_string = "1 hour";
  607. if(TimeToStruct(time_of_candle,edate))
  608. {
  609. edate.hour = edate.hour + 1;
  610. edate.min = 0;
  611. edate.sec = 0;
  612. }
  613. time_to_place_trade = StructToTime(edate);
  614. Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0));
  615. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade);
  616. //Print("choch_index_time ",choch_index_time);
  617. //Print("reversal_bar_time ",reversal_bar_time);
  618. //Print("time_of_candle",time_of_candle);
  619. //Print("time_to_place_trade",time_to_place_trade);
  620. //Print("signal is ",signal);
  621. break;
  622. default:
  623. current_time_frame_string = "unknown";
  624. break;
  625. }
  626. }
  627. signal = "";
  628. }
  629. }
  630. }
  631. //+------------------------------------------------------------------+
  632. //| |
  633. //+------------------------------------------------------------------+
  634. void bos2(int i)
  635. {
  636. bool cnd;
  637. bool candle_bullish = false;
  638. bool candle_bearish = false;
  639. double find_high = 0.0;
  640. datetime find_high_time = 0.0;
  641. int save_bullish_index = 0;
  642. int save_bearish_index = 0;
  643. double find_low = 0.0;
  644. datetime find_low_time = 0.0;
  645. if(trend == "downtrend")
  646. {
  647. choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  648. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  649. if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index)
  650. {
  651. cnd = false;
  652. }
  653. else
  654. {
  655. cnd = true;
  656. }
  657. if(choch_index_time > store_last_bos_index_time)
  658. {
  659. for(int m=choch_index; m>i; m--)
  660. {
  661. if(checkCandle(m) == "Bullish")
  662. {
  663. save_bullish_index = m;
  664. candle_bullish = true;
  665. break;
  666. }
  667. }
  668. find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index);
  669. for(int m=save_bullish_index; m>i; m--)
  670. {
  671. double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m);
  672. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  673. if(find_high < find_high1)
  674. {
  675. find_high = find_high1;
  676. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  677. }
  678. }
  679. for(int j=choch_index; j>=i; j--)
  680. {
  681. if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i))
  682. {
  683. cnd = false;
  684. }
  685. }
  686. }
  687. if(choch_index_time < store_last_bos_index_time)
  688. {
  689. for(int m=Store_bos_last_index; m>i; m--)
  690. {
  691. if(checkCandle(m) == "Bullish")
  692. {
  693. save_bullish_index = m;
  694. candle_bullish = true;
  695. break;
  696. }
  697. }
  698. find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index);
  699. for(int m=save_bullish_index; m>i; m--)
  700. {
  701. double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m);
  702. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  703. if(find_high < find_high1)
  704. {
  705. find_high = find_high1;
  706. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  707. }
  708. }
  709. for(int j=Store_bos_last_index; j>=i; j--)
  710. {
  711. if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i))
  712. {
  713. cnd = false;
  714. }
  715. }
  716. }
  717. if(cnd == true && candle_bullish == true)
  718. {
  719. if(object_find("high") > 0)
  720. {
  721. ObjectDelete(0,"high");
  722. }
  723. high = find_high;
  724. index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, find_high_time, false);
  725. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  726. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  727. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  728. if(object_find("low") > 0)
  729. {
  730. ObjectDelete(0,"low");
  731. }
  732. low = iLow(Symbol(),PERIOD_CURRENT,i);
  733. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  734. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  735. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  736. ObjectCreate(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low);
  737. ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  738. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  739. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  740. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  741. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  742. cnd = false;
  743. candle_bullish = false;
  744. }
  745. }
  746. //-------
  747. if(trend == "uptrend")
  748. {
  749. choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  750. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  751. if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index)
  752. {
  753. cnd = false;
  754. }
  755. else
  756. {
  757. cnd = true;
  758. }
  759. if(choch_index_time < store_last_bos_index_time)
  760. {
  761. for(int m=Store_bos_last_index; m>i; m--)
  762. {
  763. if(checkCandle(m) == "Bearish")
  764. {
  765. candle_bearish = true;
  766. save_bearish_index = m;
  767. break;
  768. }
  769. }
  770. find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index);
  771. for(int m=save_bearish_index; m>i; m--)
  772. {
  773. double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m);
  774. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  775. if(find_low > find_low1)
  776. {
  777. find_low = find_low1;
  778. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  779. }
  780. }
  781. for(int j=Store_bos_last_index; j>=i; j--)
  782. {
  783. if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i))
  784. {
  785. cnd = false;
  786. }
  787. }
  788. }
  789. if(choch_index_time > store_last_bos_index_time)
  790. {
  791. for(int m=choch_index; m>i; m--)
  792. {
  793. if(checkCandle(m) == "Bearish")
  794. {
  795. candle_bearish = true;
  796. save_bearish_index = m;
  797. break;
  798. }
  799. }
  800. find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index);
  801. for(int m=save_bearish_index; m>i; m--)
  802. {
  803. double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m);
  804. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  805. if(find_low > find_low1)
  806. {
  807. find_low = find_low1;
  808. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  809. }
  810. }
  811. for(int j=choch_index; j>=i; j--)
  812. {
  813. if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i))
  814. {
  815. cnd = false;
  816. }
  817. }
  818. }
  819. if(cnd == true && candle_bearish == true)
  820. {
  821. if(object_find("low") > 0)
  822. {
  823. ObjectDelete(0,"low");
  824. }
  825. low = find_low;
  826. index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, find_low_time, false);
  827. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  828. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  829. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  830. if(object_find("high") > 0)
  831. {
  832. ObjectDelete(0,"high");
  833. }
  834. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  835. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  836. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  837. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  838. ObjectCreate(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point());
  839. ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  840. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  841. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  842. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  843. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  844. cnd = false;
  845. candle_bearish = false;
  846. }
  847. }
  848. }
  849. //+------------------------------------------------------------------+
  850. //| |
  851. //+------------------------------------------------------------------+
  852. //+------------------------------------------------------------------+
  853. //| |
  854. //+------------------------------------------------------------------+
  855. void third_Condition(int i)
  856. {
  857. if(trend == "uptrend")
  858. {
  859. low2 = iLow(Symbol(),PERIOD_CURRENT,i);
  860. high2 = iHigh(Symbol(),PERIOD_CURRENT,i);
  861. if(low2 < low)
  862. {
  863. ObjectCreate(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  864. ObjectSetString(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  865. low = low2;
  866. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  867. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  868. low_index = i; // addtion to be minus
  869. if(object_find("low") > 0)
  870. {
  871. ObjectDelete(0,"low");
  872. }
  873. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  874. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  875. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  876. // Print("low update due to third condition",low," time of the candle is ",iTime(Symbol(),PERIOD_CURRENT,i));
  877. }
  878. if(high2 > high)
  879. {
  880. ObjectCreate(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  881. ObjectSetString(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  882. high = high2;
  883. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  884. high_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  885. high_index = i; // addtion to be minus
  886. if(object_find("high") > 0)
  887. {
  888. ObjectDelete(0,"high");
  889. }
  890. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  891. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  892. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  893. // Print("high update due to third condition",high," time of the candle is ",iTime(Symbol(),PERIOD_CURRENT,i));
  894. }
  895. }
  896. if(trend == "downtrend")
  897. {
  898. high2 = iHigh(Symbol(),PERIOD_CURRENT,i);
  899. low2 = iLow(Symbol(),PERIOD_CURRENT,i);
  900. if(high2 > high)
  901. {
  902. ObjectCreate(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  903. ObjectSetString(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  904. high = high2;
  905. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  906. high_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  907. high_index = i; // addtion to be minus
  908. if(object_find("high") > 0)
  909. {
  910. ObjectDelete(0,"high");
  911. }
  912. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  913. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  914. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  915. // Print("high update due to third condition",high);
  916. }
  917. if(low2 < low)
  918. {
  919. ObjectCreate(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  920. ObjectSetString(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  921. low = low2;
  922. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  923. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  924. low_index = i; // addtion to be minus
  925. if(object_find("low") > 0)
  926. {
  927. ObjectDelete(0,"low");
  928. }
  929. // Print("low value is ", low);
  930. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  931. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  932. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  933. // Print("low update due to third condition",low);
  934. }
  935. }
  936. }
  937. //+------------------------------------------------------------------+
  938. //| |
  939. //+------------------------------------------------------------------+
  940. void store_value_in_structure(datetime chock_time,datetime ind,string signal,datetime time_of_candle,datetime time_to_place_trade)
  941. {
  942. for(int l=0; l<200; l++)
  943. {
  944. if(od_1[l].choch_index_date_time == 0)
  945. {
  946. od_1[l].choch_index_date_time = chock_time;
  947. od_1[l].reversal_index_date_time = ind;
  948. od_1[l].Signal = signal;
  949. od_1[l].Time_OF_Candle = time_of_candle;
  950. // Print("saved time in the structure ",time_of_candle);
  951. od_1[l].Time_of_candle_For_trade = time_to_place_trade;
  952. // Print("saved time in the structure ",time_to_place_trade);
  953. break;
  954. }
  955. }
  956. }
  957. //+------------------------------------------------------------------+
  958. //| |
  959. //+------------------------------------------------------------------+
  960. void remove_value_from_structure()
  961. {
  962. for(int l=0; l<200; l++)
  963. {
  964. if(od_1[l].choch_index_date_time != 0)
  965. {
  966. // Print("value removed from structure ");
  967. od_1[l].choch_index_date_time = 0;
  968. od_1[l].reversal_index_date_time = 0;
  969. od_1[l].Signal = "";
  970. od_1[l].Time_OF_Candle = 0;
  971. od_1[l].Time_of_candle_For_trade = 0;
  972. }
  973. }
  974. }
  975. //+------------------------------------------------------------------+
  976. //| |
  977. //+------------------------------------------------------------------+
  978. void Entry_strategy(int value)
  979. {
  980. for(int i=value; i > 0; i--)
  981. {
  982. Bos(i);
  983. bos2(i);
  984. choch(i);
  985. third_Condition(i);
  986. }
  987. }
  988. //+------------------------------------------------------------------+
  989. //| |
  990. //+------------------------------------------------------------------+
  991. void placeBuyTrade()
  992. {
  993. double sell_SL = 0,sell_Tp = 0, openPrice = 0,buySL = 0, buyTp = 0;
  994. openPrice = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  995. double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  996. if(stoploss != 0)
  997. {
  998. buySL = Ask - (stoploss *10* Point());
  999. }
  1000. if(takeProfit != 0)
  1001. {
  1002. buyTp = Ask + (takeProfit *10* Point());
  1003. }
  1004. if(trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,lot_size,Ask,buySL,buyTp,"Buy Trade Placed"))
  1005. {
  1006. Print("Buy Trade Placed: ",trade.ResultOrder());
  1007. }
  1008. else
  1009. {
  1010. Print("Error in placing Buy: "+Symbol()+" ",GetLastError());
  1011. }
  1012. }
  1013. //+------------------------------------------------------------------+
  1014. //| |
  1015. //+------------------------------------------------------------------+
  1016. void placeSellTrade()
  1017. {
  1018. double sell_SL = 0,sell_Tp = 0, openPrice = 0, buySL = 0, buyTp = 0;
  1019. openPrice = SymbolInfoDouble(Symbol(),SYMBOL_BID);
  1020. double Bid = SymbolInfoDouble(Symbol(),SYMBOL_BID);
  1021. if(stoploss != 0)
  1022. {
  1023. sell_SL = Bid + (stoploss *10* Point());
  1024. }
  1025. if(takeProfit != 0)
  1026. {
  1027. sell_Tp = Bid - (takeProfit *10* Point());
  1028. }
  1029. if(trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,lot_size,Bid,sell_SL,sell_Tp,"Sell Trade Placed"))
  1030. {
  1031. Print("Sell Trade PLaced: ",trade.ResultOrder());
  1032. }
  1033. else
  1034. {
  1035. Print("Error in placing Sell: "+Symbol()+" ",GetLastError());
  1036. }
  1037. }
  1038. //+------------------------------------------------------------------+
  1039. //| |
  1040. //+------------------------------------------------------------------+
  1041. int OnInit()
  1042. {
  1043. trade.SetExpertMagicNumber(magic_no);
  1044. trade.SetDeviationInPoints(10);
  1045. trade.SetTypeFilling(ORDER_FILLING_IOC);
  1046. trade.LogLevel(LOG_LEVEL_ALL);
  1047. trade.SetAsyncMode(false);
  1048. int idx = 0;
  1049. int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT,inpTime, false);
  1050. if(ObjectCreate(0,"line",OBJ_VLINE,0,inpTime,iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
  1051. {
  1052. Print("vertical line created on chart : ");
  1053. }
  1054. else
  1055. {
  1056. Print("error in creating line : ");
  1057. }
  1058. //int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT, D'2022.09.01 15:30:27', false);
  1059. //if(ObjectCreate(0,"line",OBJ_VLINE,0,D'2022.09.01 15:30:27',iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
  1060. // {
  1061. // Print("object created on chart : ");
  1062. // }
  1063. //else
  1064. // {
  1065. // Print("object not created : ");
  1066. // }
  1067. object_find(object_name);
  1068. if(object_find(object_name) == true)
  1069. {
  1070. Print("object found");
  1071. if(checkCandle(user_input_index) == "Bullish")
  1072. {
  1073. trend = "uptrend";
  1074. high = iHigh(Symbol(),PERIOD_CURRENT,user_input_index);
  1075. high_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index); // ambiguity
  1076. high_index = user_input_index;
  1077. for(int j=user_input_index; j < 1000; j++)
  1078. {
  1079. if(checkCandle(j) == "Bearish")
  1080. {
  1081. low = iLow(Symbol(),PERIOD_CURRENT,j);
  1082. idx = j;
  1083. break;
  1084. }
  1085. }
  1086. idx = iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,idx,user_input_index+1);
  1087. low = iLow(Symbol(),PERIOD_CURRENT,idx);
  1088. low_index_time = iTime(Symbol(),PERIOD_CURRENT,idx);
  1089. low_index = idx;
  1090. }
  1091. if(checkCandle(user_input_index) == "Bearish")
  1092. {
  1093. trend = "downtrend";
  1094. low = iLow(Symbol(),PERIOD_CURRENT,user_input_index);
  1095. low_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index);
  1096. low_index = user_input_index;
  1097. for(int j=user_input_index; j < 1000; j++)
  1098. {
  1099. if(checkCandle(j) == "Bullish")
  1100. {
  1101. high = iHigh(Symbol(),PERIOD_CURRENT,j);
  1102. idx = j;
  1103. break;
  1104. }
  1105. }
  1106. for(int k=idx; k<user_input_index; k++)
  1107. {
  1108. double highh = iHigh(Symbol(),PERIOD_CURRENT,k);
  1109. if(highh > high)
  1110. {
  1111. high = highh;
  1112. high_index_time = iTime(Symbol(),PERIOD_CURRENT,k);
  1113. high_index = k;
  1114. }
  1115. }
  1116. }
  1117. Entry_strategy(user_input_index);
  1118. }
  1119. else
  1120. {
  1121. Print("Object Not Found");
  1122. }
  1123. return(INIT_SUCCEEDED);
  1124. }
  1125. //+------------------------------------------------------------------+
  1126. //| Expert deinitialization function |
  1127. //+------------------------------------------------------------------+
  1128. void OnDeinit(const int reason)
  1129. {
  1130. //---
  1131. }
  1132. //+------------------------------------------------------------------+
  1133. //| Expert tick function |
  1134. //+------------------------------------------------------------------+
  1135. void OnTick()
  1136. {
  1137. if(NewBar() == true)
  1138. {
  1139. Entry_strategy(1);
  1140. for(int m=0; m < orderNum; m++)
  1141. {
  1142. if(od_1[m].choch_index_date_time != 0)
  1143. {
  1144. //Print("current time is ",TimeCurrent());
  1145. //Print("time is ",od_1[m].Time_of_candle_For_trade);
  1146. //Print("signal is ",od_1[m].Signal);
  1147. if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0)
  1148. {
  1149. // Print("time is greater and signal is buy ",TimeCurrent());
  1150. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1151. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1152. // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time);
  1153. // Print("choch_index_date_time ",od_1[m].choch_index_date_time);
  1154. //
  1155. // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx));
  1156. // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0));
  1157. // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index));
  1158. // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0));
  1159. if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) > iLow(Symbol(),PERIOD_CURRENT,1)
  1160. && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1))
  1161. {
  1162. placeBuyTrade();
  1163. remove_value_from_structure();
  1164. od_1[m].choch_index_date_time = 0;
  1165. od_1[m].Signal == "";
  1166. od_1[m].reversal_index_date_time = 0;
  1167. od_1[m].choch_index_date_time = 0;
  1168. signal = "";
  1169. Print("buy trade placed -------------------------------------------------------------");
  1170. Print("time at which trade is placed : ",TimeCurrent());
  1171. }
  1172. }
  1173. if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0)
  1174. {
  1175. // Print("time is greater and signal is sell ",TimeCurrent());
  1176. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1177. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1178. // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time);
  1179. // Print("choch_index_date_time ",od_1[m].choch_index_date_time);
  1180. //
  1181. // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx));
  1182. // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0));
  1183. // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index));
  1184. // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0));
  1185. if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) < iLow(Symbol(),PERIOD_CURRENT,1)
  1186. && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1))
  1187. {
  1188. placeSellTrade();
  1189. remove_value_from_structure();
  1190. od_1[m].choch_index_date_time = 0;
  1191. od_1[m].Signal == "";
  1192. od_1[m].reversal_index_date_time = 0;
  1193. od_1[m].choch_index_date_time = 0;
  1194. signal = "";
  1195. Print("sell trade placed -------------------------------------------------------------");
  1196. Print("time at which trade is placed : ",TimeCurrent());
  1197. }
  1198. }
  1199. }
  1200. }
  1201. // for(int m=0; m < orderNum; m++)
  1202. // {
  1203. // if(od_1[m].choch_index_date_time != 0)
  1204. // {
  1205. //
  1206. // //Print("current time is ",TimeCurrent());
  1207. // //Print("time is ",od_1[m].Time_of_candle_For_trade);
  1208. // //Print("signal is ",od_1[m].Signal);
  1209. //
  1210. //
  1211. // if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0)
  1212. // {
  1213. // // Print("time is greater and signal is buy ",TimeCurrent());
  1214. //
  1215. // int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1216. // int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1217. //
  1218. // // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time);
  1219. // // Print("choch_index_date_time ",od_1[m].choch_index_date_time);
  1220. // //
  1221. // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx));
  1222. // // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0));
  1223. // // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index));
  1224. // // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0));
  1225. //
  1226. // if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) > iLow(Symbol(),PERIOD_CURRENT,1)
  1227. // && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1))
  1228. // {
  1229. // placeBuyTrade();
  1230. // remove_value_from_structure();
  1231. // od_1[m].choch_index_date_time = 0;
  1232. // od_1[m].Signal == "";
  1233. // od_1[m].reversal_index_date_time = 0;
  1234. // od_1[m].choch_index_date_time = 0;
  1235. //
  1236. // signal = "";
  1237. // Print("buy trade placed -------------------------------------------------------------");
  1238. // Print("time at which trade is placed : ",TimeCurrent());
  1239. //
  1240. // }
  1241. //
  1242. //
  1243. // }
  1244. //
  1245. // if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0)
  1246. // {
  1247. //
  1248. // // Print("time is greater and signal is sell ",TimeCurrent());
  1249. //
  1250. // int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1251. // int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1252. //
  1253. // // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time);
  1254. // // Print("choch_index_date_time ",od_1[m].choch_index_date_time);
  1255. // //
  1256. // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx));
  1257. // // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0));
  1258. // // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index));
  1259. // // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0));
  1260. //
  1261. // if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) < iLow(Symbol(),PERIOD_CURRENT,1)
  1262. // && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1))
  1263. // {
  1264. // placeSellTrade();
  1265. // remove_value_from_structure();
  1266. // od_1[m].choch_index_date_time = 0;
  1267. // od_1[m].Signal == "";
  1268. // od_1[m].reversal_index_date_time = 0;
  1269. // od_1[m].choch_index_date_time = 0;
  1270. // signal = "";
  1271. // Print("sell trade placed -------------------------------------------------------------");
  1272. // Print("time at which trade is placed : ",TimeCurrent());
  1273. //
  1274. // }
  1275. //
  1276. // }
  1277. // }
  1278. // }
  1279. }
  1280. }
  1281. //+------------------------------------------------------------------+
  1282. //| |
  1283. //+------------------------------------------------------------------+
  1284. bool NewBar()
  1285. {
  1286. static datetime Last_bar ;
  1287. datetime Current_bar = iTime(Symbol(), PERIOD_CURRENT,0);
  1288. if(Current_bar != Last_bar)
  1289. {
  1290. Last_bar = Current_bar;
  1291. return (true);
  1292. }
  1293. else
  1294. {
  1295. return (false);
  1296. }
  1297. }
  1298. //+------------------------------------------------------------------+
  1299. //| |
  1300. //+------------------------------------------------------------------+
  1301. bool object_find(string obj) // to find object placed by user in the chart
  1302. {
  1303. if(ObjectFind(0,obj) >= 0)
  1304. {
  1305. return true;
  1306. }
  1307. return false;
  1308. }
  1309. //+------------------------------------------------------------------+
  1310. //| |
  1311. //+------------------------------------------------------------------+
  1312. string checkCandle(int v) // to check the candle is bullish or bearish
  1313. {
  1314. double close = iClose(Symbol(),PERIOD_CURRENT,v);
  1315. double open = iOpen(Symbol(),PERIOD_CURRENT,v);
  1316. if(close > open)
  1317. {
  1318. return "Bullish";
  1319. }
  1320. else
  1321. if(close < open)
  1322. {
  1323. return "Bearish";
  1324. }
  1325. return "empty";
  1326. }
  1327. //+------------------------------------------------------------------+
  1328. //+------------------------------------------------------------------+