如何解决Mql4指示器不会自动更新
我在使用指示器时遇到了一些问题,可以请他人告诉我为什么会导致此问题吗?
简而言之,指标没有刷新
说明: 当我将指标附加到图表上并保持打开状态后,一段时间后,当我将另一个指标相似的实例附加到具有相似参数的目录上时,新指标将显示不同的线,然后是先前附加到图表上的线 即使我不附加新的指标,只需双击当前附加的指标,然后单击“确定”按钮,它就会更改先前绘制的蜡烛的线条 请看截图
有时候变化太多,有时变化不是很多,但是总会有一些变化,这取决于我双击多少条并在指示器上按OK
如果有人能指出我在做什么错,我将非常感激,谢谢
这是我的代码:
#property copyright ""
#property link ""
#property version ""
#property description ""
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_type1 DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_color1 Yellow
#property indicator_label1 "USD"
#property indicator_type2 DRAW_LINE
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
#property indicator_color2 Aqua
#property indicator_label2 "EUR"
//--- indicator buffers
double Buffer1[];
double Buffer2[];
//--- Rsi Value
extern int R_Value = 5;
double myPoint; //initialized in OnInit
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
string per = R_Value;
per = StringConcatenate("RSI(",per,")");
IndicatorShortName(per);
printf(per);
IndicatorBuffers(2);
SetIndexBuffer(0,Buffer1);
SetIndexEmptyValue(0,EMPTY_VALUE);
SetIndexBuffer(1,Buffer2);
SetIndexEmptyValue(1,EMPTY_VALUE);
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[])
{
int limit = rates_total - prev_calculated;
//--- counting from 0 to rates_total
ArraySetAsSeries(Buffer1,true);
ArraySetAsSeries(Buffer2,true);
//--- initial zero
if(prev_calculated < 1)
{
ArrayInitialize(Buffer1,0);
ArrayInitialize(Buffer2,0);
}
else
limit++;
//--- main loop
for(int i = limit-1; i >= 0; i--)
{
if (i >= MathMin(5000-1,rates_total-1-50)) continue;
//Indicator Buffer 1
double EURUSDs=0;
double GBPUSDs=0;
double AUDUSDs=0;
double NZDUSDs=0;
double USDCADs=0;
double USDCHFs=0;
double USDJPYs=0;
EURUSDs = irsI("EURUSD",PERIOD_CURRENT,R_Value,PRICE_CLOSE,i);
double USD1 = 100-EURUSDs;
GBPUSDs = irsI("GBPUSD",i);
double USD2 = 100-GBPUSDs;
AUDUSDs = irsI("AUDUSD",i);
double USD3 = 100-AUDUSDs;
NZDUSDs = irsI("NZDUSD",i);
double USD4 = 100-NZDUSDs;
double USD5 = irsI("USDCAD",i);
double USD6 = irsI("USDCHF",i);
double USD7 = irsI("USDJPY",i);
double USDtotal= (USD1+USD2+USD3+USD4+USD5+USD6+USD7);
double USDtota2= USDtotal/7;
{
Buffer1[i] = USDtota2;
}
//Indicator Buffer 2
EURUSDs=0;
double EURGBPs=0;
double EURJPYs=0;
double EURAUDs=0;
double EURCADs=0;
double EURCHFs=0;
double EURNZDs=0;
double EUR1 = irsI("EURUSD",i);
double EUR2 = irsI("EURGBP",i);
double EUR3 = irsI("EURJPY",i);
double EUR4 = irsI("EURAUD",i);
double EUR5 = irsI("EURCAD",i);
double EUR6 = irsI("EURCHF",i);
double EUR7 = irsI("EURNZD",i);
double EURtotal= (EUR1+EUR2+EUR3+EUR4+EUR5+EUR6+EUR7);
double EURtota2= EURtotal/7;
{
Buffer2[i] = EURtota2;
}
}
return(rates_total);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。