//+------------------------------------------------------------------+ //| TrendlineBreaker-V1.mq5 | //| Copyright 2023, M & Q Investment Group | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, M & Q Investment Group" #property link "https://www.mql5.com" #property version "1.00" int HandleRSI; int OnInit(){ string NameZigZag = "Market\\ArrowZigZag.ex5"; GHandleZigZag = iCustom(_Symbol,PERIOD_CURRENT,NameZigZag,8,8,3); HandleRSI = iRSI(_Symbol,PERIOD_CURRENT,14,PRICE_CLOSE); return(INIT_SUCCEEDED); } void OnDeinit(const int reason){ } void OnTick(){ GetLastZigZag(GMinimumHigLowCandleIndex,GCountLastZigZagSignals,GMaximalZigZagBufferRange,GHandleZigZag); Comment("\nLastHighnLows[0][0]: ",LastHighnLows[0][0]," Index: ",LastHighnLows[0][1]," High1Low-1: ",LastHighnLows[0][2], "\nLastHighnLows[1][0]: ",LastHighnLows[1][0]," Index: ",LastHighnLows[1][1]," High1Low-1: ",LastHighnLows[1][2], "\nLastHighnLows[2][0]: ",LastHighnLows[2][0]," Index: ",LastHighnLows[2][1]," High1Low-1: ",LastHighnLows[2][2], "\nLastHighnLows[3][0]: ",LastHighnLows[3][0]," Index: ",LastHighnLows[3][1]," High1Low-1: ",LastHighnLows[3][2]); } //GET LAST ZIG-ZAG-SIGNALS input int GMinimumHigLowCandleIndex = 3; input int GCountLastZigZagSignals = 4; int GMaximalZigZagBufferRange = 200; int GHandleZigZag; //ONINIT //string NameZigZag = "Market\\ArrowZigZag.ex5"; //HandleZigZag = iCustom(_Symbol,PERIOD_CURRENT,NameZigZag,8,8,3); double LastHighnLows[][3]; void GetLastZigZag(int MinimumHigLowCandleIndex, int CountLastZigZagSignals, int MaximalZigZagBufferRange, int HandleZigZag){ int SignalCounter = 0; double ZigZagindiValue[]; CopyBuffer(HandleZigZag,0,0,MaximalZigZagBufferRange,ZigZagindiValue); ArraySetAsSeries(ZigZagindiValue,true); ArrayResize(LastHighnLows,CountLastZigZagSignals); Print("MaximalZigZagBufferRange: ",MaximalZigZagBufferRange, "\nMinimumHigLowCandleIndex: ",MinimumHigLowCandleIndex, "\nSizeZigZagValue: ",ArraySize(ZigZagindiValue)); for(int i = MinimumHigLowCandleIndex; i < MaximalZigZagBufferRange; i++){ //Print("i: ",i); if(ZigZagindiValue[i] > 0){ double ZigZagindiRedTop[]; double ZigZagindiGreenBot[]; CopyBuffer(HandleZigZag,1,i,1,ZigZagindiRedTop); CopyBuffer(HandleZigZag,2,i,1,ZigZagindiGreenBot); //IF REDTOP HAS A VALUE if(ZigZagindiRedTop[0] > 0 && SignalCounter < CountLastZigZagSignals){ //INSERT THE VALUE IN GENERAL ARRAY LastHighnLows[SignalCounter][0] = ZigZagindiValue[i]; LastHighnLows[SignalCounter][1] = i; LastHighnLows[SignalCounter][2] = 1; //FINISH SIGNAL DOCUMENTATION GOTO NEXT SIGNAL SignalCounter = SignalCounter +1;} //IF GREENBOT HAS A VALUE else if(ZigZagindiGreenBot[0] > 0 && SignalCounter < CountLastZigZagSignals){ //INSERT THE VALUE IN GENERAL ARRAY LastHighnLows[SignalCounter][0] = ZigZagindiValue[i]; LastHighnLows[SignalCounter][1] = i; LastHighnLows[SignalCounter][2] = -1; //FINISH SIGNAL DOCUMENTATION GOTO NEXT SIGNAL SignalCounter = SignalCounter +1;} else if(SignalCounter == CountLastZigZagSignals){break;} }//END OF IF ZIGZAGARRAY HAS VALUE }//END OF FOR LOOP }//END OF ZIGZAG FUNCTION