我是一个新手,想在一个新的窗口中得到HA... - 页 3

 

谢谢你的建议

在上面的代码中,当我们刚刚使用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);

因此,缓冲区中的数据和对象都是在彼此的上面绘制的,我说的对吗?

我应该删除索引样式代码的设置,因为我只是用缓冲区来存储数据,而不想画它?

我说的对吗?