SCT_PriceAction_AllPotentialEntries

Author: Copyright 2020, Mario Gharib. fxweirdos@gmail.com
Price Data Components
Series array that contains open prices of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
SCT_PriceAction_AllPotentialEntries
//+------------------------------------------------------------------+
//|                              PriceAction AllPotentialEntries.mq5 |
//|                                    Copyright 2020, Mario Gharib. |
//|                                         mario.gharib@hotmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright 2020, Mario Gharib. fxweirdos@gmail.com"
#property link      "https://www.mql5.com"
#property version   "1.00"

class cCandlestick {

   public:

      double dOpenPrice, dHighPrice, dLowPrice, dClosePrice, dRangeCandle, dBodyCandle, dUpperWickCandle, dLowerWickCandle;
      
      bool bBullCandle;
      bool bBearCandle;
      bool bDojiCandle;
      
      void mvGetCandleStickCharateristics (string s, int i) {
         
         dOpenPrice = iOpen(s, PERIOD_CURRENT,i);
         dHighPrice = iHigh(s, PERIOD_CURRENT,i);
         dLowPrice = iLow(s, PERIOD_CURRENT,i);
         dClosePrice = iClose(s, PERIOD_CURRENT,i);
         
         dRangeCandle = NormalizeDouble(MathAbs(dHighPrice-dLowPrice)/SymbolInfoDouble(s,SYMBOL_POINT),_Digits);
         dBodyCandle = NormalizeDouble(MathAbs(dOpenPrice-dClosePrice)/SymbolInfoDouble(s,SYMBOL_POINT),_Digits);
         dUpperWickCandle = NormalizeDouble(MathAbs(dHighPrice-MathMax(dClosePrice,dOpenPrice))/SymbolInfoDouble(s,SYMBOL_POINT),_Digits);
         dLowerWickCandle = NormalizeDouble(MathAbs(MathMin(dClosePrice,dOpenPrice)-dLowPrice)/SymbolInfoDouble(s,SYMBOL_POINT),_Digits);
         
         if (dBodyCandle<=1.0 && dUpperWickCandle>dBodyCandle && dLowerWickCandle>dBodyCandle) {
            bDojiCandle=true; bBullCandle=false; bBearCandle=false;}
         else if (dOpenPrice<dClosePrice) {
            bDojiCandle=false; bBullCandle=true; bBearCandle=false;}
         else if (dOpenPrice>dClosePrice) {
            bDojiCandle=false; bBullCandle=false; bBearCandle=true;}
      }
};

cCandlestick cCS1, cCS2;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   int z=1;
   long chartid=0;

   int HowManySymbols=SymbolsTotal(true);

   int counter;

   for(int i=0;i<HowManySymbols;i++) {

      counter=0;
      string sArrowBuy1="", sArrowBuy2="", sArrowSell1="", sArrowSell2="";

      cCS1.mvGetCandleStickCharateristics(SymbolName(i,true),z);
      cCS2.mvGetCandleStickCharateristics(SymbolName(i,true),z+1);


   // OPEN CHART TO DOWNLOAD DATA                    |

      chartid=ChartOpen(SymbolName(i,true), PERIOD_CURRENT);  

      // ===============================================|
      // ===============================================|
      
      if (cCS1.bBullCandle && cCS2.bBullCandle && cCS1.dRangeCandle>cCS2.dRangeCandle && cCS1.dBodyCandle>=cCS2.dBodyCandle) {
         StringConcatenate(sArrowBuy1,"sArrowBuy1 ",SymbolName(i,true), string(iTime(SymbolName(i,true),PERIOD_CURRENT,z)));
         ObjectCreate(chartid,sArrowBuy1,OBJ_ARROW_BUY,0,iTime(SymbolName(i,true),PERIOD_CURRENT,z),cCS1.dLowPrice);
         StringConcatenate(sArrowBuy2,"sArrowBuy2 ",SymbolName(i,true), string(iTime(SymbolName(i,true),PERIOD_CURRENT,z+1)));
         ObjectCreate(chartid,sArrowBuy2,OBJ_ARROW_BUY,0,iTime(SymbolName(i,true),PERIOD_CURRENT,z+1),cCS2.dLowPrice);
         counter++;
      }

      // ===============================================|
      // ===============================================|
   
      if (cCS1.bBearCandle && cCS2.bBearCandle && cCS1.dBodyCandle>cCS2.dBodyCandle && cCS1.dRangeCandle>=cCS2.dRangeCandle) {

         StringConcatenate(sArrowSell1,"sArrowSell1 ",SymbolName(i,true),string(iTime(SymbolName(i,true),PERIOD_CURRENT,z)));
         ObjectCreate(chartid,sArrowSell1,OBJ_ARROW_SELL,0,iTime(SymbolName(i,true),PERIOD_CURRENT,z),cCS1.dHighPrice);
         StringConcatenate(sArrowSell2,"sArrowSell2 ",SymbolName(i,true), string(iTime(SymbolName(i,true),PERIOD_CURRENT,z+1)));
         ObjectCreate(chartid,sArrowSell2,OBJ_ARROW_SELL,0,iTime(SymbolName(i,true),PERIOD_CURRENT,z+1),cCS2.dHighPrice);
         counter++;
      }

      if (counter==0)
         ChartClose(chartid);
   }

}

Comments