السلام عليكم
مرفق مؤشر المفروض يحسب الجذر الرقمي للسعر على اساس مجموع مكونات سعر الاغلاق يعني لو السعر 1.23 يرجع 1+2+3=6
مبرمج عن طريق جات جي بي تي
المعادلة صحيحة تم اختبارها لكن الرقم مقابل كل شمعة غير متطابق ممكن حد يراجعه ويقول اين الخلل
وشكرا جزيلا لكم
كود:
//+------------------------------------------------------------------+
//| PriceRootDigits |
//| Copyright 2024, MetaQuotes Software Corp. |
//| http://www.mql4.com/ |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
double Buffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Initialize indicator buffers
SetIndexBuffer(0, Buffer1);
// Set indicator line properties
SetIndexStyle(0, DRAW_LINE);
SetIndexLabel(0, "Price Root");
IndicatorDigits(0);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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[])
{
// Calculate price root and store it in Buffer1
for(int i = 0; i < rates_total; i++)
{
double price = close[i];
double priceRoot = 0;
// Remove decimal point
int integerPart = (int)price;
// Sum digits
while(integerPart > 0)
{
priceRoot += integerPart % 10;
integerPart /= 10;
}
// Ensure the result is a single digit
while(priceRoot > 9)
{
int temp = (int)priceRoot;
priceRoot = 0;
while(temp > 0)
{
priceRoot += temp % 10;
temp /= 10;
}
}
Buffer1[i] = priceRoot;
}
return(rates_total);
}
//+------------------------------------------------------------------+