//+------------------------------------------------------------------+ //| 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; 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; } }; 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 str = "<><><><><><> 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 = "<><><><><><> Default Settings <><><><><><>"; input double lot_size = 0.1; input lotcalculator lot_calculator = fix; //Lot Size Calculator input double risk = 1; //Risk in Percentage % input double stoploss = 20; // Stoploss Pips buffer from choch candle input double takeProfit = 20; // TakeProfit in Pips input int magic_no = 123; // Magic no 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 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; 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; int index = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void Bos(int i) { int save_bullish_index = 0; int save_bearish_index = 0; 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); for(int j=high_index-1; j > i; j--) { if(checkCandle(j) == "Bearish") { save_bullish_index = j; if(object_find("high") > 0) { 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point()); ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); 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); for(int j=low_index - 1; j > i; 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low); ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); 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) { 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_index, int i,int diff) { //Print("bullish found at index ",j); ind = Store_bos_last_index +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); Print("condition satisfied in downtrend buy trade : ",check_values_less_than_choch_high(ind,i)); if(check_values_less_than_choch_high(ind,i) == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i)) { signal = "buy"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); // Print("Place buy order -----------------------------------------------------------------------: "); } } 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)); 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)); ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); 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)); 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)); ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); diff = 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_2_down(int Store_bos_last_index, int i,int diff) { ind = Store_bos_last_index +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); Print("condition satisfied in downtrend buy trade : ",check_values_less_than_choch_high1(ind,i)); if(check_values_less_than_choch_high(ind,i) == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) > iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) < iClose(Symbol(),PERIOD_CURRENT,i)) { signal = "buy"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); // Print("Place buy order -----------------------------------------------------------------------: "); } } 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)); 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)); ObjectSetInteger(0,"line14"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line15"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); 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)); 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)); ObjectSetInteger(0,"line16"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line17"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); diff = 0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_1_up(int Store_bos_last_index, int i,int diff) { ind = Store_bos_last_index +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); Print("condition satisfied in uptrend sell trade : ",check_values_less_than_choch_low(ind,i)); if(check_values_less_than_choch_low(ind,i) == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i)) { signal = "sell"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); // Print("Place sell order -----------------------------------------------------------------------: "); } } 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)); 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)); ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); 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)); 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)); ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Entry_Action_2_up(int Store_bos_last_index, int i,int diff) { ind = Store_bos_last_index +1; // reversal candle index reversal_bar_time = iTime(Symbol(),PERIOD_CURRENT,ind); Print("condition satisfied in uptrend sell trade : ",check_values_less_than_choch_low(ind,i)); if(check_values_less_than_choch_low1(ind,i) == true) { if(iOpen(Symbol(),PERIOD_CURRENT,ind) < iOpen(Symbol(),PERIOD_CURRENT,i) && iClose(Symbol(),PERIOD_CURRENT,ind) > iClose(Symbol(),PERIOD_CURRENT,i)) { signal = "sell"; time_of_candle = iTime(Symbol(),PERIOD_CURRENT,i); // Print("Place sell order -----------------------------------------------------------------------: "); } } 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)); 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)); ObjectSetInteger(0,"line10"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,"line11"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_COLOR,clrBlue); 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)); 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)); ObjectSetInteger(0,"line12"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,"line13"+iTime(Symbol(),PERIOD_CURRENT,ind),OBJPROP_STYLE,STYLE_DOT); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool check_values_less_than_choch_high(int ind,int i) // downtrend { for(int k=ind; 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 ind,int i) // downtrend { for(int k=ind; 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 ind,int i) // uptrend { for(int k=ind; 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 ind,int i) // uptrend { for(int k=ind; k>i; k--) { if(iLow(Symbol(),PERIOD_CURRENT,k) < iClose(Symbol(),PERIOD_CURRENT,i)) { return false; } } return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void choch(int i) { int a = 0; 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)); ObjectSetString(0,"line3"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch"); ObjectCreate(0,"line8"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_DOWN,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+100*Point()); ObjectSetInteger(0,"line8"+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 Entry_Action_1_up(Store_bos_last_index,i,diff1); a=1; 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"; // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); // ----------------------------------------------------------------------------------------------------------------------------------------------------------- int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); chock_index++; datetime ti = choch_index_time; 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); Print("from where you start ",chock_index); if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } //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))); // { // Print("time at which error accur ",iTime(Symbol(),PERIOD_CURRENT,i)); // Print("object error ",GetLastError()); // } 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))); { Print("object created from uptrend to downtrend "); } 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); Print("from where you end ",chock_index1); 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; Print("TArget line deleted"); 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 = ti; } //------------------------------------------------------------------------------------------------------------------------------------------------------------------- if(signal == "sell") { MqlDateTime edate; time_to_place_trade = 0.0; int current_time_frame = Period(); string current_time_frame_string; switch(current_time_frame) { case PERIOD_M1: current_time_frame_string = "1 minute"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 2; edate.sec = 0; } break; case PERIOD_M5: current_time_frame_string = "5 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 10; edate.sec = 0; } break; case PERIOD_M15: current_time_frame_string = "15 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 30; edate.sec = 0; } break; case PERIOD_M30: current_time_frame_string = "30 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 60; edate.sec = 0; } break; case PERIOD_H1: current_time_frame_string = "1 hour"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = edate.hour + 1; edate.min = 0; edate.sec = 0; } time_to_place_trade = StructToTime(edate); // Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0)); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1); //Print("choch_index_time ",choch_index_time); //Print("reversal_bar_time ",reversal_bar_time); //Print("time_of_candle",time_of_candle); //Print("time_to_place_trade",time_to_place_trade); //Print("signal is ",signal); break; default: current_time_frame_string = "unknown"; break; } //signal = ""; } signal = ""; // condition on 2st candle Entry_Action_2_up(Store_bos_last_index,i,diff1); a=2; 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"; // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); // ----------------------------------------------------------------------------------------------------------------------------------------------------------- // chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); // 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); // // Print("from where you start ",chock_index); // // // if(object_find("target line") > 0) // { // ObjectDelete(0,"target line"); // } // // 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))); // { // Print("object error ",GetLastError()); // } // 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); // // chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); // Print("from where you end ",chock_index1); // // condition_not_match = false; // for(int p=chock_index - 1 ; p >=chock_index1; p--) // { // if(iLow(Symbol(),PERIOD_CURRENT,p) < HIGH) // { // condition_not_match = true; // } // } // // if(condition_not_match == true) // { // Print("TArget line deleted"); // HIGH = 0.0; // LOW = 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"); // } // // } //------------------------------------------------------------------------------------------------------------------------------------------------------------------- if(signal == "sell") { MqlDateTime edate; time_to_place_trade = 0.0; int current_time_frame = Period(); string current_time_frame_string; switch(current_time_frame) { case PERIOD_M1: current_time_frame_string = "1 minute"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 2; edate.sec = 0; } break; case PERIOD_M5: current_time_frame_string = "5 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 10; edate.sec = 0; } break; case PERIOD_M15: current_time_frame_string = "15 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 30; edate.sec = 0; } break; case PERIOD_M30: current_time_frame_string = "30 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 60; edate.sec = 0; } break; case PERIOD_H1: current_time_frame_string = "1 hour"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = edate.hour + 2; edate.min = 0; edate.sec = 0; } time_to_place_trade = StructToTime(edate); Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0)); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2); //Print("choch_index_time ",choch_index_time); //Print("reversal_bar_time ",reversal_bar_time); //Print("time_of_candle",time_of_candle); //Print("time_to_place_trade",time_to_place_trade); //Print("signal is ",signal); break; default: current_time_frame_string = "unknown"; break; } //signal = ""; } 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),iHigh(Symbol(),PERIOD_CURRENT,i)+20*Point()); ObjectSetString(0,"line4"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"choch"); ObjectCreate(0,"line7"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_ARROW_UP,0,iTime(Symbol(),PERIOD_CURRENT,i),iLow(Symbol(),PERIOD_CURRENT,i)-100*Point()); ObjectSetInteger(0,"line7"+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); Entry_Action_1_down(Store_bos_last_index,i,diff); a = 1; 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) { 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"; // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); //-------------------------------------------------------------------------------------------------------------------------------------------------------------------- int chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); chock_index++; datetime t = choch_index_time; 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); Print("from where you start ",chock_index); if(object_find("target line") > 0) { ObjectDelete(0,"target line"); } //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))); // { // Print("time at which error accur in downtrend to uptrend ",iTime(Symbol(),PERIOD_CURRENT,i)); // Print("object error ",GetLastError()); // } 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))); { Print("object created from downtrend to uptrend "); } 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); Print("from where you end ",chock_index1); bool condition_not_match = false; for(int p=chock_index - 2 ; p > chock_index1; p--) { // Print("index is ",p," time is ", iTime(Symbol(),PERIOD_CURRENT,p)); // Print("high is ", iHigh(Symbol(),PERIOD_CURRENT,chock_index)," low is ",LOW); if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW) { Print("here the condition is get false "); Print("high is ", iHigh(Symbol(),PERIOD_CURRENT,p)," low is ",LOW); Print("index is ",p," time is ", iTime(Symbol(),PERIOD_CURRENT,p)); 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") { MqlDateTime edate; time_to_place_trade = 0.0; int current_time_frame = Period(); string current_time_frame_string; switch(current_time_frame) { case PERIOD_M1: current_time_frame_string = "1 minute"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 2; edate.sec = 0; } break; case PERIOD_M5: current_time_frame_string = "5 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 10; edate.sec = 0; } break; case PERIOD_M15: current_time_frame_string = "15 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 30; edate.sec = 0; } break; case PERIOD_M30: current_time_frame_string = "30 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 60; edate.sec = 0; } break; case PERIOD_H1: current_time_frame_string = "1 hour"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = edate.hour + 1; edate.min = 0; edate.sec = 0; } time_to_place_trade = StructToTime(edate); Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0)); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,1); //Print("choch_index_time ",choch_index_time); //Print("reversal_bar_time ",reversal_bar_time); //Print("time_of_candle",time_of_candle); //Print("time_to_place_trade",time_to_place_trade); //Print("signal is ",signal); break; default: current_time_frame_string = "unknown"; break; } } signal = ""; Entry_Action_2_down(Store_bos_last_index,i,diff); a = 2; 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) { 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"; // choch_index_time = iTime(Symbol(),PERIOD_CURRENT,i); //-------------------------------------------------------------------------------------------------------------------------------------------------------------------- // chock_index = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); // 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); // // Print("from where you start ",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); // chock_index1 = iBarShift(Symbol(), PERIOD_CURRENT, choch_index_time, false); // Print("from where you end ",chock_index1); // // condition_not_match = false; // for(int p=chock_index - 1 ; p >=chock_index1; p--) // { // if(iHigh(Symbol(),PERIOD_CURRENT,p) > LOW) // { // condition_not_match = true; // } // } // // if(condition_not_match == true) // { // HIGH = 0.0; // LOW = 0.0; // Print("line target deleted :"); // condition_not_match = false; // // if(object_find("target line") > 0) // { // ObjectDelete(0,"target line"); // } // // if(object_find("target line1") > 0) // { // ObjectDelete(0,"target line1"); // } // // } //------------------------------------------------------------------------------------------------------------------------------------------------------------------ if(signal == "buy") { MqlDateTime edate; time_to_place_trade = 0.0; int current_time_frame = Period(); string current_time_frame_string; switch(current_time_frame) { case PERIOD_M1: current_time_frame_string = "1 minute"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 2; edate.sec = 0; } break; case PERIOD_M5: current_time_frame_string = "5 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 10; edate.sec = 0; } break; case PERIOD_M15: current_time_frame_string = "15 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 30; edate.sec = 0; } break; case PERIOD_M30: current_time_frame_string = "30 minutes"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = 0; edate.min = edate.min + 60; edate.sec = 0; } break; case PERIOD_H1: current_time_frame_string = "1 hour"; if(TimeToStruct(time_of_candle,edate)) { edate.hour = edate.hour + 2; edate.min = 0; edate.sec = 0; } time_to_place_trade = StructToTime(edate); Print("Time: ",iTime(Symbol(),PERIOD_CURRENT,0)); store_value_in_structure(choch_index_time,reversal_bar_time,signal,time_of_candle,time_to_place_trade,2); //Print("choch_index_time ",choch_index_time); //Print("reversal_bar_time ",reversal_bar_time); //Print("time_of_candle",time_of_candle); //Print("time_to_place_trade",time_to_place_trade); //Print("signal is ",signal); break; default: current_time_frame_string = "unknown"; break; } } 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); for(int m=save_bullish_index; m>i; m--) { double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m); find_high_time = iTime(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); for(int m=save_bullish_index; m>i; m--) { double find_high1 = iHigh(Symbol(),PERIOD_CURRENT,m); find_high_time = iTime(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) { ObjectDelete(0,"high"); } high = find_high; 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),low); ObjectSetString(0,"line2"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); 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); 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=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); 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); // find_low = find_low1; // here is the addition 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; 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) { 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"+iTime(Symbol(),PERIOD_CURRENT,i),OBJ_TEXT,0,iTime(Symbol(),PERIOD_CURRENT,i),high+40*Point()); ObjectSetString(0,"line1"+iTime(Symbol(),PERIOD_CURRENT,i), OBJPROP_TEXT,"bos"); 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); // Print("low update due to third condition",low," time of the candle is ",iTime(Symbol(),PERIOD_CURRENT,i)); } if(high2 > 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, low_index_time, false); high_index = i; // addtion to be minus if(object_find("high") > 0) { 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); // Print("high update due to third condition",high," time of the candle is ",iTime(Symbol(),PERIOD_CURRENT,i)); } } 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) { 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); // Print("high update due to third condition",high); } 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"); } // Print("low value is ", 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); // Print("low update due to third condition",low); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void store_value_in_structure(datetime chock_time,datetime ind,string signal,datetime time_of_candle,datetime time_to_place_trade, int entry) { 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 = ind; od_1[l].Signal = signal; od_1[l].Time_OF_Candle = time_of_candle; // Print("saved time in the structure ",time_of_candle); od_1[l].Time_of_candle_For_trade = time_to_place_trade; // Print("saved time in the structure ",time_to_place_trade); od_1[l].EntryCon = entry; break; } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void remove_value_from_structure() { for(int l=0; l<200; l++) { if(od_1[l].choch_index_date_time != 0) { // Print("value removed from structure "); 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--) { 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); // tp_date_time_buy = 0.0; // // if(stoploss != 0) // { // buySL = Ask - (stoploss *10* Point()); // } //if(takeProfit != 0) // { // buyTp = Ask + (takeProfit *10* Point()); // } double distance = (Ask - buySL)/Point(); 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()); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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); // Print("Pip value: ", NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point))*10),2)); double pipvalue = NormalizeDouble(((SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)/Point()))*10),2); // pipvalue=NormalizeDouble((modeTickV/modeTickS/Point()),) // pipvalue= 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; //sl=riskamount/pipValuelot 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 high) { high = highh; high_index_time = iTime(Symbol(),PERIOD_CURRENT,k); high_index = k; } } } 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; } //+------------------------------------------------------------------+ //| 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) { //Print("current time is ",TimeCurrent()); //Print("time is ",od_1[m].Time_of_candle_For_trade); //Print("signal is ",od_1[m].Signal); if(od_1[m].EntryCon == 1 && iTime(Symbol(),PERIOD_CURRENT,1) == od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/) { // Print("time is greater and signal is buy ",TimeCurrent()); 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); // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); 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 ) { Print("<<<<<<<<<<<< Entry 1 >>>>>>>>>"); placeBuyTrade(); 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 = ""; Print("buy trade placed -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } } if(od_1[m].EntryCon == 1 && iTime(Symbol(),PERIOD_CURRENT,1) == od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/) { //Print("i am in enrtry condition 1 : "); // Print("time is greater and signal is sell ",TimeCurrent()); 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); // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); 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 ) { placeSellTrade(); 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 = ""; Print("sell trade placed -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } } // second condition match if(od_1[m].EntryCon == 2 && TimeCurrent() > od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/) { // Print("time is greater and signal is buy ",TimeCurrent()); // Print("i am in enrtry condition 1 : "); 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); // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); 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 ) { Print("<<<<<<<<<<<< Entry 2 >>>>>>>>>"); placeBuyTrade(); 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 = ""; Print("buy trade placed -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } } } if(od_1[m].EntryCon == 2 && TimeCurrent() > od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0 /*&& HIGH != 0 && LOW != 0*/) { // Print("time is greater and signal is sell ",TimeCurrent()); 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); // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); 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 ) { placeSellTrade(); 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 = ""; Print("sell trade placed -------------------------------------------------------------"); Print("time at which trade is placed : ",TimeCurrent()); } } } } } // for(int m=0; m < orderNum; m++) // { // if(od_1[m].choch_index_date_time != 0) // { // // //Print("current time is ",TimeCurrent()); // //Print("time is ",od_1[m].Time_of_candle_For_trade); // //Print("signal is ",od_1[m].Signal); // // // if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "buy" && od_1[m].Time_of_candle_For_trade != 0) // { // // Print("time is greater and signal is buy ",TimeCurrent()); // // 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); // // // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); // // if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) > iLow(Symbol(),PERIOD_CURRENT,1) // && iClose(Symbol(),PERIOD_CURRENT,close_index) < iClose(Symbol(),PERIOD_CURRENT,1)) // { // placeBuyTrade(); // 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 = ""; // Print("buy trade placed -------------------------------------------------------------"); // Print("time at which trade is placed : ",TimeCurrent()); // // } // // // } // // if(TimeCurrent() >= od_1[m].Time_of_candle_For_trade && od_1[m].Signal == "sell" && od_1[m].Time_of_candle_For_trade != 0) // { // // // Print("time is greater and signal is sell ",TimeCurrent()); // // 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); // // // Print("reversal_index_date_time ",od_1[m].reversal_index_date_time); // // Print("choch_index_date_time ",od_1[m].choch_index_date_time); // // // // Print(" high is ",iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx)); // // Print("low of current candle ",iLow(Symbol(),PERIOD_CURRENT,0)); // // Print("close of chock is ",iClose(Symbol(),PERIOD_CURRENT,close_index)); // // Print("close of current candle is ",iClose(Symbol(),PERIOD_CURRENT,0)); // // if(iHigh(Symbol(),PERIOD_CURRENT,reversal_indexx) < iLow(Symbol(),PERIOD_CURRENT,1) // && iClose(Symbol(),PERIOD_CURRENT,close_index) > iClose(Symbol(),PERIOD_CURRENT,1)) // { // placeSellTrade(); // 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 = ""; // Print("sell trade placed -------------------------------------------------------------"); // Print("time at which trade is placed : ",TimeCurrent()); // // } // // } // } // } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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"; } return "empty"; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+