//+------------------------------------------------------------------+ //| MK_BOS_CHOCH.mq5 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include CTrade trade; #define orderNum 200 enum lotcalculator { fix, //Fixed Lot Size rsk, //Risk Percentage }; struct tradeOrder { datetime choch_index_date_time; datetime reversal_index_date_time; string Signal; datetime Time_OF_Candle; datetime Time_of_candle_For_trade; int EntryCon; datetime bosTime; datetime SecondLastbosTime; tradeOrder() { choch_index_date_time = 0; Signal = ""; reversal_index_date_time = 0; Time_OF_Candle = 0.0; Time_of_candle_For_trade = 0.0; EntryCon = 0.0; bosTime = 0.0; SecondLastbosTime = 0.0; } }; tradeOrder od_1[orderNum]; bool entry_condition_candle_1_met = false; enum entryCondition { one, // Entry A1 two, // Entry A2 }; // input entryCondition Entry_condition_1 = one; // Entry Condition sinput string Set_Object_Name = "<><><><><><> Set Object Name <><><><><><>"; input string object_name = "line"; sinput string str1 = "<><><><><><> Set time of vertical line <><><><><><>"; input datetime inpTime = 0;//First Line Draw time sinput string str2 = "<><><><><><> General Settings <><><><><><>"; input int magic_no = 123; // Magic no input double lot_size = 0.1; input lotcalculator lot_calculator = fix; //Lot Size Calculator input bool Entry_condition_two_Enable = false; // Enable A1 Entry input bool Entry_condition_one_Enable = false; // Enable A2 Entry input int spread = 10; input double risk = 1; //Risk in Percentage % input double stoploss = 20; // Stoploss Pips buffer from choch candle string trend = " "; string signal = ""; datetime reversal_bar_time = 0; datetime choch_index_time ; datetime index_of_low_time; datetime index_of_high_time; datetime store_last_bos_index_time; datetime store_Second_last_bos_index_time; datetime time_of_candle = 0.0; datetime time_to_place_trade = 0.0; datetime high_index_time; datetime low_index_time; datetime tp_date_time_buy; datetime tp_date_time_sell; datetime Last_bos_before_reversal; double hi; double lo; double high,low,low1,high1,low2,high2; double HIGH; double LOW; bool bearish_found = false; bool bullish_found = false; bool choch_at_index = false; int choch_index = 0; int reversal_candle_index = 0; int ind = 0; int index_of_last_high = 0; int index_of_last_low = 0; int index_of_low = 0; int index_of_high = 0; int high_index=0; int low_index =0; int Store_bos_last_index = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void Bos(int i) { int save_bullish_index = 0; int save_bearish_index = 0; Print("trend is ",trend," high is ",high," low is ",low," low index is ",iTime(Symbol(),PERIOD_CURRENT,low_index)," high index is ",iTime(Symbol(),PERIOD_CURRENT,high_index)); if(trend == "uptrend") { high1 = iHigh(Symbol(),PERIOD_CURRENT,i); double close = iClose(Symbol(),PERIOD_CURRENT,i); if(close > high) { high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); for(int j = i ; j < Store_bos_last_index ; j++) { if(checkCandle(j) == "Bearish") { save_bullish_index = j; if(object_find("high") > 0) { //Print(" in boss"); ObjectDelete(0,"high"); } high = high1; ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line1"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point()); ObjectSetString(0,"line1"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); store_Second_last_bos_index_time = store_last_bos_index_time; store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); //low = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); low = iLow(Symbol(),PERIOD_CURRENT,j); bearish_found = true; index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,j); break; } } if(bearish_found == true) { for(int k=save_bullish_index; k > i ; k--) { low1 = iLow(Symbol(),PERIOD_CURRENT,k); if(low1 < low) { low = low1; index_of_low_time = iTime(Symbol(),PERIOD_CURRENT,k); bearish_found = false; } } if(object_find("low") > 0) { if(ObjectDelete(0,"low")) { //Print("object deleted :"); } } index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, index_of_low_time, false); ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_RAY_LEFT,false); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); } high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); } } if(trend == "downtrend") { low1 = iLow(Symbol(),PERIOD_CURRENT,i); double close1 = iClose(Symbol(),PERIOD_CURRENT,i); if(close1 < low) { low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); for(int j= i ; j < Store_bos_last_index ; j++) { if(checkCandle(j) == "Bullish") { save_bullish_index = j; if(object_find("low") > 0) { ObjectDelete(0,"low"); } low = low1; ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); ObjectCreate(0,"line2"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low); ObjectSetString(0,"line2"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); store_Second_last_bos_index_time = store_last_bos_index_time; store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); high = iHigh(Symbol(),PERIOD_CURRENT,j); bullish_found = true; index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,j); break; } } if(bullish_found == true) { for(int k=save_bullish_index; k > i ; k--) { high1 = iHigh(Symbol(),PERIOD_CURRENT,k); if(high1 > high) { high = high1; index_of_high_time = iTime(Symbol(),PERIOD_CURRENT,k); bullish_found = false; } } if(object_find("high") > 0) { // Print(" in boss"); ObjectDelete(0,"high"); } index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, index_of_high_time, false); ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); bullish_found = false; } low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_1_down(int Store_bos_last_index1, int i,int diff) { ind = Store_bos_last_index1 +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); bool addtional_condition = true; for(int j=Store_bos_last_index1-1; j>i+1; j--) { if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iClose(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_buy = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iOpen(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_buy = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } } if(/*check_values_less_than_choch_high(ind,i) == true && */addtional_condition == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i)) { // Print(" bos is at time ",store_last_bos_index_time," Seond last bos is ",store_Second_last_bos_index_time); signal = "buy"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); } } ObjectCreate(0,"line14"+(string)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)); ObjectCreate(0,"line15"+(string)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)); ObjectSetInteger(0,"line14"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line15"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line16"+(string)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)); ObjectCreate(0,"line17"+(string)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)); ObjectSetInteger(0,"line16"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line17"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); diff = 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_2_down(int Store_bos_last_index1, int i,int diff) { ind = Store_bos_last_index1 +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); bool addtional_condition = true; for(int j=Store_bos_last_index1-1; j>i+1; j--) { if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iClose(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_buy = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iOpen(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_buy = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } } if(/*check_values_less_than_choch_high(ind,i) == true && */addtional_condition == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i)) { // Print(" bos is at time ",store_last_bos_index_time," Seond last bos is ",store_Second_last_bos_index_time); signal = "buy"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); } } ObjectCreate(0,"line14"+(string)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)); ObjectCreate(0,"line15"+(string)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)); ObjectSetInteger(0,"line14"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line15"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line16"+(string)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)); ObjectCreate(0,"line17"+(string)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)); ObjectSetInteger(0,"line16"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line17"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); diff = 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Check_Inside_bar(int inex) { // Print("-----------------------------------------------------------------------------------------------------------------------------------"); for(int j=inex+1; j>=1; j--) { // Print(" i am checking inside bar "); if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iClose(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; // Print("Target line deleted due to in bar "); if(object_find("target line") > 0) { // Print("Target line deleted due to in bar "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iOpen(Symbol(),PERIOD_CURRENT,j-1)) { // Print("j index is",j," j-1 index is ",j-1); tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; // Print("Target line deleted due to in bar "); if(object_find("target line") > 0) { // Print("Target line deleted due to in bar "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_1_up(int Store_bos_last_index1, int i,int diff) { ind = Store_bos_last_index1 +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); bool addtional_condition = true; for(int j=Store_bos_last_index1-1; j>i+1; j--) { if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iClose(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iOpen(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } } if(/*check_values_less_than_choch_low(ind,i) == true &&*/ addtional_condition == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i)) { //Print(" bos is at time ",store_last_bos_index_time," Seond last bos is ",store_Second_last_bos_index_time); signal = "sell"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); } } ObjectCreate(0,"line10"+(string)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)); ObjectCreate(0,"line11"+(string)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)); ObjectSetInteger(0,"line10"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line11"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line12"+(string)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)); ObjectCreate(0,"line13"+(string)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)); ObjectSetInteger(0,"line12"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line13"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_2_up(int Store_bos_last_index1, int i,int diff) { ind = Store_bos_last_index1 +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); bool addtional_condition = true; for(int j=Store_bos_last_index1-1; j>i+1; j--) { if(checkCandle(j) == "Bearish" && (checkCandle(j-1) == "Bearish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iOpen(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iClose(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } if(checkCandle(j) == "Bullish" && (checkCandle(j-1) == "Bullish" || checkCandle(j-1) == "Doji")) { if(iHigh(Symbol(),PERIOD_CURRENT,j) >= iClose(Symbol(),PERIOD_CURRENT,j-1) && iLow(Symbol(),PERIOD_CURRENT,j) <= iOpen(Symbol(),PERIOD_CURRENT,j-1)) { tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } addtional_condition = false; } } } if(/*check_values_less_than_choch_low(ind,i) == true && */addtional_condition == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i)) { // Print(" bos is at time ",store_last_bos_index_time," Seond last bos is ",store_Second_last_bos_index_time); signal = "sell"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); } } ObjectCreate(0,"line10"+(string)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)); ObjectCreate(0,"line11"+(string)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)); ObjectSetInteger(0,"line10"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line11"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line12"+(string)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)); ObjectCreate(0,"line13"+(string)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)); ObjectSetInteger(0,"line12"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line13"+(string)iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool check_values_less_than_choch_high(int iind,int i) // downtrend { for(int k=iind; k>i; k--) { if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool check_values_less_than_choch_high1(int iind,int i) // downtrend { for(int k=iind; k>i; k--) { if(iHigh(Symbol(),PERIOD_CURRENT,k) > iClose(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool check_values_less_than_choch_low(int iind,int i) // uptrend { for(int k=iind; k>i; k--) { if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool check_values_less_than_choch_low1(int iind,int i) // uptrend { for(int k=iind; k>i; k--) { if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void choch(int i) { HIGH = 0.0; LOW = 0.0; if(trend == "uptrend") { double close = iClose(Symbol(),PERIOD_CURRENT,i); if(close < low) { remove_value_from_structure(); choch_at_index = true; ObjectCreate(0,"line3"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)); ObjectSetString(0,"line3"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch"); ObjectCreate(0,"line8"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_DOWN,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+100*Point()); ObjectSetInteger(0,"line8"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrRed); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); int diff1 = Store_bos_last_index - (i); // condition on 1st candle if(Entry_condition_one_Enable) { Entry_Action_1_up(Store_bos_last_index,i,diff1); } low = iLow(Symbol(),PERIOD_CURRENT,i); low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); low_index = i; if(object_find("low") > 0) { ObjectDelete(0,"low"); } ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); trend = "downtrend"; int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); chock_index++; datetime lastChochTimeUp = iTime(Symbol(),PERIOD_CURRENT,chock_index); HIGH = iHigh(Symbol(),PERIOD_CURRENT,chock_index); // save high and low of the chock prev index to compare LOW = iLow(Symbol(),PERIOD_CURRENT,chock_index); if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } 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)); ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen); if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } 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)); ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen); choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); int chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); bool condition_not_match = false; for(int p=chock_index - 2 ; p > chock_index1; p--) { if(iLow(Symbol(),PERIOD_CURRENT,p) < HIGH) { condition_not_match = true; } } if(condition_not_match == true) { HIGH = 0.0; LOW = 0.0; tp_date_time_sell = 0.0; condition_not_match = false; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } else { tp_date_time_sell = lastChochTimeUp; } //------------------------------------------------------------------------------------------------------------------------------------------------------------------- if(signal == "sell") { time_to_place_trade = 0.0; int current_time_frame = Period(); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1,store_last_bos_index_time,store_Second_last_bos_index_time); } signal = ""; // condition on 2st candle if(Entry_condition_two_Enable) { Entry_Action_2_up(Store_bos_last_index,i,diff1); } low = iLow(Symbol(),PERIOD_CURRENT,i); low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); low_index = i; if(object_find("low") > 0) { ObjectDelete(0,"low"); } ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); trend = "downtrend"; if(signal == "sell") { time_to_place_trade = 0.0; int current_time_frame = Period(); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2,store_last_bos_index_time,store_Second_last_bos_index_time); } signal = ""; } } if(trend == "downtrend") { double close = iClose(Symbol(),PERIOD_CURRENT,i); if(close > high) { remove_value_from_structure(); choch_at_index = true; ObjectCreate(0,"line4"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+60*Point()); ObjectSetString(0,"line4"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch"); ObjectCreate(0,"line7"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point()); ObjectSetInteger(0,"line7"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJPROP_COLOR,clrGreen); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); int diff = Store_bos_last_index - (i); if(Entry_condition_one_Enable) { Entry_Action_1_down(Store_bos_last_index,i,diff); } high = iHigh(Symbol(),PERIOD_CURRENT,i); high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false); high_index = i; if(object_find("high") > 0) { //Print(" in boss"); ObjectDelete(0,"high"); } ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); trend = "uptrend"; int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); chock_index++; datetime t = iTime(Symbol(),PERIOD_CURRENT,chock_index); HIGH = iHigh(Symbol(),PERIOD_CURRENT,chock_index); // save high and low of the chock prev index to compare LOW = iLow(Symbol(),PERIOD_CURRENT,chock_index); if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } 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)); ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen); if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } 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)); ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen); choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); int chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); bool condition_not_match = false; for(int p=chock_index - 2 ; p > chock_index1; p--) { if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW) { condition_not_match = true; } } if(condition_not_match == true) { // Print("line target deleted :"); HIGH = 0.0; LOW = 0.0; tp_date_time_buy = 0.0; condition_not_match = false; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } else { tp_date_time_buy = t; } if(signal == "buy") { time_to_place_trade = 0.0; int current_time_frame = Period(); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1,store_last_bos_index_time,store_Second_last_bos_index_time); } signal = ""; if(Entry_condition_two_Enable) { Entry_Action_2_down(Store_bos_last_index,i,diff); } high = iHigh(Symbol(),PERIOD_CURRENT,i); high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false); high_index = i; if(object_find("high") > 0) { // Print(" in boss"); ObjectDelete(0,"high"); } ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); trend = "uptrend"; if(signal == "buy") { time_to_place_trade = 0.0; int current_time_frame = Period(); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2,store_last_bos_index_time,store_Second_last_bos_index_time); } signal = ""; } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void bos2(int i) { bool cnd; bool candle_bullish = false; bool candle_bearish = false; double find_high = 0.0; datetime find_high_time = 0.0; int save_bullish_index = 0; int save_bearish_index = 0; double find_low = 0.0; datetime find_low_time = 0.0; if(trend == "downtrend") { choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index) { cnd = false; } else { cnd = true; } if(choch_index_time > store_last_bos_index_time) { for(int m=choch_index; m>i; m--) { if(checkCandle(m) == "Bullish") { save_bullish_index = m; candle_bullish = true; break; } } find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index); find_high_time = iTime(Symbol(),PERIOD_CURRENT,save_bullish_index); // here is the addition for(int m=save_bullish_index; m>i; m--) { double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m); if(find_high < find_high1) { find_high = find_high1; find_high_time = iTime(Symbol(),PERIOD_CURRENT,m); } } for(int j=choch_index; j>=i; j--) { if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i)) { cnd = false; } } } if(choch_index_time < store_last_bos_index_time) { for(int m=Store_bos_last_index; m>i; m--) { if(checkCandle(m) == "Bullish") { save_bullish_index = m; candle_bullish = true; break; } } find_high = iHigh(Symbol(),PERIOD_CURRENT,save_bullish_index); find_high_time = iTime(Symbol(),PERIOD_CURRENT,save_bullish_index); // here is the addition for(int m=save_bullish_index; m>i; m--) { double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m); if(find_high < find_high1) { find_high = find_high1; find_high_time = iTime(Symbol(),PERIOD_CURRENT,m); } } for(int j=Store_bos_last_index; j>=i; j--) { if(iClose(Symbol(),PERIOD_CURRENT,j) < iClose(Symbol(),PERIOD_CURRENT,i) || iLow(Symbol(),PERIOD_CURRENT,j) < iLow(Symbol(),PERIOD_CURRENT,i)) { cnd = false; } } } if(cnd == true && candle_bullish == true) { if(object_find("high") > 0) { // Print(" in boss"); ObjectDelete(0,"high"); } high = find_high; high_index_time = find_high_time; // here is the addition index_of_high = iBarShift(Symbol(), PERIOD_CURRENT, find_high_time, false); ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_high),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); if(object_find("low") > 0) { ObjectDelete(0,"low"); } low = iLow(Symbol(),PERIOD_CURRENT,i); ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); ObjectCreate(0,"line2"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low); ObjectSetString(0,"line2"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); store_Second_last_bos_index_time = store_last_bos_index_time; store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); cnd = false; candle_bullish = false; } } //------- if(trend == "uptrend") { choch_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); if(i+1 == choch_index || i+1 == Store_bos_last_index || i == choch_index || i == Store_bos_last_index) { cnd = false; } else { cnd = true; } if(choch_index_time < store_last_bos_index_time) { for(int m=Store_bos_last_index; m>i; m--) { if(checkCandle(m) == "Bearish") { candle_bearish = true; save_bearish_index = m; break; } } find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index); find_low_time = iTime(Symbol(),PERIOD_CURRENT,save_bearish_index); // here is the addition for(int m=save_bearish_index; m>i; m--) { double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m); if(find_low > find_low1) { find_low = find_low1; find_low_time = iTime(Symbol(),PERIOD_CURRENT,m); } } for(int j=Store_bos_last_index; j>=i; j--) { if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i)) { cnd = false; } } } if(choch_index_time > store_last_bos_index_time) { for(int m=choch_index; m>i; m--) { if(checkCandle(m) == "Bearish") { candle_bearish = true; save_bearish_index = m; break; } } find_low = iLow(Symbol(),PERIOD_CURRENT,save_bearish_index); find_low_time = iTime(Symbol(),PERIOD_CURRENT,save_bearish_index); // here is the addition for(int m=save_bearish_index; m>i; m--) { double find_low1 = iLow(Symbol(),PERIOD_CURRENT,m); find_low_time = iTime(Symbol(),PERIOD_CURRENT,m); if(find_low > find_low1) { find_low = find_low1; find_low_time = iTime(Symbol(),PERIOD_CURRENT,m); } } for(int j=choch_index; j>=i; j--) { if(iClose(Symbol(),PERIOD_CURRENT,j) > iClose(Symbol(),PERIOD_CURRENT,i) || iHigh(Symbol(),PERIOD_CURRENT,j) > iHigh(Symbol(),PERIOD_CURRENT,i)) { cnd = false; } } } if(cnd == true && candle_bearish == true) { if(object_find("low") > 0) { ObjectDelete(0,"low"); } low = find_low; low_index_time = find_low_time; // here is the addition index_of_low = iBarShift(Symbol(), PERIOD_CURRENT, find_low_time, false); ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,index_of_low),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); if(object_find("high") > 0) { // Print(" in boss"); ObjectDelete(0,"high"); } high = iHigh(Symbol(),PERIOD_CURRENT,i); ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); ObjectCreate(0,"line1"+(string)iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point()); ObjectSetString(0,"line1"+(string)iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); store_Second_last_bos_index_time = store_last_bos_index_time; store_last_bos_index_time = iTime(Symbol(),PERIOD_CURRENT,i); Store_bos_last_index = iBarShift(Symbol(), PERIOD_CURRENT, store_last_bos_index_time, false); high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false); cnd = false; candle_bearish = false; } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void third_Condition(int i) { if(trend == "uptrend") { low2 = iLow(Symbol(),PERIOD_CURRENT,i); high2 = iHigh(Symbol(),PERIOD_CURRENT,i); if(low2 < low) { //ObjectCreate(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)); // ObjectSetString(0,"line5"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C"); low = low2; low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); low_index = i; // addtion to be minus if(object_find("low") > 0) { ObjectDelete(0,"low"); } ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); } if(high2 > high) { // Print("high 2 is ",high2," high is ",high); // ObjectCreate(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)); // ObjectSetString(0,"line51"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C"); high = high2; high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); high_index = iBarShift(Symbol(), PERIOD_CURRENT, high_index_time, false); // high_index = i; // addtion to be minus if(object_find("high") > 0) { // Print("Object find "); ObjectDelete(0,"high"); } if(ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high2,iTime(Symbol(),PERIOD_CURRENT,0),high2)) { //Print("Object created: "); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); } } } if(trend == "downtrend") { high2 = iHigh(Symbol(),PERIOD_CURRENT,i); low2 = iLow(Symbol(),PERIOD_CURRENT,i); if(high2 > high) { // ObjectCreate(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)); // ObjectSetString(0,"line6"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C"); high = high2; high_index_time = iTime(Symbol(),PERIOD_CURRENT,i); high_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); high_index = i; // addtion to be minus if(object_find("high") > 0) { // Print(" in boss"); ObjectDelete(0,"high"); } ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); } if(low2 < low) { // ObjectCreate(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)); // ObjectSetString(0,"line61"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"3_C"); low = low2; low_index_time = iTime(Symbol(),PERIOD_CURRENT,i); low_index = iBarShift(Symbol(), PERIOD_CURRENT, low_index_time, false); low_index = i; // addtion to be minus if(object_find("low") > 0) { ObjectDelete(0,"low"); } ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,i),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void store_value_in_structure(datetime chock_time,datetime iind,string signal1,datetime time_of_candle1,datetime time_to_place_trade1, int entry, datetime bostime, datetime sndbostime) { for(int l=0; l<200; l++) { if(od_1[l].choch_index_date_time == 0) { od_1[l].choch_index_date_time = chock_time; od_1[l].reversal_index_date_time = iind; od_1[l].Signal = signal1; od_1[l].Time_OF_Candle = time_of_candle1; od_1[l].Time_of_candle_For_trade = time_to_place_trade1; od_1[l].EntryCon = entry; od_1[l].bosTime = bostime; od_1[l].SecondLastbosTime = sndbostime; //Print("added value of chock in structure ---------------",od_1[l].choch_index_date_time); break; } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void remove_value_from_structure() { for(int l=0; l<200; l++) { if(od_1[l].choch_index_date_time != 0) { // Print("chock value removed from structure and chock time is ---------- ",od_1[l].choch_index_date_time); od_1[l].choch_index_date_time = 0; od_1[l].reversal_index_date_time = 0; od_1[l].Signal = ""; od_1[l].Time_OF_Candle = 0; od_1[l].Time_of_candle_For_trade = 0; } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_strategy(int value) { for(int i=value; i > 0; i--) { Print("time is ",iTime(Symbol(),PERIOD_CURRENT,i)); Bos(i); //bos2(i); choch(i); third_Condition(i); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void placeBuyTrade() { double sell_SL = 0,sell_Tp = 0, openPrice = 0,buySL = 0, buyTp = 0; openPrice = SymbolInfoDouble(Symbol(),SYMBOL_ASK); double Ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK); int ch = iBarShift(Symbol(), PERIOD_CURRENT,choch_index_time,false); // get high of chock index buySL = iLow(Symbol(),PERIOD_CURRENT,ch) - stoploss *10 * Point(); int tp = iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_buy,false); buyTp = iLow(Symbol(),PERIOD_CURRENT,tp); double distance = (Ask - buySL)/Point(); if((buyTp-Ask)/Point() > SymbolInfoInteger(Symbol(),SYMBOL_SPREAD)) { if(trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,getlot(distance),Ask,buySL,buyTp,"Buy Trade Placed")) { Print("Buy Trade Placed: ",trade.ResultOrder()); } else { Print("Error in placing Buy: "+Symbol()+" ",GetLastError()); } } else { Print(" Trade is not placed due to spread : "); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double getlot(double stop_loss) { Print("Tick Value: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)); Print("Tick Size: ",SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)); double modeTickV=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE),modeTickS=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); double pipvalue = NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point()))*10),2); pipvalue = pipvalue / 10; double lotSize = lot_size; if(lot_calculator==rsk) //calculating risk { double riskamount=(risk/100)*AccountInfoDouble(ACCOUNT_BALANCE); double pipvalue_required=riskamount/stop_loss; lotSize = pipvalue_required/pipvalue; int roundDigit=0; double step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); while(step<1) { roundDigit++; step=step*10; } Print("Round Digits:",roundDigit); lotSize = NormalizeDouble(lotSize,roundDigit); // } Print("Lot Size: ",lotSize); if(lotSize > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX)) { lotSize=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); } else if(lotSize SymbolInfoInteger(Symbol(),SYMBOL_SPREAD)) { if(trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,getlot(distance),Bid,sell_SL,sell_Tp,"Sell Trade Placed")) { Print("Sell Trade PLaced: ",trade.ResultOrder()); } else { Print("Error in placing Sell: "+Symbol()+" ",GetLastError()); } } else { Print(" sell trade is not placed due to spread"); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { trade.SetExpertMagicNumber(magic_no); trade.SetDeviationInPoints(10); trade.SetTypeFilling(ORDER_FILLING_IOC); trade.LogLevel(LOG_LEVEL_ALL); trade.SetAsyncMode(false); int idx = 0; int user_input_index = iBarShift(Symbol(), PERIOD_CURRENT,inpTime, false); if(ObjectCreate(0,"line",OBJ_VLINE,0,inpTime,iLow(Symbol(),PERIOD_CURRENT,user_input_index))) { Print("vertical line created on chart : "); } else { Print("error in creating line : "); } object_find(object_name); if(object_find(object_name) == true) { Print("object found"); if(checkCandle(user_input_index) == "Bullish") { trend = "uptrend"; high = iHigh(Symbol(),PERIOD_CURRENT,user_input_index); high_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index); // ambiguity high_index = user_input_index; for(int j=user_input_index; j < 1000; j++) { if(checkCandle(j) == "Bearish") { low = iLow(Symbol(),PERIOD_CURRENT,j); idx = j; break; } } idx = iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,idx,user_input_index+1); low = iLow(Symbol(),PERIOD_CURRENT,idx); low_index_time = iTime(Symbol(),PERIOD_CURRENT,idx); low_index = idx; } if(checkCandle(user_input_index) == "Bearish") { trend = "downtrend"; low = iLow(Symbol(),PERIOD_CURRENT,user_input_index); low_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index); low_index = user_input_index; for(int j=user_input_index; j < 1000; j++) { if(checkCandle(j) == "Bullish") { high = iHigh(Symbol(),PERIOD_CURRENT,j); idx = j; break; } } for(int k=idx; k high) { high = highh; high_index_time = iTime(Symbol(),PERIOD_CURRENT,k); high_index = k; } } } 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)); ObjectSetInteger(0,"target line",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line",OBJPROP_COLOR,clrGreen); 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)); ObjectSetInteger(0,"target line1",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"target line1",OBJPROP_COLOR,clrGreen); ObjectCreate(0,"high",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index),high,iTime(Symbol(),PERIOD_CURRENT,0),high); ObjectSetInteger(0,"high",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"high",OBJPROP_COLOR,clrBlue); ObjectCreate(0,"low",OBJ_TREND,0,iTime(Symbol(),PERIOD_CURRENT,user_input_index),low,iTime(Symbol(),PERIOD_CURRENT,0),low); ObjectSetInteger(0,"low",OBJPROP_RAY_RIGHT,true); ObjectSetInteger(0,"low",OBJPROP_COLOR,clrRed); choch_index_time = iTime(Symbol(),PERIOD_CURRENT,user_input_index); Entry_strategy(user_input_index); } else { Print("Object Not Found"); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool value_close_low(int chockIndex) { for(int i=chockIndex; i>1; i--) { if(iLow(Symbol(),PERIOD_CURRENT,i) < iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool value_close_high(int chockIndex) { for(int i=chockIndex; i>1; i--) { if(iHigh(Symbol(),PERIOD_CURRENT,i) > iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool actionBarclosebelowAllchochRevrsalBosSecondbos(int lastBos,int secondLastBos,int reversalindex,int chockindex) { for(int i=chockindex; i<=reversalindex; i++) { if(iLow(Symbol(),PERIOD_CURRENT,i) < iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } for(int i=lastBos; i<=secondLastBos; i++) { if(iLow(Symbol(),PERIOD_CURRENT,i) < iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool actionBarclosebelowAllchochRevrsalBosSecondbos1(int lastBos,int secondLastBos,int reversalindex,int chockindex) { for(int i=chockindex; i<=reversalindex; i++) { if(iHigh(Symbol(),PERIOD_CURRENT,i) > iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } for(int i=lastBos; i<=secondLastBos; i++) { if(iHigh(Symbol(),PERIOD_CURRENT,i) > iClose(Symbol(),PERIOD_CURRENT,1)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool chochcloceAboveFromSecondLastbos(int secondbbos,int chockk,int bbos) { for(int i=bbos; i<=secondbbos; i++) { if(iClose(Symbol(),PERIOD_CURRENT,chockk) < iHigh(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool chochcloceBelowFromSecondLastbos(int secondbbos,int chockk,int bbos) { for(int i=bbos; i<=secondbbos; i++) { if(iClose(Symbol(),PERIOD_CURRENT,chockk) > iLow(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(NewBar() == true) { Entry_strategy(1); // for entry condition candel 1 for(int m=0; m < orderNum; m++) { if(od_1[m].choch_index_date_time != 0) { int indexOfTradePlace = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].Time_OF_Candle,false); if(indexOfTradePlace == 2) { if(od_1[m].EntryCon == 1 && od_1[m].Signal == "buy") { int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(checkCandle(close_index) == "Bearish" && (checkCandle(close_index-1) == "Bearish" || checkCandle(close_index-1) == "Doji")) { 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)) { tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; if(object_find("target line") > 0) { //Print("Target line deleted due to in bar new update "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } if(checkCandle(close_index) == "Bullish" && (checkCandle(close_index-1) == "Bullish" || checkCandle(close_index-1) == "Doji")) { 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)) { tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; if(object_find("target line") > 0) { //Print("Target line deleted due to in bar new update "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } 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); if(reversalMax > iLow(Symbol(),PERIOD_CURRENT,1) && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_buy != 0.0) { int bbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].bosTime,false); int secondbbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].SecondLastbosTime,false); int reversall = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int chockk = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(actionBarclosebelowAllchochRevrsalBosSecondbos1(bbos,secondbbos,reversall,chockk) == true && chochcloceAboveFromSecondLastbos(secondbbos,chockk,bbos) == true) { placeBuyTrade(); Print("buy trade placed in no delay entry condition -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } else { if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } remove_value_from_structure(); od_1[m].choch_index_date_time = 0; od_1[m].Signal = ""; od_1[m].reversal_index_date_time = 0; od_1[m].choch_index_date_time = 0; signal = ""; } } } if(od_1[m].EntryCon == 1 && od_1[m].Signal == "sell") { int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(checkCandle(close_index) == "Bearish" && (checkCandle(close_index-1) == "Bearish" || checkCandle(close_index-1) == "Doji")) { 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)) { tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; if(object_find("target line") > 0) { // Print("Target line deleted due to in bar new update "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } if(checkCandle(close_index) == "Bullish" && (checkCandle(close_index-1) == "Bullish" || checkCandle(close_index-1) == "Doji")) { 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)) { tp_date_time_sell = 0.0; tp_date_time_buy = 0.0; if(object_find("target line") > 0) { // Print("Target line deleted due to in bar new update "); ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } } } 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); if(reversalMin < iHigh(Symbol(),PERIOD_CURRENT,1) && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_sell != 0.0) { int bbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].bosTime,false); int secondbbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].SecondLastbosTime,false); int reversall = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int chockk = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(actionBarclosebelowAllchochRevrsalBosSecondbos(bbos,secondbbos,reversall,chockk) == true && chochcloceBelowFromSecondLastbos(secondbbos,chockk,bbos) == true) { placeSellTrade(); Print("sell trade placed in no delay entry condition -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } else { // tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } remove_value_from_structure(); od_1[m].choch_index_date_time = 0; od_1[m].Signal = ""; od_1[m].reversal_index_date_time = 0; od_1[m].choch_index_date_time = 0; signal = ""; } } } } if(indexOfTradePlace > 2) { int close_index1 = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); Check_Inside_bar(close_index1); // second condition match if(od_1[m].EntryCon == 2 && od_1[m].Signal == "buy") { if(trend == "uptrend") { int ib =iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_buy,false); for(int p=ib-2; p >= 1; p--) { if(iHigh(Symbol(),PERIOD_CURRENT,p) > iLow(Symbol(),PERIOD_CURRENT,ib)) { tp_date_time_buy = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } break; } } } int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); Check_Inside_bar(reversal_indexx); bool snd_con = false; 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); for(int i=close_index-1; i>=1; i--) // second condition of updation { if(iClose(Symbol(),PERIOD_CURRENT,i) < reversalMax) { snd_con = true; } } if(iOpen(Symbol(),PERIOD_CURRENT,1) > iClose(Symbol(),PERIOD_CURRENT,close_index) && snd_con == false) // first condition of updation { if(value_close_high(close_index) == true) { if(iClose(Symbol(),PERIOD_CURRENT,close_index) > iLow(Symbol(),PERIOD_CURRENT,1) && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_buy != 0.0) { int bbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].bosTime,false); int secondbbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].SecondLastbosTime,false); int reversall = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int chockk = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(actionBarclosebelowAllchochRevrsalBosSecondbos1(bbos,secondbbos,reversall,chockk) == true && chochcloceAboveFromSecondLastbos(secondbbos,chockk,bbos) == true) { placeBuyTrade(); Print("buy trade placed in Entry condition delay -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } else { if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } remove_value_from_structure(); od_1[m].choch_index_date_time = 0; od_1[m].Signal = ""; od_1[m].reversal_index_date_time = 0; od_1[m].choch_index_date_time = 0; signal = ""; } } } } } if(od_1[m].EntryCon == 2 && od_1[m].Signal == "sell") { if(trend == "downtrend") { int ib =iBarShift(Symbol(), PERIOD_CURRENT,tp_date_time_sell,false); for(int p=ib-2; p >= 1; p--) { if(iLow(Symbol(),PERIOD_CURRENT,p) < iHigh(Symbol(),PERIOD_CURRENT,ib)) { tp_date_time_sell = 0.0; if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } break; } } } int reversal_indexx = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int close_index = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); Check_Inside_bar(reversal_indexx); 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); bool snd_con1 = false; for(int i=close_index-1; i>=1; i--) // second condition of updation { if(iClose(Symbol(),PERIOD_CURRENT,i) > reversalMin) { snd_con1 = true; } } if(iOpen(Symbol(),PERIOD_CURRENT,1) < iClose(Symbol(),PERIOD_CURRENT,close_index) && snd_con1 == false) // first condition of updation { if(value_close_low(close_index) == true) { if(iClose(Symbol(),PERIOD_CURRENT,close_index) < iHigh(Symbol(),PERIOD_CURRENT,1) && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1) && tp_date_time_sell != 0.0) { int bbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].bosTime,false); int secondbbos = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].SecondLastbosTime,false); int reversall = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].reversal_index_date_time,false); int chockk = iBarShift(Symbol(), PERIOD_CURRENT,od_1[m].choch_index_date_time,false); if(actionBarclosebelowAllchochRevrsalBosSecondbos(bbos,secondbbos,reversall,chockk) == true && chochcloceBelowFromSecondLastbos(secondbbos,chockk,bbos) == true) { placeSellTrade(); Print("sell trade placed in entry condition delay -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } else { if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } if(object_find("target line1") > 0) { ObjectDelete(0,"target line1"); } remove_value_from_structure(); od_1[m].choch_index_date_time = 0; od_1[m].Signal = ""; od_1[m].reversal_index_date_time = 0; od_1[m].choch_index_date_time = 0; signal = ""; } } } } } } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool NewBar() { static datetime Last_bar ; datetime Current_bar = iTime(Symbol(), PERIOD_CURRENT,0); if(Current_bar != Last_bar) { Last_bar = Current_bar; return (true); } else { return (false); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool object_find(string obj) // to find object placed by user in the chart { if(ObjectFind(0,obj) >= 0) { return true; } return false; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string checkCandle(int v) // to check the candle is bullish or bearish { double close = iClose(Symbol(),PERIOD_CURRENT,v); double open = iOpen(Symbol(),PERIOD_CURRENT,v); if(close > open) { return "Bullish"; } else if(close < open) { return "Bearish"; } else { return "Doji"; } return "empty"; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+