My custom Xau/Xag indicator pro version
Posted: Wed Jul 29, 2026 6:26 pm
Hi guys,
I would like to share with you my custom made Xau/Xag indicator. I use it for scalping small inbalances after trading News or volatile markets. (Gold/Silver indicator)
Here it is for MT4:
I would like to share with you my custom made Xau/Xag indicator. I use it for scalping small inbalances after trading News or volatile markets. (Gold/Silver indicator)
Here it is for MT4:
Code: Select all
//+------------------------------------------------------------------+
//| XAU_XAG_Tracker.mq4 |
//| Professional Tracking |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property link ""
#property version "1.00"
#property indicator_chart_window
#property indicator_plots 0
//--- Professional Input Parameters
input string GoldSymbol = "XAUUSD"; // Gold Symbol Name (Match your broker)
input string SilverSymbol = "XAGUSD"; // Silver Symbol Name (Match your broker)
input color GoldColor = clrGold; // Gold Text Color
input color SilverColor = clrSilver; // Silver Text Color
input int FontSize = 14; // Font Size
input string FontName = "Trebuchet MS"; // Font Type (Clean & Professional)
input ENUM_BASE_CORNER Corner = CORNER_RIGHT_UPPER; // Panel Corner Anchor
input int X_Offset = 20; // X-Axis Distance from corner
input int Y_Offset = 20; // Y-Axis Distance from corner
input int LineSpacing = 25; // Space between lines
//--- Internal Object Names
string obj_gold = "Label_Gold_Price";
string obj_silver = "Label_Silver_Price";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Initialize and create the text labels on the chart
CreateLabel(obj_gold, Corner, X_Offset, Y_Offset, GoldColor);
CreateLabel(obj_silver, Corner, X_Offset, Y_Offset + LineSpacing, SilverColor);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Clean up the chart when the indicator is removed
ObjectDelete(0, obj_gold);
ObjectDelete(0, obj_silver);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// Fetch latest Bid prices and the specific broker's digit formatting
double gold_price = MarketInfo(GoldSymbol, MODE_BID);
int gold_digits = (int)MarketInfo(GoldSymbol, MODE_DIGITS);
double silver_price = MarketInfo(SilverSymbol, MODE_BID);
int silver_digits = (int)MarketInfo(SilverSymbol, MODE_DIGITS);
// Update Gold text dynamically
if(gold_price > 0)
{
string gold_text = GoldSymbol + ": " + DoubleToStr(gold_price, gold_digits);
ObjectSetString(0, obj_gold, OBJPROP_TEXT, gold_text);
}
else
{
ObjectSetString(0, obj_gold, OBJPROP_TEXT, GoldSymbol + ": Waiting for tick...");
}
// Update Silver text dynamically
if(silver_price > 0)
{
string silver_text = SilverSymbol + ": " + DoubleToStr(silver_price, silver_digits);
ObjectSetString(0, obj_silver, OBJPROP_TEXT, silver_text);
}
else
{
ObjectSetString(0, obj_silver, OBJPROP_TEXT, SilverSymbol + ": Waiting for tick...");
}
return(rates_total);
}
//+------------------------------------------------------------------+
//| Helper function to create graphical text labels |
//+------------------------------------------------------------------+
void CreateLabel(string name, ENUM_BASE_CORNER corner, int x, int y, color clr)
{
// Only create if it doesn't already exist
if(ObjectFind(0, name) < 0)
{
ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, name, OBJPROP_CORNER, corner);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
ObjectSetString(0, name, OBJPROP_FONT, FontName);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, FontSize);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_BACK, false);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); // Prevent accidental clicking/dragging
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); // Hide from object list to keep UI clean
}
}
//+------------------------------------------------------------------+