ICustom函数 - 页 10

 

你好,你能帮我阐述一下这位专家的情况吗?

基于FreedomBar指标...

如果前一格收盘为红色->卖出(市场价格)->在下一格关闭交易,变为蓝色并反转为买入(市场价格)。

买入订单也是如此

如果有TF、tp、sl和追踪止损选项就更好了。

谢谢

附加的文件:
 

有什么帮助吗?我使用icustom将指标读入EA,在回测 过程中,趋势运行得很好,然后由于某些原因,icustom参数发生了逆转,所以我的趋势是向上的,而不是向下的,尽管指标显示是向下的,但在交易激活后,我又自行纠正了,过了一段时间又发生了。

 
increase:
请提供任何帮助。我从一个使用icustom的EA中读取指标,在回测过程中,趋势运行得很好,然后由于某种原因,icustom的参数发生了逆转,所以我的趋势是向上的,而不是向下的,即使指标显示是向下的,在交易激活后,我也会自行纠正,一段时间后又会发生

所以指标似乎是问题所在,它像SuperTrend volty,但我在使用其他非重绘指标时也遇到了这个问题,如FX Sniper Ergodic和Fisher

挑战似乎是,有很多时候,当指标指向一个方向,比如说下降,但移动的起点最终低于终点,导致指标显示为下降,但数据却显示为上升。

对此有什么意见吗?有没有人有一个不重绘的指标,不会出现这种情况,或者有什么其他解决办法?

请看所附图片

附加的文件:
pic.jpg  38 kb
 

iCustom函数

大家好...这是我的第一个帖子

这个EA将用于根据指标的颜色平仓,但我将手动开仓。由于我没有反编译版本的指标,我认为icustom是一种方法。

但我如何根据颜色来调用函数?

例如,如果我使用Heikin Ashi_SW,我想在条形图关闭后颜色为蓝色时关闭卖盘,反之亦然。

谢谢

 

自定义问题

我有一个简单的自定义指标,没有外部设备,名为#TestIndicator,用数字1.0填充8个缓冲区,但当我在EA中带回缓冲区时,缓冲区的结果总是0。你能帮我解决这个问题吗?

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/CODE]

EA Code

[CODE]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

测试器中的结果

 
Xaun:
我有一个简单的自定义指标,没有外部设备,名为#TestIndicator,它用数字1.0填充了8个缓冲区,但当我在EA中带回缓冲区时,缓冲区结果总是0。你能帮我解决这个问题吗。

EA代码

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

..

..

...

......

..

int i=0;

int limit=Bars-counted_bars;

ArrayResize(test4_up, limit);

ArrayResize(test4_down, limit);

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

]

也许你需要在你的EA中定义数组的大小。

 

谢谢

okfar:
也许你需要在你的EA中定义阵列的大小。

谢谢你,Okfar。这正是问题所在

 

取决于你如何访问你的数据,你不必在每个tick上重新填充阵列,就像你不必重新计算指标一样。 见

bool ArraySetAsSeries(double&array[],bool set)设置 数组的索引方向。如果set 参数的值为TRUE,数组将以相反的顺序进行索引,也就是说,最后一个元素的索引为零。FALSE值则设置标准的索引顺序。该函数返回之前的状态。

 

...

你正试图使用本应专门从指标中使用的功能。

IndicatorCounted() 从EA中调用时没有任何意义。在EA代码中调用时,它总是返回-1。试着用一个常数来代替(比如在你的第二个循环中)或Bars(如果你想要整个历史)。

另外,在EA中使用的数组应该被调整大小,初始化,以及通常metatrader在涉及指标和指标中的缓冲区时所做的全部工作。EA没有与指标中使用的SetIndexBuffer() 相当的功能。你的EA中存在未初始化的数组,只有metatrader可以防止你的EA崩溃(在这种情况下,它总是返回0,因为你试图读取的元素值不存在,事实上,这些数组不存在(它们只是被声明,没有被分配,初始化,...))。

问候

mladen

Xaun:
我有一个简单的自定义指标,没有外部设备,名为#TestIndicator,用数字1.0填充8个缓冲区,但当我在EA中带回缓冲区时,缓冲区结果总是0。你能帮我解决这个问题吗。

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/code]EA Code

[code]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

测试器中的结果...

 

编码问题

我有一个我非常喜欢的指标,并且已经演示了几个星期,而且相当成功。 有什么方法可以让我根据该指标自动下买/卖单吗? 简而言之,当我喜欢的指标排成一行时,它是一个小箭头,在图表上指向向上或向下。 有没有一种方法,当箭头弹出时,它将为我下订单?