我是一个新手,想在一个新的窗口中得到HA... - 页 3 1234 新评论 smohamedfarouk 2008.02.10 10:40 #21 谢谢你的建议 在上面的代码中,当我们刚刚使用Objects来画线时,这一行SetIndexStyle(0, DRAW_LINE)有什么作用?我们是否需要提到它们,我知道缓冲区的作用,但我不知道为什么缓冲区要与索引相连,为什么索引要有样式,因为我们看到的是创建对象的调用和价格属性? 你有没有看到你自己使用上面的代码,蜡烛的边缘是弯曲的,而不是像价格图那样的纯矩形? Ray 2008.02.10 16:23 #22 我已经解释过了。 如果你想要矩形,就画矩形而不是趋势线对象。 smohamedfarouk 2008.02.11 01:33 #23 你好,Phy 很抱歉给你添麻烦了,RECTANGLE选项不工作,所以我才麻烦你,谢谢你的耐心,请试一试并告诉我,我已经修正了HA的计算方法。 请最后再试一次,谢谢,我希望我可以让这个矩形正常工作。 #property indicator_separate_window #属性 indicator_buffers 6 #属性 indicator_color1 CLR_NONE #属性 indicator_color2 CLR_NONE double high[]; double low[]; double open[]; double close[]; double haOpen1[]; 双重haClose1[]。 //+------------------------------------------------------------------+ //|自定义指标初始化函数 //+------------------------------------------------------------------+ int init() { SetIndexStyle(0, DRAW_LINE); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexStyle(3, DRAW_LINE); SetIndexStyle(4, DRAW_LINE); SetIndexStyle(5, DRAW_LINE); SetIndexBuffer(0, high); SetIndexBuffer(1, low); SetIndexBuffer(2, open); SetIndexBuffer(3, close); SetIndexBuffer(4, haOpen1); SetIndexBuffer(5, haClose1)。 返回(0)。 } //+------------------------------------------------------------------+ //| 自定义指标的去初始化功能。 //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int start(){ string basename = "Heikin-Ashi"; IndicatorShortName(basename)。 int window = WindowFind(basename); for (int i = Bars-100; i >= 0; i--){ // 这两个索引用于控制子窗口的大小 // 它们是不可见的 high[i] = High[i]; low[i] = Low[i]; double haOpen, haHigh, haLow, haClose,haDiffCo; haOpen=(haOpen1[i+1]+haClose1[i+1])/2; haOpen1[i] = haOpen; haClose=(Open[i]+High[i]+Low[i]+Close[i])/4; haClose1[i] = haClose; haHigh=MathMax(haOpen,High[i])。 haLow=MathMin(haOpen,Low[i])。 string name1 = "Heikin-Ashi-HL-"+i; if(ObjectFind(name1) != -1) ObjectDelete(name1); ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow); ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID)。 ObjectSet(name1, OBJPROP_RAY, 0); ObjectSet(name1, OBJPROP_WIDTH, 2); string name2 = "Heikin-Ashi-OC-"+i; if(ObjectFind(name2) != -1) ObjectDelete(name2); ObjectCreate(name2, OBJ_RECTANGLE, window, Time[i], haOpen, Time[i], haClose) 。 ObjectSet(name2, OBJPROP_WIDTH, 5); //ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(name2, OBJPROP_RAY, 0); 如果(haOpen < haClose) { ObjectSet(name1, OBJPROP_COLOR, Chartreuse); ObjectSet(name2, OBJPROP_COLOR, Chartreuse)。 }else{ ObjectSet(name1, OBJPROP_COLOR, Red); ObjectSet(name2, OBJPROP_COLOR, Red)。 } } 返回(0)。 } I am a newbie 问吧! 请问,MT4能画变色K线吗?比如像这个图一样: Ray 2008.02.11 03:13 #24 蜡烛应该是趋势线 体宽为2或更有可能为3 我不知道你在说什么 "四舍五入 "的线条 展示一张图片 smohamedfarouk 2008.02.11 07:37 #25 请看图片。 smohamedfarouk 2008.02.11 07:43 #26 有时当你向左滚动时,你也会得到这样的结果(绿色和红色混合)。 Ray 2008.02.11 07:49 #27 是的,我看到了。 我想你那里有一些陈旧的酒吧要删除。 smohamedfarouk 2008.02.11 08:03 #28 谢谢你的回答,如何做到这一点? Ray 2008.02.11 08:08 #29 找出问题所在,然后想一想如何解决它。 smohamedfarouk 2008.02.11 08:56 #30 你好,Phy 如果我是对的,问题可能是由于我这样做的缘故 SetIndexStyle(0, DRAW_LINE); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_LINE); SetIndexStyle(3, DRAW_LINE); SetIndexStyle(4, DRAW_LINE); SetIndexStyle(5, DRAW_LINE); 我做了上述工作,并使缓冲区被绘制,同时我做了以下工作 if(ObjectFind(name1) != -1) ObjectDelete(name1); ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow); ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID)。 ObjectSet(name1, OBJPROP_RAY, 0); ObjectSet(name1, OBJPROP_WIDTH, 2); string name2 = "Heikin-Ashi-OC-"+i; if(ObjectFind(name2) != -1) ObjectDelete(name2); ObjectCreate(name2, OBJ_TREND, window, Time[i], haOpen, Time[i], haClose); ObjectSet(name2, OBJPROP_WIDTH, 5); //ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(name2, OBJPROP_RAY, 0); 因此,缓冲区中的数据和对象都是在彼此的上面绘制的,我说的对吗? 我应该删除索引样式代码的设置,因为我只是用缓冲区来存储数据,而不想画它? 我说的对吗? I am a newbie Indicator Programmer Wanted. The Murrey Math Trading 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你的建议
在上面的代码中,当我们刚刚使用Objects来画线时,这一行SetIndexStyle(0, DRAW_LINE)有什么作用?我们是否需要提到它们,我知道缓冲区的作用,但我不知道为什么缓冲区要与索引相连,为什么索引要有样式,因为我们看到的是创建对象的调用和价格属性?
你有没有看到你自己使用上面的代码,蜡烛的边缘是弯曲的,而不是像价格图那样的纯矩形?
我已经解释过了。
如果你想要矩形,就画矩形而不是趋势线对象。
你好,Phy
很抱歉给你添麻烦了,RECTANGLE选项不工作,所以我才麻烦你,谢谢你的耐心,请试一试并告诉我,我已经修正了HA的计算方法。
请最后再试一次,谢谢,我希望我可以让这个矩形正常工作。
#property indicator_separate_window
#属性 indicator_buffers 6
#属性 indicator_color1 CLR_NONE
#属性 indicator_color2 CLR_NONE
double high[];
double low[];
double open[];
double close[];
double haOpen1[];
双重haClose1[]。
//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
SetIndexBuffer(0, high);
SetIndexBuffer(1, low);
SetIndexBuffer(2, open);
SetIndexBuffer(3, close);
SetIndexBuffer(4, haOpen1);
SetIndexBuffer(5, haClose1)。
返回(0)。
}
//+------------------------------------------------------------------+
//| 自定义指标的去初始化功能。
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start(){
string basename = "Heikin-Ashi";
IndicatorShortName(basename)。
int window = WindowFind(basename);
for (int i = Bars-100; i >= 0; i--){
// 这两个索引用于控制子窗口的大小
// 它们是不可见的
high[i] = High[i];
low[i] = Low[i];
double haOpen, haHigh, haLow, haClose,haDiffCo;
haOpen=(haOpen1[i+1]+haClose1[i+1])/2;
haOpen1[i] = haOpen;
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haClose1[i] = haClose;
haHigh=MathMax(haOpen,High[i])。
haLow=MathMin(haOpen,Low[i])。
string name1 = "Heikin-Ashi-HL-"+i;
if(ObjectFind(name1) != -1) ObjectDelete(name1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID)。
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(name1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(name2) != -1) ObjectDelete(name2);
ObjectCreate(name2, OBJ_RECTANGLE, window, Time[i], haOpen, Time[i], haClose) 。
ObjectSet(name2, OBJPROP_WIDTH, 5);
//ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name2, OBJPROP_RAY, 0);
如果(haOpen < haClose) {
ObjectSet(name1, OBJPROP_COLOR, Chartreuse);
ObjectSet(name2, OBJPROP_COLOR, Chartreuse)。
}else{
ObjectSet(name1, OBJPROP_COLOR, Red);
ObjectSet(name2, OBJPROP_COLOR, Red)。
}
}
返回(0)。
}
蜡烛应该是趋势线
体宽为2或更有可能为3
我不知道你在说什么 "四舍五入 "的线条
展示一张图片
有时当你向左滚动时,你也会得到这样的结果(绿色和红色混合)。
是的,我看到了。
我想你那里有一些陈旧的酒吧要删除。
找出问题所在,然后想一想如何解决它。
你好,Phy
如果我是对的,问题可能是由于我这样做的缘故
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
我做了上述工作,并使缓冲区被绘制,同时我做了以下工作
if(ObjectFind(name1) != -1) ObjectDelete(name1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID)。
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(name1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(name2) != -1) ObjectDelete(name2);
ObjectCreate(name2, OBJ_TREND, window, Time[i], haOpen, Time[i], haClose);
ObjectSet(name2, OBJPROP_WIDTH, 5);
//ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name2, OBJPROP_RAY, 0);
因此,缓冲区中的数据和对象都是在彼此的上面绘制的,我说的对吗?
我应该删除索引样式代码的设置,因为我只是用缓冲区来存储数据,而不想画它?
我说的对吗?