#property copyright "Copyright ?2006, 520FX.com"
#property link
"http://www.520fx.com/"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_width7 2
extern int MA1 = 30;
extern int MA2 = 35;
extern int MA3 = 40;
extern int MA4 = 45;
extern int MA5 = 50;
extern int MA6 = 55;
extern int MA7 = 60;
extern string web = "www.520fx.com";
double G_ibuf_112[];
double G_ibuf_116[];
double G_ibuf_120[];
double G_ibuf_124[];
double G_ibuf_128[];
double G_ibuf_132[];
double G_ibuf_136[];
int init() {
IndicatorBuffers(7);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, G_ibuf_112);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, G_ibuf_116);
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, G_ibuf_120);
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, G_ibuf_124);
SetIndexStyle(4, DRAW_LINE);
SetIndexBuffer(4, G_ibuf_128);
SetIndexStyle(5, DRAW_LINE);
SetIndexBuffer(5, G_ibuf_132);
SetIndexStyle(6, DRAW_LINE);
SetIndexBuffer(6, G_ibuf_136);
return (0);
}
int start() {
int Li_4 = IndicatorCounted();
if (Li_4 > 0) Li_4--;
int Li_0 = Bars - Li_4;
Comment("bars:",Bars,"Li_4:",Li_4,"Li_0:",Li_0);
for (int Li_8 = 0; Li_8 < Li_0; Li_8++) {
G_ibuf_112[Li_8] = iMA(NULL, 0, MA1, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_116[Li_8] = iMA(NULL, 0, MA2, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_120[Li_8] = iMA(NULL, 0, MA3, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_124[Li_8] = iMA(NULL, 0, MA4, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_128[Li_8] = iMA(NULL, 0, MA5, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_132[Li_8] = iMA(NULL, 0, MA6, 0, MODE_EMA, PRICE_CLOSE, Li_8);
G_ibuf_136[Li_8] = iMA(NULL, 0, MA7, 0, MODE_EMA, PRICE_CLOSE, Li_8);
}
return (0);
}
以下为说明,不是程序,不需复制:-----------------------------
int start() 指标触发函数。与init函数不同,该函数在有数据变化时被触发,如果数据被不断更新,则该函数将不断执行。start也是系统默认的函数名,但使用时也仍然需要进行创设,所以也要加定义符int
IndicatorCounted();计算的是指标加载到图上后
已经计算过的
K线个数
Bars是
全部历史
K线的个数
原理是:
指标刚加载到图上的时候IndicatorCounted()是0,然后程序会自动计算一遍所有K线对应的指标数值并画线。
然后每来一个新价格的时候(tick,替克),
没有计算过的K线个数Bars-IndicatorCounted();就只是1或者2了(视指标的计算方式决定)。
上面顾比的语句
Comment("bars:",Bars,"Li_4:",Li_4,"Li_0:",Li_0);//可以通过这个语句观察每个变量的即时值!
int Li_4 = IndicatorCounted();
//此处Li_4值为,2059
if (Li_4 > 0) Li_4--;
//此处Li_4值为,2058
int Li_0 = Bars - Li_4;
//Bars值为2060,Li_0值为2
解释:图表中一共2060个Bars,刚开始加载指标,
IndicatorCounted()函数是0,随后系统开始计算指标,IndicatorCounted()函数值是2059(该函数约定的就是:最新的当前bar不参与指标计算)!!
这时候for循环只需要计算这些
有变动的K线对应的指标数值就行了,不需要从头到尾重复计算了。
这就是这段程序的目的,找出for循环中仅需当前计算的K线的个数
转载请注明原文地址: https://ju.6miu.com/read-672471.html