double v1[1000]; double v2[1000]; double v3[1000];<------ leave out the '1000' initialization for indicator buffers, as they don't require
我采用了你的代码,去掉了缓冲区 声明中的值,它运行得很好 . . .
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]=1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]=1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]=1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]=1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]=1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]=1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]=1.5954 if
我采用了你的代码,去掉了缓冲区 声明中的值,它工作得很好 . . .
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]=1.5913 if <----High
------> 此时分形不一致的高点低于前低点 <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]=1.5948 if<----High
------>此时分形不一致的高点低于前低点 <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]=1.5992 if<----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]=1.5996 if<----High
------>此时交替的分形一致<---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]=1.5919 if <----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]=1.5954 if <----High
有意思,谢谢你的结果 Agent86V2。分形 的确是一种耐人寻味而又能赚钱的交易方式。
我采用了你的代码,去掉了缓冲区 声明中的值,它工作得很好 . . .
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]=1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]=1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]=1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]=1.5992 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]=1.5996 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]=1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]=1.5954 if
我很抱歉,我就是不明白。我以为我明白了,但我似乎还是错过了什么。
int start() { double test[]; test[39] = 45.6; Print("test[39]= ",test[39] ); return(0); }你指示我按上面的方法声明。
你还引用了这个话题。
"当声明一个数组时,必须指定数据类型、数组名称和每个维度的元素数:"
所以,一方面我不能像这个脚本中那样,不先声明double test[40];就不能打印数组,但现在我似乎也可以不声明就打印了。这样看来,不管声明是什么,我都可以打印缓冲区中的值。
然而,我不能添加额外的条件,这些条件通常会产生所需的结果,如if(faster > slower)或&& faster > slower。
它可以是EMA任何东西,我只是想了解它为什么不工作。
它导致指标高点消失,v1打印输出停止打印。我期待它能与条件一致并打印输出。
我试图为此添加额外的代码 块,结果也一样。
谢谢
我还写了这个 ....
指示器缓冲区是特殊的Arrays ......不要把Arrays和Buffers混为一谈,它们相似而又不同。
在原来的代码中,v1[]和v2[]是缓冲区,在你最新的代码中,它们是数组,当你声明一个数组时,你必须给它一个大小,例如,v1[50]有50个元素,从v1[0]到v1[49]。当需要更多的元素时,缓冲区会自动调整大小,并且数值会在缓冲区内自动移动。考虑到当前形成的条形图,即条形图0,当这个条形图完成后,与该条形图相关的指标值必须转移到索引1 ......这是用缓冲区自动完成的,如果你想用数组做类似的事情,你可以,但你必须自己编码。
然而,我不能添加通常会产生所需结果的额外条件,如if(快>慢)或&&快>慢。
它可以是EMA任何东西,我只是想了解它为什么不工作。
它导致指标高点消失,v1打印输出停止打印。我期待它能与条件一致并打印输出。
我试图为此添加额外的代码块,结果也一样。
谢谢
我还写了这个 ....
指示器缓冲区是特殊的Arrays ......不要把Arrays和Buffers混为一谈,它们相似而又不同。
在原来的代码中,v1[]和v2[]是缓冲区,在你最新的代码中,它们是数组,当你声明一个数组时,你必须给它一个大小,例如,v1[50]有50个元素,从v1[0]到v1[49]。当需要更多的元素时,缓冲区会自动调整大小,并且数值会在缓冲区内自动移动。考虑到当前形成的条形图,即条形图0,当这个条形图完成后,与该条形图相关的指标值必须转移到索引1 ......这是用缓冲器自动完成的......如果你想用数组做类似的事情,你可以,但你必须自己编码。
我只创建了一个二级循环,因为我无法在第一个指标循环中打印,但现在它正在打印。
总之,我不会再重提这个问题了,我想我明白了。
所以不会工作的代码是这里显示的一些例子。
//+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(3); SetIndexArrow(0, 111); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexArrow(1, 111); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexArrow(2, 111); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL int i=Bars; //---- for(i=Bars; i>=0; i--) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0 && faster > slower) // I think I need to add some more comparisons for the Low[i] also // the comparison works but shows indicator when faster < slower too. // adding additional code blocks instead of above and including the part below and inserting this instead // if(faster>slower) // { // v1[i]=High[i]; // } // causes indicator to disappear { v1[i]=High[i]; Print ("v1[", i, "]= ", v1[i], " if"); } else { //v1[i]=v1[i+1]; //Print ("v1[", i, "]= ", v1[i], " else"); } val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) { v2[i]=Low[i]; Print ("v2[", i, "]= ", v2[i], " if"); } else { //v2[i]=v2[i+1]; //Print ("v2[", i, "]= ", v2[i], " else"); } } //---- return(0); } //+------------------------------------------------------------------+
谢谢
所以,不会工作的代码是这里显示的一些例子。
谢谢
好吧,我可以告诉你你的问题是什么,或者我可以给你一些线索.......先提供线索,如果你想让我告诉你就说,我会告诉你。.
在循环内,for(i=Bars; i>=0; i--) ......更快 和更慢的 值是什么?
大家好。
我正在学习一些关于数组的一般主题,这些主题来自于一个有iFractals的代码库指标,并得到了论坛中大师们的一些帮助。
因此,无论如何
我无法在指标中添加条件运算符或逻辑运算来增加加法功能。
我试着在代码的不同区域插入if(faster > slower),只是为了玩玩这个想法。通常情况下,这些想法在EA中是可行的,但在指标中却不行
IEif(v1 > 0 && faster > slower)
但这导致了指标的消失。
许多其他的组合,我认为应该产生理想的指标,如果(其他条件)等等。
所有这些都没有产生打印语句的输出。
我在这里错过了什么呢。
请指教
谢谢