Ingen beskrivning

BOS_CHOCH.mq5 81KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229
  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. enum lotcalculator
  13. {
  14. fix, //Fixed Lot Size
  15. rsk, //Risk Percentage
  16. };
  17. struct tradeOrder
  18. {
  19. datetime choch_index_date_time;
  20. datetime reversal_index_date_time;
  21. string Signal;
  22. datetime Time_OF_Candle;
  23. datetime Time_of_candle_For_trade;
  24. int EntryCon;
  25. tradeOrder()
  26. {
  27. choch_index_date_time = 0;
  28. Signal = "";
  29. reversal_index_date_time = 0;
  30. Time_OF_Candle = 0.0;
  31. Time_of_candle_For_trade = 0.0;
  32. EntryCon = 0.0;
  33. }
  34. };
  35. tradeOrder od_1[orderNum];
  36. bool entry_condition_candle_1_met = false;
  37. enum entryCondition
  38. {
  39. one, // Entry A1
  40. two, // Entry A2
  41. };
  42. // input entryCondition Entry_condition_1 = one; // Entry Condition
  43. sinput string str = "<><><><><><> Set Object Name <><><><><><>";
  44. input string object_name = "line";
  45. sinput string str1 = "<><><><><><> Set time of vertical line <><><><><><>";
  46. input datetime inpTime = 0;//First Line Draw time
  47. sinput string str2 = "<><><><><><> General Settings <><><><><><>";
  48. input int magic_no = 123; // Magic no
  49. input double lot_size = 0.1;
  50. input lotcalculator lot_calculator = fix; //Lot Size Calculator
  51. input bool Entry_condition_two_Enable = false; // Enable A1 Entry
  52. input bool Entry_condition_one_Enable = false; // Enable A2 Entry
  53. input double risk = 1; //Risk in Percentage %
  54. input double stoploss = 20; // Stoploss Pips buffer from choch candle
  55. string trend = " ";
  56. string signal = "";
  57. datetime reversal_bar_time = 0;
  58. datetime choch_index_time ;
  59. datetime index_of_low_time;
  60. datetime index_of_high_time;
  61. datetime store_last_bos_index_time;
  62. datetime time_of_candle = 0.0;
  63. datetime time_to_place_trade = 0.0;
  64. datetime high_index_time;
  65. datetime low_index_time;
  66. datetime tp_date_time_buy;
  67. datetime tp_date_time_sell;
  68. datetime Last_bos_before_reversal;
  69. double hi;
  70. double lo;
  71. double high,low,low1,high1,low2,high2;
  72. double HIGH;
  73. double LOW;
  74. bool bearish_found = false;
  75. bool bullish_found = false;
  76. bool choch_at_index = false;
  77. int choch_index = 0;
  78. int reversal_candle_index = 0;
  79. int ind = 0;
  80. int index_of_last_high = 0;
  81. int index_of_last_low = 0;
  82. int index_of_low = 0;
  83. int index_of_high = 0;
  84. int high_index=0;
  85. int low_index =0;
  86. int Store_bos_last_index = 0;
  87. int index = 0;
  88. //+------------------------------------------------------------------+
  89. //| Expert initialization function |
  90. //+------------------------------------------------------------------+
  91. void Bos(int i)
  92. {
  93. int save_bullish_index = 0;
  94. int save_bearish_index = 0;
  95. if(trend == "uptrend")
  96. {
  97. high1 = iHigh(Symbol(),PERIOD_CURRENT,i);
  98. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  99. if(close > high)
  100. {
  101. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  102. for(int j = i ; j < high_index ; j++)
  103. {
  104. if(checkCandle(j) == "Bearish")
  105. {
  106. save_bullish_index = j;
  107. if(object_find("high") > 0)
  108. {
  109. ObjectDelete(0,"high");
  110. }
  111. high = high1;
  112. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  113. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  114. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  115. ObjectCreate(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point());
  116. ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  117. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  118. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  119. //low = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  120. low = iLow(Symbol(),PERIOD_CURRENT,j);
  121. bearish_found = true;
  122. index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,j);
  123. break;
  124. }
  125. }
  126. if(bearish_found == true)
  127. {
  128. for(int k=save_bullish_index; k > i ; k--)
  129. {
  130. low1 = iLow(Symbol(),PERIOD_CURRENT,k);
  131. if(low1 < low)
  132. {
  133. low = low1;
  134. index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,k);
  135. bearish_found = false;
  136. }
  137. }
  138. if(object_find("low") > 0)
  139. {
  140. if(ObjectDelete(0,"low"))
  141. {
  142. //Print("object deleted :");
  143. }
  144. }
  145. index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, index_of_low_time, false);
  146. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  147. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  148. ObjectSetInteger(0,"low",OBJPROP_RAY_LEFT,false);
  149. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  150. }
  151. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  152. }
  153. }
  154. if(trend == "downtrend")
  155. {
  156. low1 = iLow(Symbol(),PERIOD_CURRENT,i);
  157. double close1 = iClose(Symbol(),PERIOD_CURRENT,i);
  158. if(close1 < low)
  159. {
  160. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  161. for(int j= i ; j < low_index ; j++)
  162. {
  163. if(checkCandle(j) == "Bullish")
  164. {
  165. save_bullish_index = j;
  166. if(object_find("low") > 0)
  167. {
  168. ObjectDelete(0,"low");
  169. }
  170. low = low1;
  171. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  172. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  173. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  174. ObjectCreate(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low);
  175. ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  176. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  177. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  178. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  179. high = iHigh(Symbol(),PERIOD_CURRENT,j);
  180. bullish_found = true;
  181. index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,j);
  182. break;
  183. }
  184. }
  185. if(bullish_found == true)
  186. {
  187. for(int k=save_bullish_index; k > i ; k--)
  188. {
  189. high1 = iHigh(Symbol(),PERIOD_CURRENT,k);
  190. if(high1 > high)
  191. {
  192. high = high1;
  193. index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,k);
  194. bullish_found = false;
  195. }
  196. }
  197. if(object_find("high") > 0)
  198. {
  199. ObjectDelete(0,"high");
  200. }
  201. index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, index_of_high_time, false);
  202. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  203. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  204. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  205. bullish_found = false;
  206. }
  207. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  208. }
  209. }
  210. }
  211. //+------------------------------------------------------------------+
  212. //| |
  213. //+------------------------------------------------------------------+
  214. void Entry_Action_1_down(int Store_bos_last_index, int i,int diff)
  215. {
  216. ind = Store_bos_last_index +1; // reversal candle index
  217. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  218. bool addtional_condition = true;
  219. for(int j=Store_bos_last_index-1; j>i+1; j--)
  220. {
  221. // Print("Store_bos_last_index ",Store_bos_last_index," chock index is ",i);
  222. if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji"))
  223. {
  224. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,j-1))
  225. {
  226. tp_date_time_buy = 0.0;
  227. // Print("target lines deleted due to in bar");
  228. if(object_find("target line") > 0)
  229. {
  230. ObjectDelete(0,"target line");
  231. }
  232. if(object_find("target line1") > 0)
  233. {
  234. ObjectDelete(0,"target line1");
  235. }
  236. addtional_condition = false;
  237. }
  238. }
  239. if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji"))
  240. {
  241. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iOpen(Symbol(),PERIOD_CURRENT,j-1))
  242. {
  243. tp_date_time_buy = 0.0;
  244. // Print("target lines deleted due to in bar");
  245. if(object_find("target line") > 0)
  246. {
  247. ObjectDelete(0,"target line");
  248. }
  249. if(object_find("target line1") > 0)
  250. {
  251. ObjectDelete(0,"target line1");
  252. }
  253. addtional_condition = false;
  254. }
  255. }
  256. }
  257. Print("condition satisfied in downtrend buy trade : ",check_values_less_than_choch_high(ind,i));
  258. if(check_values_less_than_choch_high(ind,i) == true && addtional_condition == true)
  259. {
  260. if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
  261. {
  262. signal = "buy";
  263. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  264. // Print("Place buy order -----------------------------------------------------------------------: ");
  265. }
  266. }
  267. 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));
  268. 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));
  269. ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  270. ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  271. 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));
  272. 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));
  273. ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  274. ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  275. diff = 0;
  276. }
  277. //+------------------------------------------------------------------+
  278. //| |
  279. //+------------------------------------------------------------------+
  280. void Entry_Action_2_down(int Store_bos_last_index, int i,int diff)
  281. {
  282. ind = Store_bos_last_index +1; // reversal candle index
  283. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  284. bool addtional_condition = true;
  285. for(int j=Store_bos_last_index-1; j>i+1; j--)
  286. {
  287. if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji"))
  288. {
  289. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,j-1))
  290. {
  291. tp_date_time_buy = 0.0;
  292. // Print("target lines deleted due to in bar");
  293. if(object_find("target line") > 0)
  294. {
  295. ObjectDelete(0,"target line");
  296. }
  297. if(object_find("target line1") > 0)
  298. {
  299. ObjectDelete(0,"target line1");
  300. }
  301. addtional_condition = false;
  302. }
  303. }
  304. if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji"))
  305. {
  306. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iOpen(Symbol(),PERIOD_CURRENT,j-1))
  307. {
  308. tp_date_time_buy = 0.0;
  309. // Print("target lines deleted due to in bar");
  310. if(object_find("target line") > 0)
  311. {
  312. ObjectDelete(0,"target line");
  313. }
  314. if(object_find("target line1") > 0)
  315. {
  316. ObjectDelete(0,"target line1");
  317. }
  318. addtional_condition = false;
  319. }
  320. }
  321. }
  322. if(check_values_less_than_choch_high(ind,i) == true && addtional_condition == true)
  323. {
  324. if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
  325. {
  326. signal = "buy";
  327. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  328. }
  329. }
  330. 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));
  331. 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));
  332. ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  333. ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  334. 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));
  335. 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));
  336. ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  337. ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  338. diff = 0;
  339. }
  340. //+------------------------------------------------------------------+
  341. //| |
  342. //+------------------------------------------------------------------+
  343. void Check_Inside_bar(int inex)
  344. {
  345. // Print("-----------------------------------------------------------------------------------------------------------------------------------");
  346. for(int j=inex+1; j>=1; j--)
  347. {
  348. // Print(" i am checking inside bar ");
  349. if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji"))
  350. {
  351. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,j-1))
  352. {
  353. tp_date_time_sell = 0.0;
  354. tp_date_time_buy = 0.0;
  355. // Print("Target line deleted due to in bar ");
  356. if(object_find("target line") > 0)
  357. {
  358. Print("Target line deleted due to in bar ");
  359. ObjectDelete(0,"target line");
  360. }
  361. if(object_find("target line1") > 0)
  362. {
  363. ObjectDelete(0,"target line1");
  364. }
  365. }
  366. }
  367. if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji"))
  368. {
  369. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iOpen(Symbol(),PERIOD_CURRENT,j-1))
  370. {
  371. // Print("j index is",j," j-1 index is ",j-1);
  372. tp_date_time_sell = 0.0;
  373. tp_date_time_buy = 0.0;
  374. // Print("Target line deleted due to in bar ");
  375. if(object_find("target line") > 0)
  376. {
  377. Print("Target line deleted due to in bar ");
  378. ObjectDelete(0,"target line");
  379. }
  380. if(object_find("target line1") > 0)
  381. {
  382. ObjectDelete(0,"target line1");
  383. }
  384. }
  385. }
  386. }
  387. }
  388. //+------------------------------------------------------------------+
  389. //| |
  390. //+------------------------------------------------------------------+
  391. void Entry_Action_1_up(int Store_bos_last_index, int i,int diff)
  392. {
  393. ind = Store_bos_last_index +1; // reversal candle index
  394. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  395. bool addtional_condition = true;
  396. for(int j=Store_bos_last_index-1; j>i+1; j--)
  397. {
  398. if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji"))
  399. {
  400. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,j-1))
  401. {
  402. tp_date_time_sell = 0.0;
  403. // Print("Target line deleted due to in bar ");
  404. if(object_find("target line") > 0)
  405. {
  406. ObjectDelete(0,"target line");
  407. }
  408. if(object_find("target line1") > 0)
  409. {
  410. ObjectDelete(0,"target line1");
  411. }
  412. addtional_condition = false;
  413. }
  414. }
  415. if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji"))
  416. {
  417. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iOpen(Symbol(),PERIOD_CURRENT,j-1))
  418. {
  419. tp_date_time_sell = 0.0;
  420. // Print("Target line deleted due to in bar ");
  421. if(object_find("target line") > 0)
  422. {
  423. ObjectDelete(0,"target line");
  424. }
  425. if(object_find("target line1") > 0)
  426. {
  427. ObjectDelete(0,"target line1");
  428. }
  429. addtional_condition = false;
  430. }
  431. }
  432. }
  433. // Print("condition satisfied in uptrend sell trade : ",check_values_less_than_choch_low(ind,i));
  434. if(check_values_less_than_choch_low(ind,i) == true && addtional_condition == true)
  435. {
  436. if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
  437. {
  438. signal = "sell";
  439. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  440. // Print("Place sell order -----------------------------------------------------------------------: ");
  441. }
  442. }
  443. 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));
  444. 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));
  445. ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  446. ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  447. 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));
  448. 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));
  449. ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  450. ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  451. }
  452. //+------------------------------------------------------------------+
  453. //| |
  454. //+------------------------------------------------------------------+
  455. void Entry_Action_2_up(int Store_bos_last_index, int i,int diff)
  456. {
  457. ind = Store_bos_last_index +1; // reversal candle index
  458. reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind);
  459. bool addtional_condition = true;
  460. for(int j=Store_bos_last_index-1; j>i+1; j--)
  461. {
  462. if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji"))
  463. {
  464. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,j-1))
  465. {
  466. tp_date_time_sell = 0.0;
  467. // Print("Target line deleted due to in bar ");
  468. if(object_find("target line") > 0)
  469. {
  470. ObjectDelete(0,"target line");
  471. }
  472. if(object_find("target line1") > 0)
  473. {
  474. ObjectDelete(0,"target line1");
  475. }
  476. addtional_condition = false;
  477. }
  478. }
  479. if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji"))
  480. {
  481. if(iHigh(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) < iOpen(Symbol(),PERIOD_CURRENT,j-1))
  482. {
  483. tp_date_time_sell = 0.0;
  484. // Print("Target line deleted due to in bar ");
  485. if(object_find("target line") > 0)
  486. {
  487. ObjectDelete(0,"target line");
  488. }
  489. if(object_find("target line1") > 0)
  490. {
  491. ObjectDelete(0,"target line1");
  492. }
  493. addtional_condition = false;
  494. }
  495. }
  496. }
  497. if(check_values_less_than_choch_low(ind,i) == true && addtional_condition == true)
  498. {
  499. if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
  500. {
  501. signal = "sell";
  502. time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i);
  503. }
  504. }
  505. 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));
  506. 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));
  507. ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  508. ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  509. 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));
  510. 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));
  511. ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  512. ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  513. }
  514. //+------------------------------------------------------------------+
  515. //| |
  516. //+------------------------------------------------------------------+
  517. bool check_values_less_than_choch_high(int ind,int i) // downtrend
  518. {
  519. for(int k=ind; k>i; k--)
  520. {
  521. if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
  522. {
  523. return false;
  524. }
  525. }
  526. return true;
  527. }
  528. //+------------------------------------------------------------------+
  529. //| |
  530. //+------------------------------------------------------------------+
  531. bool check_values_less_than_choch_high1(int ind,int i) // downtrend
  532. {
  533. for(int k=ind; k>i; k--)
  534. {
  535. if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
  536. {
  537. return false;
  538. }
  539. }
  540. return true;
  541. }
  542. //+------------------------------------------------------------------+
  543. //| |
  544. //+------------------------------------------------------------------+
  545. bool check_values_less_than_choch_low(int ind,int i) // uptrend
  546. {
  547. for(int k=ind; k>i; k--)
  548. {
  549. if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
  550. {
  551. return false;
  552. }
  553. }
  554. return true;
  555. }
  556. //+------------------------------------------------------------------+
  557. //| |
  558. //+------------------------------------------------------------------+
  559. bool check_values_less_than_choch_low1(int ind,int i) // uptrend
  560. {
  561. for(int k=ind; k>i; k--)
  562. {
  563. if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
  564. {
  565. return false;
  566. }
  567. }
  568. return true;
  569. }
  570. //+------------------------------------------------------------------+
  571. //| |
  572. //+------------------------------------------------------------------+
  573. void choch(int i)
  574. {
  575. HIGH = 0.0;
  576. LOW = 0.0;
  577. if(trend == "uptrend")
  578. {
  579. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  580. if(close < low)
  581. {
  582. remove_value_from_structure();
  583. choch_at_index = true;
  584. ObjectCreate(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  585. ObjectSetString(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  586. ObjectCreate(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_DOWN,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+100*Point());
  587. ObjectSetInteger(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrRed);
  588. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  589. int diff1 = Store_bos_last_index - (i);
  590. // condition on 1st candle
  591. if(Entry_condition_one_Enable)
  592. {
  593. Entry_Action_1_up(Store_bos_last_index,i,diff1);
  594. }
  595. low = iLow(Symbol(),PERIOD_CURRENT,i);
  596. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  597. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  598. low_index = i;
  599. if(object_find("low") > 0)
  600. {
  601. ObjectDelete(0,"low");
  602. }
  603. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  604. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  605. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  606. trend = "downtrend";
  607. // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  608. // -----------------------------------------------------------------------------------------------------------------------------------------------------------
  609. int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  610. chock_index++;
  611. datetime lastChochTimeUp = iTime(Symbol(),PERIOD_CURRENT,chock_index);
  612. HIGH = iHigh(Symbol(),PERIOD_CURRENT,chock_index); // save high and low of the chock prev index to compare
  613. LOW = iLow(Symbol(),PERIOD_CURRENT,chock_index);
  614. if(object_find("target line") > 0)
  615. {
  616. ObjectDelete(0,"target line");
  617. }
  618. if(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)));
  619. {
  620. //Print("object created from uptrend to downtrend ");
  621. }
  622. ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
  623. ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
  624. if(object_find("target line1") > 0)
  625. {
  626. ObjectDelete(0,"target line1");
  627. }
  628. 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));
  629. ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true);
  630. ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen);
  631. choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  632. int chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  633. bool condition_not_match = false;
  634. for(int p=chock_index - 2 ; p > chock_index1; p--)
  635. {
  636. if(iLow(Symbol(),PERIOD_CURRENT,p) < HIGH)
  637. {
  638. condition_not_match = true;
  639. }
  640. }
  641. if(condition_not_match == true)
  642. {
  643. HIGH = 0.0;
  644. LOW = 0.0;
  645. tp_date_time_sell = 0.0;
  646. Print("Target line deleted in choch");
  647. condition_not_match = false;
  648. if(object_find("target line") > 0)
  649. {
  650. ObjectDelete(0,"target line");
  651. }
  652. if(object_find("target line1") > 0)
  653. {
  654. ObjectDelete(0,"target line1");
  655. }
  656. }
  657. else
  658. {
  659. tp_date_time_sell = lastChochTimeUp;
  660. }
  661. //-------------------------------------------------------------------------------------------------------------------------------------------------------------------
  662. if(signal == "sell")
  663. {
  664. time_to_place_trade = 0.0;
  665. int current_time_frame = Period();
  666. string current_time_frame_string;
  667. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1);
  668. }
  669. signal = "";
  670. // condition on 2st candle
  671. if(Entry_condition_two_Enable)
  672. {
  673. Entry_Action_2_up(Store_bos_last_index,i,diff1);
  674. }
  675. low = iLow(Symbol(),PERIOD_CURRENT,i);
  676. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  677. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  678. low_index = i;
  679. if(object_find("low") > 0)
  680. {
  681. ObjectDelete(0,"low");
  682. }
  683. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  684. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  685. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  686. trend = "downtrend";
  687. if(signal == "sell")
  688. {
  689. time_to_place_trade = 0.0;
  690. int current_time_frame = Period();
  691. string current_time_frame_string;
  692. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2);
  693. }
  694. signal = "";
  695. }
  696. }
  697. if(trend == "downtrend")
  698. {
  699. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  700. if(close > high)
  701. {
  702. remove_value_from_structure();
  703. choch_at_index = true;
  704. ObjectCreate(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+60*Point());
  705. ObjectSetString(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  706. ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point());
  707. ObjectSetInteger(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen);
  708. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  709. int diff = Store_bos_last_index - (i);
  710. if(Entry_condition_one_Enable)
  711. {
  712. Entry_Action_1_down(Store_bos_last_index,i,diff);
  713. }
  714. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  715. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  716. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  717. high_index = i;
  718. if(object_find("high") > 0)
  719. {
  720. ObjectDelete(0,"high");
  721. }
  722. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  723. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  724. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  725. trend = "uptrend";
  726. // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  727. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  728. int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  729. chock_index++;
  730. datetime t = iTime(Symbol(),PERIOD_CURRENT,chock_index);
  731. HIGH = iHigh(Symbol(),PERIOD_CURRENT,chock_index); // save high and low of the chock prev index to compare
  732. LOW = iLow(Symbol(),PERIOD_CURRENT,chock_index);
  733. if(object_find("target line") > 0)
  734. {
  735. ObjectDelete(0,"target line");
  736. }
  737. if(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)));
  738. {
  739. //Print("object created from downtrend to uptrend ");
  740. }
  741. ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
  742. ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
  743. if(object_find("target line1") > 0)
  744. {
  745. ObjectDelete(0,"target line1");
  746. }
  747. 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));
  748. ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true);
  749. ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen);
  750. choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  751. int chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  752. bool condition_not_match = false;
  753. for(int p=chock_index - 2 ; p > chock_index1; p--)
  754. {
  755. if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW)
  756. {
  757. condition_not_match = true;
  758. }
  759. }
  760. if(condition_not_match == true)
  761. {
  762. Print("line target deleted :");
  763. HIGH = 0.0;
  764. LOW = 0.0;
  765. tp_date_time_buy = 0.0;
  766. condition_not_match = false;
  767. if(object_find("target line") > 0)
  768. {
  769. ObjectDelete(0,"target line");
  770. }
  771. if(object_find("target line1") > 0)
  772. {
  773. ObjectDelete(0,"target line1");
  774. }
  775. }
  776. else
  777. {
  778. tp_date_time_buy = t;
  779. }
  780. if(signal == "buy")
  781. {
  782. time_to_place_trade = 0.0;
  783. int current_time_frame = Period();
  784. string current_time_frame_string;
  785. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1);
  786. }
  787. signal = "";
  788. if(Entry_condition_two_Enable)
  789. {
  790. Entry_Action_2_down(Store_bos_last_index,i,diff);
  791. }
  792. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  793. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  794. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  795. high_index = i;
  796. if(object_find("high") > 0)
  797. {
  798. ObjectDelete(0,"high");
  799. }
  800. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  801. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  802. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  803. trend = "uptrend";
  804. if(signal == "buy")
  805. {
  806. time_to_place_trade = 0.0;
  807. int current_time_frame = Period();
  808. string current_time_frame_string;
  809. store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2);
  810. }
  811. signal = "";
  812. }
  813. }
  814. }
  815. //+------------------------------------------------------------------+
  816. //| |
  817. //+------------------------------------------------------------------+
  818. void bos2(int i)
  819. {
  820. bool cnd;
  821. bool candle_bullish = false;
  822. bool candle_bearish = false;
  823. double find_high = 0.0;
  824. datetime find_high_time = 0.0;
  825. int save_bullish_index = 0;
  826. int save_bearish_index = 0;
  827. double find_low = 0.0;
  828. datetime find_low_time = 0.0;
  829. if(trend == "downtrend")
  830. {
  831. choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  832. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  833. if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index)
  834. {
  835. cnd = false;
  836. }
  837. else
  838. {
  839. cnd = true;
  840. }
  841. if(choch_index_time > store_last_bos_index_time)
  842. {
  843. for(int m=choch_index; m>i; m--)
  844. {
  845. if(checkCandle(m) == "Bullish")
  846. {
  847. save_bullish_index = m;
  848. candle_bullish = true;
  849. break;
  850. }
  851. }
  852. find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index);
  853. find_high_time = iTime(Symbol(),PERIOD_CURRENT,save_bullish_index); // here is the addition
  854. for(int m=save_bullish_index; m>i; m--)
  855. {
  856. double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m);
  857. // find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  858. if(find_high < find_high1)
  859. {
  860. find_high = find_high1;
  861. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  862. }
  863. }
  864. for(int j=choch_index; j>=i; j--)
  865. {
  866. if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i))
  867. {
  868. cnd = false;
  869. }
  870. }
  871. }
  872. if(choch_index_time < store_last_bos_index_time)
  873. {
  874. for(int m=Store_bos_last_index; m>i; m--)
  875. {
  876. if(checkCandle(m) == "Bullish")
  877. {
  878. save_bullish_index = m;
  879. candle_bullish = true;
  880. break;
  881. }
  882. }
  883. find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index);
  884. find_high_time = iTime(Symbol(),PERIOD_CURRENT,save_bullish_index); // here is the addition
  885. for(int m=save_bullish_index; m>i; m--)
  886. {
  887. double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m);
  888. // find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  889. if(find_high < find_high1)
  890. {
  891. find_high = find_high1;
  892. find_high_time = iTime(Symbol(),PERIOD_CURRENT,m);
  893. }
  894. }
  895. for(int j=Store_bos_last_index; j>=i; j--)
  896. {
  897. if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i))
  898. {
  899. cnd = false;
  900. }
  901. }
  902. }
  903. if(cnd == true && candle_bullish == true)
  904. {
  905. if(object_find("high") > 0)
  906. {
  907. ObjectDelete(0,"high");
  908. }
  909. high = find_high;
  910. high_index_time = find_high_time; // here is the addition
  911. index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, find_high_time, false);
  912. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  913. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  914. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  915. if(object_find("low") > 0)
  916. {
  917. ObjectDelete(0,"low");
  918. }
  919. low = iLow(Symbol(),PERIOD_CURRENT,i);
  920. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  921. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  922. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  923. ObjectCreate(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low);
  924. ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  925. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  926. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  927. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  928. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  929. cnd = false;
  930. candle_bullish = false;
  931. }
  932. }
  933. //-------
  934. if(trend == "uptrend")
  935. {
  936. choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false);
  937. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  938. if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index)
  939. {
  940. cnd = false;
  941. }
  942. else
  943. {
  944. cnd = true;
  945. }
  946. if(choch_index_time < store_last_bos_index_time)
  947. {
  948. for(int m=Store_bos_last_index; m>i; m--)
  949. {
  950. if(checkCandle(m) == "Bearish")
  951. {
  952. candle_bearish = true;
  953. save_bearish_index = m;
  954. break;
  955. }
  956. }
  957. find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index);
  958. find_low_time = iTime(Symbol(),PERIOD_CURRENT,save_bearish_index); // here is the addition
  959. for(int m=save_bearish_index; m>i; m--)
  960. {
  961. double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m);
  962. //find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  963. if(find_low > find_low1)
  964. {
  965. find_low = find_low1;
  966. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  967. }
  968. }
  969. for(int j=Store_bos_last_index; j>=i; j--)
  970. {
  971. if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i))
  972. {
  973. cnd = false;
  974. }
  975. }
  976. }
  977. if(choch_index_time > store_last_bos_index_time)
  978. {
  979. for(int m=choch_index; m>i; m--)
  980. {
  981. if(checkCandle(m) == "Bearish")
  982. {
  983. candle_bearish = true;
  984. save_bearish_index = m;
  985. break;
  986. }
  987. }
  988. find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index);
  989. find_low_time = iTime(Symbol(),PERIOD_CURRENT,save_bearish_index); // here is the addition
  990. for(int m=save_bearish_index; m>i; m--)
  991. {
  992. double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m);
  993. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  994. // find_low = find_low1; // here is the addition
  995. if(find_low > find_low1)
  996. {
  997. find_low = find_low1;
  998. find_low_time = iTime(Symbol(),PERIOD_CURRENT,m);
  999. }
  1000. }
  1001. for(int j=choch_index; j>=i; j--)
  1002. {
  1003. if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i))
  1004. {
  1005. cnd = false;
  1006. }
  1007. }
  1008. }
  1009. if(cnd == true && candle_bearish == true)
  1010. {
  1011. if(object_find("low") > 0)
  1012. {
  1013. ObjectDelete(0,"low");
  1014. }
  1015. low = find_low;
  1016. low_index_time = find_low_time; // here is the addition
  1017. index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, find_low_time, false);
  1018. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  1019. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  1020. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  1021. if(object_find("high") > 0)
  1022. {
  1023. ObjectDelete(0,"high");
  1024. }
  1025. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  1026. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  1027. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  1028. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  1029. ObjectCreate(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point());
  1030. ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  1031. store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1032. Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false);
  1033. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1034. high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false);
  1035. cnd = false;
  1036. candle_bearish = false;
  1037. }
  1038. }
  1039. }
  1040. //+------------------------------------------------------------------+
  1041. //| |
  1042. //+------------------------------------------------------------------+
  1043. void third_Condition(int i)
  1044. {
  1045. if(trend == "uptrend")
  1046. {
  1047. low2 = iLow(Symbol(),PERIOD_CURRENT,i);
  1048. high2 = iHigh(Symbol(),PERIOD_CURRENT,i);
  1049. if(low2 < low)
  1050. {
  1051. //ObjectCreate(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  1052. // ObjectSetString(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  1053. low = low2;
  1054. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1055. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  1056. low_index = i; // addtion to be minus
  1057. if(object_find("low") > 0)
  1058. {
  1059. ObjectDelete(0,"low");
  1060. }
  1061. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  1062. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  1063. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  1064. }
  1065. if(high2 > high)
  1066. {
  1067. // ObjectCreate(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  1068. // ObjectSetString(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  1069. high = high2;
  1070. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1071. high_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  1072. high_index = i; // addtion to be minus
  1073. if(object_find("high") > 0)
  1074. {
  1075. ObjectDelete(0,"high");
  1076. }
  1077. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  1078. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  1079. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  1080. }
  1081. }
  1082. if(trend == "downtrend")
  1083. {
  1084. high2 = iHigh(Symbol(),PERIOD_CURRENT,i);
  1085. low2 = iLow(Symbol(),PERIOD_CURRENT,i);
  1086. if(high2 > high)
  1087. {
  1088. // ObjectCreate(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  1089. // ObjectSetString(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  1090. high = high2;
  1091. high_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1092. high_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  1093. high_index = i; // addtion to be minus
  1094. if(object_find("high") > 0)
  1095. {
  1096. ObjectDelete(0,"high");
  1097. }
  1098. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  1099. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  1100. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  1101. }
  1102. if(low2 < low)
  1103. {
  1104. // ObjectCreate(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  1105. // ObjectSetString(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  1106. low = low2;
  1107. low_index_time = iTime(Symbol(),PERIOD_CURRENT,i);
  1108. low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false);
  1109. low_index = i; // addtion to be minus
  1110. if(object_find("low") > 0)
  1111. {
  1112. ObjectDelete(0,"low");
  1113. }
  1114. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  1115. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  1116. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  1117. }
  1118. }
  1119. }
  1120. //+------------------------------------------------------------------+
  1121. //| |
  1122. //+------------------------------------------------------------------+
  1123. void store_value_in_structure(datetime chock_time,datetime ind,string signal,datetime time_of_candle,datetime time_to_place_trade, int entry)
  1124. {
  1125. for(int l=0; l<200; l++)
  1126. {
  1127. if(od_1[l].choch_index_date_time == 0)
  1128. {
  1129. od_1[l].choch_index_date_time = chock_time;
  1130. od_1[l].reversal_index_date_time = ind;
  1131. od_1[l].Signal = signal;
  1132. od_1[l].Time_OF_Candle = time_of_candle;
  1133. od_1[l].Time_of_candle_For_trade = time_to_place_trade;
  1134. od_1[l].EntryCon = entry;
  1135. Print("added value of chock in structure ---------------",od_1[l].choch_index_date_time);
  1136. break;
  1137. }
  1138. }
  1139. }
  1140. //+------------------------------------------------------------------+
  1141. //| |
  1142. //+------------------------------------------------------------------+
  1143. void remove_value_from_structure()
  1144. {
  1145. for(int l=0; l<200; l++)
  1146. {
  1147. if(od_1[l].choch_index_date_time != 0)
  1148. {
  1149. Print("chock value removed from structure and chock time is ---------- ",od_1[l].choch_index_date_time);
  1150. od_1[l].choch_index_date_time = 0;
  1151. od_1[l].reversal_index_date_time = 0;
  1152. od_1[l].Signal = "";
  1153. od_1[l].Time_OF_Candle = 0;
  1154. od_1[l].Time_of_candle_For_trade = 0;
  1155. }
  1156. }
  1157. }
  1158. //+------------------------------------------------------------------+
  1159. //| |
  1160. //+------------------------------------------------------------------+
  1161. void Entry_strategy(int value)
  1162. {
  1163. for(int i=value; i > 0; i--)
  1164. {
  1165. Bos(i);
  1166. bos2(i);
  1167. choch(i);
  1168. third_Condition(i);
  1169. }
  1170. }
  1171. //+------------------------------------------------------------------+
  1172. //| |
  1173. //+------------------------------------------------------------------+
  1174. void placeBuyTrade()
  1175. {
  1176. double sell_SL = 0,sell_Tp = 0, openPrice = 0,buySL = 0, buyTp = 0;
  1177. openPrice = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  1178. double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  1179. int ch = iBarShift(Symbol(), PERIOD_CURRENT,choch_index_time,false); // get high of chock index
  1180. buySL = iLow(Symbol(),PERIOD_CURRENT,ch) - stoploss *10 * Point();
  1181. int tp = iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_buy,false);
  1182. buyTp = iLow(Symbol(),PERIOD_CURRENT,tp);
  1183. double distance = (Ask - buySL)/Point();
  1184. if(trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,getlot(distance),Ask,buySL,buyTp,"Buy Trade Placed"))
  1185. {
  1186. Print("Buy Trade Placed: ",trade.ResultOrder());
  1187. }
  1188. else
  1189. {
  1190. Print("Error in placing Buy: "+Symbol()+" ",GetLastError());
  1191. }
  1192. }
  1193. //+------------------------------------------------------------------+
  1194. //| |
  1195. //+------------------------------------------------------------------+
  1196. double getlot(double stop_loss)
  1197. {
  1198. Print("Tick Value: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE));
  1199. Print("Tick Size: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE));
  1200. double modeTickV=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE),modeTickS=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
  1201. double pipvalue = NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point()))*10),2);
  1202. pipvalue = pipvalue / 10;
  1203. double lotSize = lot_size;
  1204. if(lot_calculator==rsk) //calculating risk
  1205. {
  1206. double riskamount=(risk/100)*AccountInfoDouble(ACCOUNT_BALANCE);
  1207. double pipvalue_required=riskamount/stop_loss;
  1208. lotSize = pipvalue_required/pipvalue;
  1209. int roundDigit=0;
  1210. double step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
  1211. while(step<1)
  1212. {
  1213. roundDigit++;
  1214. step=step*10;
  1215. }
  1216. Print("Round Digits:",roundDigit);
  1217. lotSize = NormalizeDouble(lotSize,roundDigit);
  1218. //
  1219. }
  1220. Print("Lot Size: ",lotSize);
  1221. if(lotSize > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX))
  1222. {
  1223. lotSize=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
  1224. }
  1225. else
  1226. if(lotSize<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
  1227. {
  1228. lotSize=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
  1229. }
  1230. return lotSize;
  1231. }
  1232. //+------------------------------------------------------------------+
  1233. //| |
  1234. //+------------------------------------------------------------------+
  1235. void placeSellTrade()
  1236. {
  1237. double sell_SL = 0,sell_Tp = 0, openPrice = 0, buySL = 0, buyTp = 0;
  1238. openPrice = SymbolInfoDouble(Symbol(),SYMBOL_BID);
  1239. double Bid = SymbolInfoDouble(Symbol(),SYMBOL_BID);
  1240. int ch = iBarShift(Symbol(), PERIOD_CURRENT,choch_index_time,false); // get high of chock index
  1241. sell_SL = iHigh(Symbol(),PERIOD_CURRENT,ch) + stoploss *10 * Point();
  1242. int tp = iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_sell,false);
  1243. sell_Tp = iHigh(Symbol(),PERIOD_CURRENT,tp);
  1244. double distance = (sell_SL - Bid)/Point();
  1245. if(trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,getlot(distance),Bid,sell_SL,sell_Tp,"Sell Trade Placed"))
  1246. {
  1247. Print("Sell Trade PLaced: ",trade.ResultOrder());
  1248. }
  1249. else
  1250. {
  1251. Print("Error in placing Sell: "+Symbol()+" ",GetLastError());
  1252. }
  1253. }
  1254. //+------------------------------------------------------------------+
  1255. //| |
  1256. //+------------------------------------------------------------------+
  1257. int OnInit()
  1258. {
  1259. trade.SetExpertMagicNumber(magic_no);
  1260. trade.SetDeviationInPoints(10);
  1261. trade.SetTypeFilling(ORDER_FILLING_IOC);
  1262. trade.LogLevel(LOG_LEVEL_ALL);
  1263. trade.SetAsyncMode(false);
  1264. int idx = 0;
  1265. int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT,inpTime, false);
  1266. if(ObjectCreate(0,"line",OBJ_VLINE,0,inpTime,iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
  1267. {
  1268. Print("vertical line created on chart : ");
  1269. }
  1270. else
  1271. {
  1272. Print("error in creating line : ");
  1273. }
  1274. //int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT, D'2021.09.01 15:30:27', false);
  1275. //if(ObjectCreate(0,"line",OBJ_VLINE,0,D'2021.09.01 15:30:27',iLow(Symbol(),PERIOD_CURRENT,user_input_index)))
  1276. // {
  1277. // Print("object created on chart : ");
  1278. // }
  1279. //else
  1280. // {
  1281. // Print("object not created : ");
  1282. // }
  1283. object_find(object_name);
  1284. if(object_find(object_name) == true)
  1285. {
  1286. Print("object found");
  1287. if(checkCandle(user_input_index) == "Bullish")
  1288. {
  1289. trend = "uptrend";
  1290. high = iHigh(Symbol(),PERIOD_CURRENT,user_input_index);
  1291. high_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index); // ambiguity
  1292. high_index = user_input_index;
  1293. for(int j=user_input_index; j < 1000; j++)
  1294. {
  1295. if(checkCandle(j) == "Bearish")
  1296. {
  1297. low = iLow(Symbol(),PERIOD_CURRENT,j);
  1298. idx = j;
  1299. break;
  1300. }
  1301. }
  1302. idx = iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,idx,user_input_index+1);
  1303. low = iLow(Symbol(),PERIOD_CURRENT,idx);
  1304. low_index_time = iTime(Symbol(),PERIOD_CURRENT,idx);
  1305. low_index = idx;
  1306. }
  1307. if(checkCandle(user_input_index) == "Bearish")
  1308. {
  1309. trend = "downtrend";
  1310. low = iLow(Symbol(),PERIOD_CURRENT,user_input_index);
  1311. low_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index);
  1312. low_index = user_input_index;
  1313. for(int j=user_input_index; j < 1000; j++)
  1314. {
  1315. if(checkCandle(j) == "Bullish")
  1316. {
  1317. high = iHigh(Symbol(),PERIOD_CURRENT,j);
  1318. idx = j;
  1319. break;
  1320. }
  1321. }
  1322. for(int k=idx; k<user_input_index; k++)
  1323. {
  1324. double highh = iHigh(Symbol(),PERIOD_CURRENT,k);
  1325. if(highh > high)
  1326. {
  1327. high = highh;
  1328. high_index_time = iTime(Symbol(),PERIOD_CURRENT,k);
  1329. high_index = k;
  1330. }
  1331. }
  1332. }
  1333. ObjectCreate(0,"target line",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index+1),iHigh(Symbol(),PERIOD_CURRENT,user_input_index+1),iTime(Symbol(),PERIOD_CURRENT,0),iHigh(Symbol(),PERIOD_CURRENT,user_input_index + 1));
  1334. ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true);
  1335. ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen);
  1336. ObjectCreate(0,"target line1",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index + 1),iLow(Symbol(),PERIOD_CURRENT,user_input_index + 1),iTime(Symbol(),PERIOD_CURRENT,0),iLow(Symbol(),PERIOD_CURRENT,user_input_index + 1));
  1337. ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true);
  1338. ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen);
  1339. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  1340. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  1341. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  1342. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  1343. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  1344. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  1345. choch_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index);
  1346. Entry_strategy(user_input_index);
  1347. }
  1348. else
  1349. {
  1350. Print("Object Not Found");
  1351. }
  1352. return(INIT_SUCCEEDED);
  1353. }
  1354. //+------------------------------------------------------------------+
  1355. //| |
  1356. //+------------------------------------------------------------------+
  1357. bool value_close_low(int chockIndex)
  1358. {
  1359. for(int i=chockIndex; i>1; i--)
  1360. {
  1361. if(iLow(Symbol(),PERIOD_CURRENT,i) < iClose(Symbol(),PERIOD_CURRENT,1))
  1362. {
  1363. return false;
  1364. }
  1365. }
  1366. return true;
  1367. }
  1368. //+------------------------------------------------------------------+
  1369. //| |
  1370. //+------------------------------------------------------------------+
  1371. bool value_close_high(int chockIndex)
  1372. {
  1373. for(int i=chockIndex; i>1; i--)
  1374. {
  1375. if(iHigh(Symbol(),PERIOD_CURRENT,i) > iClose(Symbol(),PERIOD_CURRENT,1))
  1376. {
  1377. return false;
  1378. }
  1379. }
  1380. return true;
  1381. }
  1382. //+------------------------------------------------------------------+
  1383. //| Expert deinitialization function |
  1384. //+------------------------------------------------------------------+
  1385. void OnDeinit(const int reason)
  1386. {
  1387. //---
  1388. }
  1389. //+------------------------------------------------------------------+
  1390. //| Expert tick function |
  1391. //+------------------------------------------------------------------+
  1392. void OnTick()
  1393. {
  1394. if(NewBar() == true)
  1395. {
  1396. Entry_strategy(1);
  1397. // for entry condition candel 1
  1398. for(int m=0; m < orderNum; m++)
  1399. {
  1400. if(od_1[m].choch_index_date_time != 0)
  1401. {
  1402. int indexOfTradePlace = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].Time_OF_Candle,false);
  1403. if(indexOfTradePlace == 2)
  1404. {
  1405. if(od_1[m].EntryCon == 1 && od_1[m].Signal == "buy")
  1406. {
  1407. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1408. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1409. if(checkCandle(close_index) == "Bearish" && (checkCandle(close_index-1) == "Bearish" || checkCandle(close_index-1) == "Doji"))
  1410. {
  1411. if(iHigh(Symbol(),PERIOD_CURRENT,close_index) > iOpen(Symbol(),PERIOD_CURRENT,close_index-1) && iLow(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,close_index-1))
  1412. {
  1413. tp_date_time_sell = 0.0;
  1414. tp_date_time_buy = 0.0;
  1415. // Print("Target line deleted due to in bar ");
  1416. if(object_find("target line") > 0)
  1417. {
  1418. Print("Target line deleted due to in bar ");
  1419. ObjectDelete(0,"target line");
  1420. }
  1421. if(object_find("target line1") > 0)
  1422. {
  1423. ObjectDelete(0,"target line1");
  1424. }
  1425. }
  1426. }
  1427. if(checkCandle(close_index) == "Bullish" && (checkCandle(close_index-1) == "Bullish" || checkCandle(close_index-1) == "Doji"))
  1428. {
  1429. if(iHigh(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,close_index-1) && iLow(Symbol(),PERIOD_CURRENT,close_index) < iOpen(Symbol(),PERIOD_CURRENT,close_index-1))
  1430. {
  1431. // Print("j index is",j," j-1 index is ",j-1);
  1432. tp_date_time_sell = 0.0;
  1433. tp_date_time_buy = 0.0;
  1434. // Print("Target line deleted due to in bar ");
  1435. if(object_find("target line") > 0)
  1436. {
  1437. Print("Target line deleted due to in bar ");
  1438. ObjectDelete(0,"target line");
  1439. }
  1440. if(object_find("target line1") > 0)
  1441. {
  1442. ObjectDelete(0,"target line1");
  1443. }
  1444. }
  1445. }
  1446. double reversalMax = iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx) < iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) ? iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) : iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx);
  1447. // bool snd_con = false;
  1448. //for(int i=close_index-1; i>=1; i--) // second condition of updation
  1449. // {
  1450. // if(iClose(Symbol(),PERIOD_CURRENT,i) < reversalMax)
  1451. // {
  1452. // remove_value_from_structure();
  1453. // }
  1454. // }
  1455. // if(iOpen(Symbol(),PERIOD_CURRENT,1) > iClose(Symbol(),PERIOD_CURRENT,close_index)) // first condition of updation
  1456. {
  1457. if(reversalMax > iLow(Symbol(),PERIOD_CURRENT,1)
  1458. && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_buy != 0.0)
  1459. {
  1460. placeBuyTrade();
  1461. if(object_find("target line") > 0)
  1462. {
  1463. ObjectDelete(0,"target line");
  1464. }
  1465. if(object_find("target line1") > 0)
  1466. {
  1467. ObjectDelete(0,"target line1");
  1468. }
  1469. remove_value_from_structure();
  1470. od_1[m].choch_index_date_time = 0;
  1471. od_1[m].Signal == "";
  1472. od_1[m].reversal_index_date_time = 0;
  1473. od_1[m].choch_index_date_time = 0;
  1474. signal = "";
  1475. Print("buy trade placed in no delay entry condition -------------------------------------------------------------");
  1476. Print("time at which trade is placed : ",TimeCurrent());
  1477. }
  1478. }
  1479. }
  1480. if(od_1[m].EntryCon == 1 && od_1[m].Signal == "sell")
  1481. {
  1482. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1483. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1484. if(checkCandle(close_index) == "Bearish" && (checkCandle(close_index-1) == "Bearish" || checkCandle(close_index-1) == "Doji"))
  1485. {
  1486. if(iHigh(Symbol(),PERIOD_CURRENT,close_index) > iOpen(Symbol(),PERIOD_CURRENT,close_index-1) && iLow(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,close_index-1))
  1487. {
  1488. tp_date_time_sell = 0.0;
  1489. tp_date_time_buy = 0.0;
  1490. // Print("Target line deleted due to in bar ");
  1491. if(object_find("target line") > 0)
  1492. {
  1493. Print("Target line deleted due to in bar ");
  1494. ObjectDelete(0,"target line");
  1495. }
  1496. if(object_find("target line1") > 0)
  1497. {
  1498. ObjectDelete(0,"target line1");
  1499. }
  1500. }
  1501. }
  1502. if(checkCandle(close_index) == "Bullish" && (checkCandle(close_index-1) == "Bullish" || checkCandle(close_index-1) == "Doji"))
  1503. {
  1504. if(iHigh(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,close_index-1) && iLow(Symbol(),PERIOD_CURRENT,close_index) < iOpen(Symbol(),PERIOD_CURRENT,close_index-1))
  1505. {
  1506. // Print("j index is",j," j-1 index is ",j-1);
  1507. tp_date_time_sell = 0.0;
  1508. tp_date_time_buy = 0.0;
  1509. // Print("Target line deleted due to in bar ");
  1510. if(object_find("target line") > 0)
  1511. {
  1512. Print("Target line deleted due to in bar ");
  1513. ObjectDelete(0,"target line");
  1514. }
  1515. if(object_find("target line1") > 0)
  1516. {
  1517. ObjectDelete(0,"target line1");
  1518. }
  1519. }
  1520. }
  1521. double reversalMin = iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx) > iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) ? iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) : iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx);
  1522. // double reversalMin = iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx) > iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) ? iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) : iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx);
  1523. // bool snd_con = false;
  1524. //
  1525. //for(int i=close_index-1; i>=1; i--) // second condition of updation
  1526. // {
  1527. // if(iClose(Symbol(),PERIOD_CURRENT,i) > reversalMin)
  1528. // {
  1529. // remove_value_from_structure();
  1530. // //snd_con = true;
  1531. // }
  1532. // }
  1533. //
  1534. // if(iOpen(Symbol(),PERIOD_CURRENT,1) < iClose(Symbol(),PERIOD_CURRENT,close_index)) // first condition of updation
  1535. {
  1536. if(reversalMin < iHigh(Symbol(),PERIOD_CURRENT,1)
  1537. && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_sell != 0.0)
  1538. {
  1539. placeSellTrade();
  1540. // tp_date_time_sell = 0.0;
  1541. if(object_find("target line") > 0)
  1542. {
  1543. ObjectDelete(0,"target line");
  1544. }
  1545. if(object_find("target line1") > 0)
  1546. {
  1547. ObjectDelete(0,"target line1");
  1548. }
  1549. remove_value_from_structure();
  1550. od_1[m].choch_index_date_time = 0;
  1551. od_1[m].Signal == "";
  1552. od_1[m].reversal_index_date_time = 0;
  1553. od_1[m].choch_index_date_time = 0;
  1554. signal = "";
  1555. Print("sell trade placed in no delay entry condition -------------------------------------------------------------");
  1556. Print("time at which trade is placed : ",TimeCurrent());
  1557. }
  1558. }
  1559. }
  1560. }
  1561. if(indexOfTradePlace > 2)
  1562. {
  1563. int close_index1 = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1564. Check_Inside_bar(close_index1);
  1565. // second condition match
  1566. if(od_1[m].EntryCon == 2 && od_1[m].Signal == "buy")
  1567. {
  1568. if(trend == "uptrend")
  1569. {
  1570. double ib =iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_buy,false);
  1571. for(int p=ib-2; p >= 1; p--)
  1572. {
  1573. if(iHigh(Symbol(),PERIOD_CURRENT,p) > iLow(Symbol(),PERIOD_CURRENT,ib))
  1574. {
  1575. tp_date_time_buy = 0.0;
  1576. if(object_find("target line") > 0)
  1577. {
  1578. ObjectDelete(0,"target line");
  1579. }
  1580. if(object_find("target line1") > 0)
  1581. {
  1582. ObjectDelete(0,"target line1");
  1583. }
  1584. break;
  1585. }
  1586. }
  1587. }
  1588. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1589. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1590. //Print("Reversal Index time is ",od_1[m].reversal_index_date_time," and chock tine is ",od_1[m].choch_index_date_time);
  1591. Check_Inside_bar(reversal_indexx);
  1592. bool snd_con = false;
  1593. double reversalMax = iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx) < iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) ? iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) : iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx);
  1594. for(int i=close_index-1; i>=1; i--) // second condition of updation
  1595. {
  1596. if(iClose(Symbol(),PERIOD_CURRENT,i) < reversalMax)
  1597. {
  1598. snd_con = true;
  1599. //remove_value_from_structure();
  1600. }
  1601. }
  1602. if(iOpen(Symbol(),PERIOD_CURRENT,1) > iClose(Symbol(),PERIOD_CURRENT,close_index) && snd_con == false) // first condition of updation
  1603. {
  1604. if(value_close_high(close_index) == true)
  1605. {
  1606. if(iClose(Symbol(),PERIOD_CURRENT,close_index) > iLow(Symbol(),PERIOD_CURRENT,1)
  1607. && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_buy != 0.0)
  1608. {
  1609. placeBuyTrade();
  1610. if(object_find("target line") > 0)
  1611. {
  1612. ObjectDelete(0,"target line");
  1613. }
  1614. if(object_find("target line1") > 0)
  1615. {
  1616. ObjectDelete(0,"target line1");
  1617. }
  1618. remove_value_from_structure();
  1619. od_1[m].choch_index_date_time = 0;
  1620. od_1[m].Signal == "";
  1621. od_1[m].reversal_index_date_time = 0;
  1622. od_1[m].choch_index_date_time = 0;
  1623. signal = "";
  1624. Print("buy trade placed in Entry condition delay -------------------------------------------------------------");
  1625. Print("time at which trade is placed : ",TimeCurrent());
  1626. }
  1627. }
  1628. }
  1629. }
  1630. if(od_1[m].EntryCon == 2 && od_1[m].Signal == "sell")
  1631. {
  1632. // Print("hi ----- entry condition 2 trend lines in sell case downtrend "," tp_date_time_sell",tp_date_time_sell);
  1633. if(trend == "downtrend")
  1634. {
  1635. // Print("there ----- entry condition 2 trend lines in sell case downtrend "," tp_date_time_sell",tp_date_time_sell);
  1636. double ib =iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_sell,false);
  1637. for(int p=ib-2; p >= 1; p--)
  1638. {
  1639. if(iLow(Symbol(),PERIOD_CURRENT,p) < iHigh(Symbol(),PERIOD_CURRENT,ib))
  1640. {
  1641. tp_date_time_sell = 0.0;
  1642. if(object_find("target line") > 0)
  1643. {
  1644. ObjectDelete(0,"target line");
  1645. }
  1646. if(object_find("target line1") > 0)
  1647. {
  1648. ObjectDelete(0,"target line1");
  1649. }
  1650. break;
  1651. }
  1652. }
  1653. }
  1654. int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false);
  1655. int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false);
  1656. //Print("Reversal Index time is ",od_1[m].reversal_index_date_time," and chock tine is ",od_1[m].choch_index_date_time);
  1657. Check_Inside_bar(reversal_indexx);
  1658. double reversalMin = iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx) > iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) ? iClose(Symbol(),PERIOD_CURRENT,reversal_indexx) : iOpen(Symbol(),PERIOD_CURRENT,reversal_indexx);
  1659. bool snd_con1 = false;
  1660. for(int i=close_index-1; i>=1; i--) // second condition of updation
  1661. {
  1662. if(iClose(Symbol(),PERIOD_CURRENT,i) > reversalMin)
  1663. {
  1664. snd_con1 = true;
  1665. // remove_value_from_structure();
  1666. }
  1667. }
  1668. if(iOpen(Symbol(),PERIOD_CURRENT,1) < iClose(Symbol(),PERIOD_CURRENT,close_index) && snd_con1 == false) // first condition of updation
  1669. {
  1670. if(value_close_low(close_index) == true)
  1671. {
  1672. if(iClose(Symbol(),PERIOD_CURRENT,close_index) < iHigh(Symbol(),PERIOD_CURRENT,1)
  1673. && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_sell != 0.0)
  1674. {
  1675. placeSellTrade();
  1676. if(object_find("target line") > 0)
  1677. {
  1678. ObjectDelete(0,"target line");
  1679. }
  1680. if(object_find("target line1") > 0)
  1681. {
  1682. ObjectDelete(0,"target line1");
  1683. }
  1684. remove_value_from_structure();
  1685. od_1[m].choch_index_date_time = 0;
  1686. od_1[m].Signal == "";
  1687. od_1[m].reversal_index_date_time = 0;
  1688. od_1[m].choch_index_date_time = 0;
  1689. signal = "";
  1690. Print("sell trade placed in entry condition delay -------------------------------------------------------------");
  1691. Print("time at which trade is placed : ",TimeCurrent());
  1692. }
  1693. }
  1694. }
  1695. }
  1696. }
  1697. }
  1698. }
  1699. }
  1700. }
  1701. //+------------------------------------------------------------------+
  1702. //| |
  1703. //+------------------------------------------------------------------+
  1704. bool NewBar()
  1705. {
  1706. static datetime Last_bar ;
  1707. datetime Current_bar = iTime(Symbol(), PERIOD_CURRENT,0);
  1708. if(Current_bar != Last_bar)
  1709. {
  1710. Last_bar = Current_bar;
  1711. return (true);
  1712. }
  1713. else
  1714. {
  1715. return (false);
  1716. }
  1717. }
  1718. //+------------------------------------------------------------------+
  1719. //| |
  1720. //+------------------------------------------------------------------+
  1721. bool object_find(string obj) // to find object placed by user in the chart
  1722. {
  1723. if(ObjectFind(0,obj) >= 0)
  1724. {
  1725. return true;
  1726. }
  1727. return false;
  1728. }
  1729. //+------------------------------------------------------------------+
  1730. //| |
  1731. //+------------------------------------------------------------------+
  1732. string checkCandle(int v) // to check the candle is bullish or bearish
  1733. {
  1734. double close = iClose(Symbol(),PERIOD_CURRENT,v);
  1735. double open = iOpen(Symbol(),PERIOD_CURRENT,v);
  1736. if(close > open)
  1737. {
  1738. return "Bullish";
  1739. }
  1740. else
  1741. if(close < open)
  1742. {
  1743. return "Bearish";
  1744. }
  1745. else
  1746. {
  1747. return "Doji";
  1748. }
  1749. return "empty";
  1750. }
  1751. //+------------------------------------------------------------------+
  1752. //+------------------------------------------------------------------+
  1753. //+------------------------------------------------------------------+