我发现了一个有趣的 MT4 指标,它显示图表中下一个柱的剩余时间。但这适用于我会选择的特定配对。
但我希望该程序通过仅应用于任何打开的一对来工作/应用于所有打开的对。
请检查以下代码::::
//--- input parameters
input string LabelFont = "Arial";
input int LabelSize = 15;
input color LabelColor = clrRed;
input int LabelDistance = 15;
const string LabelName = "TimeToNextCandle";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
EventKillTimer();
ObjectDelete(0, LabelName);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
CalcTime();
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
CalcTime();
}
//+------------------------------------------------------------------+
void CalcTime(void)
{
// checking is there output label. create it if necessary
if (ObjectFind(LabelName) == -1)
{
ObjectCreate(0, LabelName, OBJ_LABEL, 0, 0, 0);
ObjectSetString(0, LabelName, OBJPROP_FONT, LabelFont);
ObjectSetInteger(0, LabelName, OBJPROP_FONTSIZE, LabelDistance);
ObjectSetInteger(0, LabelName, OBJPROP_COLOR, LabelColor);
ObjectSetInteger(0, LabelName, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
ObjectSetInteger(0, LabelName, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
ObjectSetInteger(0, LabelName, OBJPROP_XDISTANCE, LabelDistance);
ObjectSetInteger(0, LabelName, OBJPROP_YDISTANCE, LabelDistance);
}
// calculating remaining time to next candle
datetime TimeTo = PeriodSeconds() - (TimeCurrent() - Time[0]);
// assembling the output string depending on current period on the chart
string Out = StringFormat("%.2d", TimeSeconds(TimeTo));
if (TimeTo >= 3600)
{
Out = StringFormat("%.2d:%s", TimeMinute(TimeTo), Out);
if (TimeTo >= 86400)
Out = StringFormat("%d day(s) %.2d:%s", int(TimeTo / 86400), TimeHour(TimeTo), Out);
else
Out = StringFormat("%d:%s", TimeHour(TimeTo), Out);
}
else
Out = StringFormat("%d:%s", TimeMinute(TimeTo), Out);
ObjectSetString(0, LabelName, OBJPROP_TEXT, StringFormat("%s (%.0f%s)", Out, 100.0 / PeriodSeconds() * TimeTo, "%"));
}
//+------------------------------------------------------------------+