Candle Analysis Report

Author: Copyright 2024, Enrique Enguix
0 Views
0 Downloads
0 Favorites
Candle Analysis Report
ÿþ//+------------------------------------------------------------------+

//|                              Copyright 2024, Enrique Enguix      |

//|                              https://www.mql5.com/es/users/envex |

//+------------------------------------------------------------------+

#property copyright "Copyright 2024, Enrique Enguix"

#property link      "https://www.mql5.com/es/users/envex"

#property version   "1.00"

#property strict



// Structure to hold candle amplitude and index

struct CandleAmplitude

  {

   double            amplitude;

   int               index;

  };



// Function to compare candle amplitudes

bool CompareAmplitude(const CandleAmplitude &a, const CandleAmplitude &b)

  {

   return a.amplitude > b.amplitude;

  }



// Entry point of the script

void OnStart()

  {

// Arrays to store candle data

   double openPrices[];

   double closePrices[];

   double highPrices[];

   double lowPrices[];



   ArraySetAsSeries(openPrices, true);

   ArraySetAsSeries(closePrices, true);

   ArraySetAsSeries(highPrices, true);

   ArraySetAsSeries(lowPrices, true);



// Copy price data

   int copied = CopyOpen(Symbol(), Period(), 0, 5000, openPrices);

   copied = CopyClose(Symbol(), Period(), 0, 5000, closePrices);

   copied = CopyHigh(Symbol(), Period(), 0, 5000, highPrices);

   copied = CopyLow(Symbol(), Period(), 0, 5000, lowPrices);



// Variables to track candle counts and amplitudes

   int bullishCount = 0;

   int bearishCount = 0;

   int neutralCount = 0;

   double bullishAmplitudeTotal = 0.0;

   double bearishAmplitudeTotal = 0.0;



// Arrays to store top 5 bullish and bearish candles by amplitude

   CandleAmplitude bullishCandles[5];

   CandleAmplitude bearishCandles[5];



// Calculate candle amplitudes and categorize candles

   for(int i = 0; i < 5000; i++)

     {

      double amplitude = highPrices[i] - lowPrices[i];



      if(closePrices[i] > openPrices[i])

        {

         bullishCount++;

         bullishAmplitudeTotal += amplitude;



         // Update top 5 bullish candles

         for(int j = 0; j < 5; j++)

           {

            if(amplitude > bullishCandles[j].amplitude)

              {

               for(int k = 4; k > j; k--)

                 {

                  bullishCandles[k] = bullishCandles[k - 1];

                 }

               bullishCandles[j].amplitude = amplitude;

               bullishCandles[j].index = i;

               break;

              }

           }

        }

      else

         if(closePrices[i] < openPrices[i])

           {

            bearishCount++;

            bearishAmplitudeTotal += amplitude;



            // Update top 5 bearish candles

            for(int j = 0; j < 5; j++)

              {

               if(amplitude > bearishCandles[j].amplitude)

                 {

                  for(int k = 4; k > j; k--)

                    {

                     bearishCandles[k] = bearishCandles[k - 1];

                    }

                  bearishCandles[j].amplitude = amplitude;

                  bearishCandles[j].index = i;

                  break;

                 }

              }

           }

         else

           {

            neutralCount++;

           }

     }



// Get pip value for the financial instrument

   double pipValue = SymbolInfoDouble(_Symbol, SYMBOL_POINT);



// Create comment with structured information

   string commentInfo = "=== Candle Analysis Report ===\n\n";

   commentInfo += "Number of bullish candles: " + IntegerToString(bullishCount) + "\n";

   commentInfo += "Average amplitude of bullish candles in points: " + DoubleToString(bullishAmplitudeTotal / bullishCount / pipValue, 0) + " points\n\n";

   commentInfo += "Number of bearish candles: " + IntegerToString(bearishCount) + "\n";

   commentInfo += "Average amplitude of bearish candles in points: " + DoubleToString(bearishAmplitudeTotal / bearishCount / pipValue, 0) + " points\n\n";

   commentInfo += "Number of neutral candles: " + IntegerToString(neutralCount) + "\n\n";

   commentInfo += "Top 5 bullish candles by amplitude:\n";



   for(int i = 0; i < 5; i++)

     {

      commentInfo += "Candle " + IntegerToString(i+1) + ": Index = " + IntegerToString(bullishCandles[i].index)

                     + ", Amplitude = " + DoubleToString(bullishCandles[i].amplitude / pipValue, 0) + " points\n";

     }



   commentInfo += "\nTop 5 bearish candles by amplitude:\n";

   for(int i = 0; i < 5; i++)

     {

      commentInfo += "Candle " + IntegerToString(i+1) + ": Index = " + IntegerToString(bearishCandles[i].index)

                     + ", Amplitude = " + DoubleToString(bearishCandles[i].amplitude / pipValue, 0) + " points\n";

     }



// Display the analysis report as a comment in the chart

   Comment(commentInfo);

  }

//+------------------------------------------------------------------+

Comments