智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)
为论坛做贡献有奖学金,奖学金可直接换真钱 扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得
查看: 1470|回复: 2

为什么一个循环 填满所有的数值,显示不出来?

[复制链接]
发表于 2014-10-25 23:33:34 | 显示全部楼层 |阅读模式
你好 有一个问题,就是 画箭头 第6课,我想问一下可否一个循环 把 均线和 箭头 数值填满,但是这么写没有 画出任何东西出来;


#property copyright "john.wei"
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window //单个的historgram 必须在附图上面显示 indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   4
//--- plot MovAvg1
#property indicator_label1  "MovAvg1"
#property indicator_type1   DRAW_LINE //柱状图 DRAW_HISTORGRAM
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot MovAvg2
#property indicator_label2  "MovAvg2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- plot UpArrow
#property indicator_label3  "UpArrow"
#property indicator_type3   DRAW_ARROW
#property indicator_color3  clrWhite
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2
//--- plot DnArrow
#property indicator_label4  "DnArrow"
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrLimeGreen
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- input parameters
input int      SmallInt=120;
input int      LargerInt=240;
//--- indicator buffers
double         MovAvg1Buffer[];
double         MovAvg2Buffer[];
double         UpArrowBuffer[];
double         DnArrowBuffer[];

/*
画指标利用数组对应 0,1,2,3,4,5...
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,clrRed);
SetindexLabel(0,"MovAvg1");
上面一大堆 两句代码可以搞定;
*/
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,MovAvg1Buffer); // 将 0 号序列 绑定在MovAvg1Buffer[]这个数值之上;
SetIndexBuffer(1,MovAvg2Buffer);// 1号绑定MovAvg2Buffer[];
SetIndexBuffer(2,UpArrowBuffer);//2号 UpArrowBuffer[]; 箭头 绑定
SetIndexBuffer(3,DnArrowBuffer);

SetIndexArrow(2,225);
SetIndexArrow(3,226);

//ArraySetAsSeries(Buffer[],true); 倒序默认的
return(INIT_SUCCEEDED);
}

  
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[])
{

for(int i=0;i<1000;i++)
{
// if(i%10)MovAvg1Buffer[i]=low[i]; //余数 只赋值0 10 20 30 .....
MovAvg1Buffer[i]=iMA(NULL,0,SmallInt,0,MODE_SMA,PRICE_CLOSE,i);
MovAvg2Buffer[i]=iMA(NULL,0,LargerInt,0,MODE_SMA,PRICE_CLOSE,i); //必须两个配合着才可以显示出来;
if(MovAvg1Buffer[i]>MovAvg2Buffer[i] && MovAvg1Buffer[i+1]<MovAvg2Buffer[i+1])UpArrowBuffer[i]=MovAvg1Buffer[i]-100*Point;
if(MovAvg1Buffer[i]<MovAvg2Buffer[i] && MovAvg1Buffer[i+1]>MovAvg2Buffer[i+1])DnArrowBuffer[i]=MovAvg1Buffer[i]+100*Point;
}

return(rates_total);
}

void OnTimer()
{


}

void OnChartEvent(const int id,
            const long &lparam,
            const double &dparam,
            const string &sparam)
{


}

回复

使用道具 举报

 楼主| 发表于 2014-10-25 23:38:20 | 显示全部楼层
11.png
回复 支持 反对

使用道具 举报

发表于 2014-10-27 09:08:42 | 显示全部楼层
你这个问题 问的很好。
其实是可以的,但是你这样写有一个问题
for(int i=0;i<1000;i++)
{
MovAvg1Buffer[i]=iMA(NULL,0,SmallInt,0,MODE_SMA,PRICE_CLOSE,i);
MovAvg2Buffer[i]=iMA(NULL,0,LargerInt,0,MODE_SMA,PRICE_CLOSE,i);
上面2句没问题,但是你后面有调用到MovAvg1Buffer[i+1],这个就有问题,因为你的for是从0开始到1000的,比如现在i=0的时候 MovAvg1Buffer[i] 这个数组只填了一个0号元素值,但是你居然要调用他的1号元素值,他还没填呢,你当然调用不到所以有问题

}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|sitemap|智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2019-10-15 05:47 , Processed in 0.049453 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表