Sen descrición

BOS_CHOCH.mq5 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703
  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. sinput string str = "<><><><><><> Object Name <><><><><><>";
  10. input string object_name = "line";
  11. int ind = 0;
  12. string trend;
  13. bool bearish_found = false;
  14. bool bullish_found = false;
  15. int index_of_last_high = 0;
  16. int index_of_last_low = 0;
  17. double hi;
  18. double lo;
  19. int index_of_low = 0;
  20. int index_of_high = 0;
  21. int high_index=0;
  22. int low_index =0;
  23. double high,low,low1,high1,low2,high2;
  24. int Store_bos_last_index = 0;
  25. //int ind = 0;
  26. bool choch = false;
  27. int index = 0;
  28. //+------------------------------------------------------------------+
  29. //| Expert initialization function |
  30. //+------------------------------------------------------------------+
  31. void Bos(int i)
  32. {
  33. if(trend == "uptrend")
  34. {
  35. high = iHigh(Symbol(),PERIOD_CURRENT,high_index);
  36. high1 = iHigh(Symbol(),PERIOD_CURRENT,i);
  37. if(high1 > high)
  38. {
  39. if(object_find("high") > 0)
  40. {
  41. ObjectDelete(0,"high");
  42. }
  43. high = high1;
  44. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  45. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  46. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  47. ObjectCreate(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high);
  48. ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  49. Store_bos_last_index = i;
  50. int count = (high_index-1) - i;
  51. for(int j=1; j <= count; j++)
  52. {
  53. if(checkCandle(high_index-j) == "Bearish")
  54. {
  55. low = iLow(Symbol(),PERIOD_CURRENT,high_index-j);
  56. bearish_found = true;
  57. }
  58. }
  59. if(bearish_found == true)
  60. {
  61. for(int k=1; k < count; k++)
  62. {
  63. low1 = iLow(Symbol(),PERIOD_CURRENT,high_index - k);
  64. if(low1 <= low)
  65. {
  66. low = low1;
  67. index_of_low =high_index- k;
  68. }
  69. }
  70. if(object_find("low") > 0)
  71. {
  72. ObjectDelete(0,"low");
  73. }
  74. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  75. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  76. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  77. bearish_found = false;
  78. }
  79. high_index = i;
  80. }
  81. }
  82. if(trend == "downtrend")
  83. {
  84. low = iLow(Symbol(),PERIOD_CURRENT,low_index);
  85. low1 = iLow(Symbol(),PERIOD_CURRENT,i);
  86. if(low1 < low)
  87. {
  88. if(object_find("low") > 0)
  89. {
  90. ObjectDelete(0,"low");
  91. }
  92. low = low1;
  93. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  94. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  95. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  96. ObjectCreate(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low);
  97. ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos");
  98. Store_bos_last_index = i;
  99. int count = (low_index-1) - i;
  100. for(int j=1; j <= count; j++)
  101. {
  102. if(checkCandle(low_index-j) == "Bullish")
  103. {
  104. high = iHigh(Symbol(),PERIOD_CURRENT,low_index-j);
  105. bullish_found = true;
  106. }
  107. }
  108. if(bullish_found == true)
  109. {
  110. for(int k=1; k < count; k++)
  111. {
  112. high1 = iHigh(Symbol(),PERIOD_CURRENT,low_index - k);
  113. if(high1 >= high)
  114. {
  115. high = high1;
  116. index_of_high = low_index - k;
  117. }
  118. }
  119. if(object_find("high") > 0)
  120. {
  121. ObjectDelete(0,"high");
  122. }
  123. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  124. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  125. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  126. bullish_found = false;
  127. }
  128. low_index = i;
  129. }
  130. }
  131. }
  132. //+------------------------------------------------------------------+
  133. //| |
  134. //+------------------------------------------------------------------+
  135. void Entry_Action_1_down(int Store_bos_last_index, int i,int diff)
  136. {
  137. // i is the index of the choch
  138. for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
  139. {
  140. diff++;
  141. if(checkCandle(j) == "Bullish")
  142. {
  143. //Print("bullish found at index ",j);
  144. ind = j; // reversal candle index
  145. bullish_found = true;
  146. break;
  147. }
  148. }
  149. Print("condition satisfied : ",check_values_less_than_choch_high(diff,i));
  150. Print("choch candle open is ",iOpen(Symbol(),PERIOD_CURRENT,i));
  151. Print("reversal candle open is ",iOpen(Symbol(),PERIOD_CURRENT,ind));
  152. if(check_values_less_than_choch_high(diff,i) == true)
  153. {
  154. if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i))
  155. {
  156. Print("Place buy order -----------------------------------------------------------------------: ");
  157. }
  158. }
  159. //Print(diff);
  160. if(bullish_found == true)
  161. {
  162. 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));
  163. 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));
  164. ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  165. ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  166. 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));
  167. 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));
  168. ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  169. ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  170. diff = 0;
  171. bullish_found = false;
  172. }
  173. }
  174. //+------------------------------------------------------------------+
  175. //| |
  176. //+------------------------------------------------------------------+
  177. void Entry_Action_1_up(int Store_bos_last_index, int i,int diff)
  178. {
  179. for(int j=Store_bos_last_index+1; j < iBars(Symbol(),PERIOD_CURRENT); j++)
  180. {
  181. diff++;
  182. if(checkCandle(j) == "Bearish")
  183. {
  184. ind = j; // reversal candle index
  185. bearish_found = true;
  186. break;
  187. }
  188. }
  189. Print("diff is ", diff);
  190. Print("condition satisfied : ",check_values_less_than_choch_low(diff,i));
  191. Print("choch candle open is ",iOpen(Symbol(),PERIOD_CURRENT,i));
  192. Print("reversal candle open is ",iOpen(Symbol(),PERIOD_CURRENT,ind));
  193. if(check_values_less_than_choch_low(diff,i) == true)
  194. {
  195. if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i))
  196. {
  197. Print("Place sell order -----------------------------------------------------------------------: ");
  198. }
  199. }
  200. if(bearish_found == true)
  201. {
  202. 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));
  203. 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));
  204. ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  205. ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue);
  206. 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));
  207. 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));
  208. ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  209. ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT);
  210. bearish_found = false;
  211. }
  212. }
  213. //+------------------------------------------------------------------+
  214. //| |
  215. //+------------------------------------------------------------------+
  216. bool check_values_less_than_choch_high(int diff,int i) // downtrend
  217. {
  218. bool found = false;
  219. int value = (diff + i) - 1;
  220. for(int k=value; k>i; k--)
  221. {
  222. //Print("high values ",iHigh(Symbol(),PERIOD_CURRENT,k));
  223. //Print("close values ",iClose(Symbol(),PERIOD_CURRENT,i));
  224. if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i))
  225. {
  226. found = true;
  227. }
  228. }
  229. if(found == true)
  230. {
  231. return false;
  232. }
  233. return true;
  234. }
  235. //+------------------------------------------------------------------+
  236. //| |
  237. //+------------------------------------------------------------------+
  238. bool check_values_less_than_choch_low(int diff,int i) // uptrend
  239. {
  240. bool found = false;
  241. int value = (diff + i) - 1; // from which it start to check value is less in index
  242. Print("value to be start is ",value);
  243. for(int k=value; k>i; k--)
  244. {
  245. if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i))
  246. {
  247. found = true;
  248. }
  249. }
  250. if(found == true)
  251. {
  252. return false;
  253. }
  254. return true;
  255. }
  256. //+------------------------------------------------------------------+
  257. //| |
  258. //+------------------------------------------------------------------+
  259. void choch(int i)
  260. {
  261. if(trend == "uptrend")
  262. {
  263. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  264. if(close < low)
  265. {
  266. ObjectCreate(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  267. ObjectSetString(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  268. ObjectCreate(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_DOWN,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+100*Point());
  269. ObjectSetInteger(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrRed);
  270. Print("last bos index is ",Store_bos_last_index);
  271. int diff1 = Store_bos_last_index - (i);
  272. Print("diff between bos and last choch is ",diff1);
  273. Entry_Action_1_up(Store_bos_last_index,i,diff1);
  274. low = iLow(Symbol(),PERIOD_CURRENT,i);
  275. low_index = i;
  276. if(object_find("low") > 0)
  277. {
  278. ObjectDelete(0,"low");
  279. }
  280. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  281. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  282. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  283. // Entry_Action_1_up(Store_bos_last_index,i);
  284. Print("low update due to choch : ", low);
  285. trend = "downtrend";
  286. Print("choch at uptrend index --- ", iTime(Symbol(),PERIOD_CURRENT,i));
  287. }
  288. }
  289. if(trend == "downtrend")
  290. {
  291. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  292. if(close > high)
  293. {
  294. ObjectCreate(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  295. ObjectSetString(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch");
  296. ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point());
  297. ObjectSetInteger(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen);
  298. int diff = Store_bos_last_index - (i);
  299. Entry_Action_1_down(Store_bos_last_index,i,diff);
  300. high = iHigh(Symbol(),PERIOD_CURRENT,i);
  301. high_index = i;
  302. if(object_find("high") > 0)
  303. {
  304. ObjectDelete(0,"high");
  305. }
  306. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  307. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  308. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  309. trend = "uptrend";
  310. Print("high is update due to choch : ", high);
  311. Print("choch at downtrend index ---- ", iTime(Symbol(),PERIOD_CURRENT,i));
  312. }
  313. }
  314. }
  315. //+------------------------------------------------------------------+
  316. //| |
  317. //+------------------------------------------------------------------+
  318. void third_Condition(int i)
  319. {
  320. if(trend == "uptrend")
  321. {
  322. low2 = iLow(Symbol(),PERIOD_CURRENT,i);
  323. if(low2 < low)
  324. {
  325. ObjectCreate(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i));
  326. ObjectSetString(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  327. low = low2;
  328. //low_index = i;
  329. if(object_find("low") > 0)
  330. {
  331. Print("object deleted ");
  332. ObjectDelete(0,"low");
  333. }
  334. ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low);
  335. ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true);
  336. ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed);
  337. Print("low update due to third condition",low," time of the candle is ",iTime(Symbol(),PERIOD_CURRENT,i));
  338. }
  339. }
  340. if(trend == "downtrend")
  341. {
  342. high2 = iHigh(Symbol(),PERIOD_CURRENT,i);
  343. if(high2 > high)
  344. {
  345. ObjectCreate(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i));
  346. ObjectSetString(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C");
  347. high = high2;
  348. //high_index = i;
  349. if(object_find("high") > 0)
  350. {
  351. ObjectDelete(0,"high");
  352. }
  353. ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high);
  354. ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true);
  355. ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue);
  356. Print("high update due to third condition",high);
  357. }
  358. }
  359. }
  360. //+------------------------------------------------------------------+
  361. //| |
  362. //+------------------------------------------------------------------+
  363. void foo(int value)
  364. {
  365. int l = 0;
  366. for(int i=value-1; i > 0; i--)
  367. {
  368. //Print("hi");
  369. //if(l < 2)
  370. {
  371. Bos(i);
  372. choch(i);
  373. third_Condition(i);
  374. l++;
  375. }
  376. //Bos(i);
  377. }
  378. }
  379. //+------------------------------------------------------------------+
  380. //| |
  381. //+------------------------------------------------------------------+
  382. int OnInit()
  383. {
  384. object_find(object_name);
  385. if(object_find(object_name) == true)
  386. {
  387. datetime time_of_candle = (datetime)ObjectGetInteger(0,"line",OBJPROP_TIME,0);
  388. index = iBarShift(Symbol(), PERIOD_CURRENT, time_of_candle, false);
  389. checkCandle(index);
  390. if(checkCandle(index) == "Bullish")
  391. {
  392. trend = "uptrend";
  393. }
  394. if(checkCandle(index) == "Bearish")
  395. {
  396. trend = "downtrend";
  397. }
  398. high = iHigh(Symbol(),PERIOD_CURRENT,index);
  399. low = iLow(Symbol(),PERIOD_CURRENT,index);
  400. high_index = index;
  401. low_index = index;
  402. foo(index);
  403. }
  404. else
  405. {
  406. Print("Object Not Found");
  407. }
  408. return(INIT_SUCCEEDED);
  409. }
  410. //+------------------------------------------------------------------+
  411. //| Expert deinitialization function |
  412. //+------------------------------------------------------------------+
  413. void OnDeinit(const int reason)
  414. {
  415. //---
  416. }
  417. //+------------------------------------------------------------------+
  418. //| Expert tick function |
  419. //+------------------------------------------------------------------+
  420. void OnTick()
  421. {
  422. }
  423. //+------------------------------------------------------------------+
  424. //| |
  425. //+------------------------------------------------------------------+
  426. bool NewBar()
  427. {
  428. static datetime Last_bar ;
  429. datetime Current_bar = iTime(Symbol(), PERIOD_CURRENT,0);
  430. if(Current_bar != Last_bar)
  431. {
  432. Last_bar = Current_bar;
  433. return (true);
  434. }
  435. else
  436. {
  437. return (false);
  438. }
  439. }
  440. //+------------------------------------------------------------------+
  441. //| |
  442. //+------------------------------------------------------------------+
  443. bool object_find(string obj) // to find object placed by user in the chart
  444. {
  445. if(ObjectFind(0,obj) >= 0)
  446. {
  447. return true;
  448. }
  449. return false;
  450. }
  451. //+------------------------------------------------------------------+
  452. //| |
  453. //+------------------------------------------------------------------+
  454. string checkCandle(int i) // to check the candle is bullish or bearish
  455. {
  456. double close = iClose(Symbol(),PERIOD_CURRENT,i);
  457. double open = iOpen(Symbol(),PERIOD_CURRENT,i);
  458. if(close > open)
  459. {
  460. return "Bullish";
  461. }
  462. else
  463. if(close < open)
  464. {
  465. return "Bearish";
  466. }
  467. return "empty";
  468. }
  469. //+------------------------------------------------------------------+
  470. //+------------------------------------------------------------------+