162 lines
		
	
	
		
			No EOL
		
	
	
		
			9.9 KiB
		
	
	
	
		
			MQL5
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			No EOL
		
	
	
		
			9.9 KiB
		
	
	
	
		
			MQL5
		
	
	
	
	
	
//+------------------------------------------------------------------+
 | 
						|
//|                                                  orderstotal.mq5 |
 | 
						|
//|                                  Copyright 2025, MetaQuotes Ltd. |
 | 
						|
//|                                             https://www.mql5.com |
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
#property copyright "Copyright 2025, MetaQuotes Ltd."
 | 
						|
#property link      "https://www.mql5.com"
 | 
						|
#property version   "1.00"
 | 
						|
 | 
						|
#include <Trade\PositionInfo.mqh>
 | 
						|
#include <Trade\Trade.mqh>
 | 
						|
 | 
						|
string label_name = "BigTextLabel";
 | 
						|
int highest_magic = 1;
 | 
						|
double lowestValue=0;
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
//| Expert initialization function                                   |
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
int OnInit()
 | 
						|
  {
 | 
						|
//---
 | 
						|
   if(!ObjectCreate(0, label_name, OBJ_LABEL, 0, 0, 0))
 | 
						|
     {
 | 
						|
      Print("Failed to create label");
 | 
						|
 | 
						|
     }
 | 
						|
 | 
						|
// Set label properties
 | 
						|
   ObjectSetInteger(0, label_name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
 | 
						|
   ObjectSetInteger(0, label_name, OBJPROP_XDISTANCE, 20);
 | 
						|
   ObjectSetInteger(0, label_name, OBJPROP_YDISTANCE, 20);
 | 
						|
   ObjectSetInteger(0, label_name, OBJPROP_FONTSIZE, 24); // Big font size
 | 
						|
   ObjectSetInteger(0, label_name, OBJPROP_COLOR, clrRed);
 | 
						|
   ObjectSetString(0, label_name, OBJPROP_TEXT, "Initial Text");
 | 
						|
 | 
						|
//---
 | 
						|
   return(INIT_SUCCEEDED);
 | 
						|
  }
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
//| Expert deinitialization function                                 |
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
void OnDeinit(const int reason)
 | 
						|
  {
 | 
						|
//---
 | 
						|
// Create the label
 | 
						|
   ObjectDelete(0, label_name);
 | 
						|
  }
 | 
						|
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
//| Expert tick function                                             |
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
void OnTick()
 | 
						|
  {
 | 
						|
//---
 | 
						|
   static datetime dtBarCurrent  = WRONG_VALUE;
 | 
						|
   datetime dtBarPrevious = dtBarCurrent;
 | 
						|
   static datetime dtBarCurrent1  = WRONG_VALUE;
 | 
						|
   datetime dtBarPrevious1 = dtBarCurrent1;
 | 
						|
   dtBarCurrent1  = iTime(_Symbol, PERIOD_M1, 0);
 | 
						|
   dtBarCurrent  = iTime(_Symbol, PERIOD_M1, 0);
 | 
						|
 | 
						|
   bool     bNewBarEvent  = (dtBarCurrent != dtBarPrevious);
 | 
						|
   bool     bNewBarEvent1  = (dtBarCurrent1 != dtBarPrevious1);
 | 
						|
 | 
						|
   if(bNewBarEvent)
 | 
						|
     {
 | 
						|
      // Detect if this is the first tick received and handle it.
 | 
						|
      /* For example, when it is first attached to a chart and
 | 
						|
         the bar is somewhere in the middle of its progress and
 | 
						|
         it's not actually the start of a new bar. */
 | 
						|
      if(dtBarPrevious == WRONG_VALUE)
 | 
						|
        {
 | 
						|
         // Do something on first tick or middle of bar ...
 | 
						|
        }
 | 
						|
      else
 | 
						|
        {
 | 
						|
 | 
						|
         int totalOrders=PositionsTotal();
 | 
						|
 | 
						|
 | 
						|
 | 
						|
         int total_positions = PositionsTotal();
 | 
						|
 | 
						|
 | 
						|
 | 
						|
         if(total_positions > highest_magic)
 | 
						|
            highest_magic = total_positions;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
         string new_text = TimeToString(TimeCurrent(), TIME_SECONDS);
 | 
						|
         ObjectSetString(0, label_name, OBJPROP_TEXT, "Updated: " + totalOrders+ "  " +highest_magic+ " "+lowestEquity());
 | 
						|
        }
 | 
						|
     }
 | 
						|
  }
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
//|                                                                  |
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
double GetAverageSpread()
 | 
						|
  {
 | 
						|
  int candlesToCheck = 300;
 | 
						|
   MqlRates priceData[];
 | 
						|
   if(CopyRates(Symbol(), PERIOD_M10, 0, candlesToCheck, priceData) <= 0)
 | 
						|
     {
 | 
						|
      Print("❌ Failed to retrieve price data.");
 | 
						|
 return 160;
 | 
						|
     }
 | 
						|
 | 
						|
   double totalSpread = 0;
 | 
						|
   double pointSize = SymbolInfoDouble(Symbol(), SYMBOL_POINT);
 | 
						|
 | 
						|
   for(int i = 0; i < candlesToCheck; i++)
 | 
						|
     {
 | 
						|
      double spread = priceData[i].spread;
 | 
						|
      totalSpread += spread;
 | 
						|
     }
 | 
						|
     double averageSpread = totalSpread / candlesToCheck;
 | 
						|
 | 
						|
   return averageSpread;
 | 
						|
  }
 | 
						|
  
 | 
						|
  double GetMaxSpread()
 | 
						|
  {
 | 
						|
  int candlesToCheck = 300;
 | 
						|
   MqlRates priceData[];
 | 
						|
   if(CopyRates(Symbol(), PERIOD_M10, 0, candlesToCheck, priceData) <= 0)
 | 
						|
     {
 | 
						|
      Print("❌ Failed to retrieve price data.");
 | 
						|
 return 160;
 | 
						|
     }
 | 
						|
 | 
						|
   double totalSpread = 0;
 | 
						|
   double pointSize = SymbolInfoDouble(Symbol(), SYMBOL_POINT);
 | 
						|
 | 
						|
   for(int i = 0; i < candlesToCheck; i++)
 | 
						|
     {
 | 
						|
      double spread = priceData[i].spread;
 | 
						|
      if (spread>totalSpread) totalSpread=spread; 
 | 
						|
     }
 | 
						|
     double averageSpread = totalSpread;
 | 
						|
 | 
						|
   return averageSpread;
 | 
						|
  }
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
 | 
						|
//+------------------------------------------------------------------+
 | 
						|
double lowestEquity(){
 | 
						|
      double equity = AccountInfoDouble(ACCOUNT_PROFIT);
 | 
						|
      double margin = AccountInfoDouble(ACCOUNT_MARGIN);
 | 
						|
      double netValue = equity - margin;
 | 
						|
 | 
						|
     if (netValue<lowestValue)
 | 
						|
         lowestValue = netValue;
 | 
						|
 | 
						|
     return lowestValue;
 | 
						|
   
 | 
						|
 | 
						|
}    |