ICustom函数 - 页 12

 

谁能发布一个简单的EA,通过调用icustom()的两个指标,进行买入和卖出。

是否有一个关闭挂单的 功能。

谢谢

 

iCustom帮助

你好。

我正在尝试修改FerruFX的一个指标,以使用自定义指标。我已经让所有的MAs正常工作了,但我不确定如何为其他两个指标获得正确的信息。我最终希望这能显示我所附的两个指标的MTF数据,PerkyAsctrend1和HeikenAshi MTF。我为这两个指标使用了iCustom,我想我已经在这个范围内使用了正确的命令。

我能够为PerkyAsctrend1产生数据(但不是正确的数据)。我以为我理解了让它正确显示的逻辑,但我想我不理解。Ferru在他的指标中使用了MA、CCI、MACD、ADX、Bullspower和BearsPower,但它们是不同种类的指标,不幸的是,在这种设置下,作为PerkyAsctrend1的参考,不是很有用(对我而言)。

我以为HeikenAshi MTF指标会很容易添加到指标中。显然,我错了。Heiken栏莫名其妙地显示 "Label",而且它们在第一个tick之后都消失了。

希望这段代码对你来说其实并不像对我来说那么恶心。我是一个业余的程序员。如果有人能提供帮助,我将非常感激。我需要一双更有经验的眼睛来看待这个问题。我觉得它完成后会有很大的好处。

-

以下是给我带来麻烦的代码部分。这两个iCustoms给我的值都是2147483647,即价格历史/图表中的总条数

int RISK = 4;

int AllBars = 250;

int MaMethod = 1;

int MaPeriod = 20;

//...

// 讨厌的人

//...

string Pesky_Trend_1 //-- , Pesky_Trend_5, Pesky_Trend_15, Pesky_Trend_30, Pesky_Trend_60, Pesky_Trend_240, Pesky_Trend_1440, Pesky_Trend_10080。

double Pesky_m_1=iCustom(NULL,PERIOD_M1, "PerkyAsctrend1", RISK, AllBars,0,shift_1);

if ((Pesky_m_1 > 0)) { Pesky_Trend_1 = "UP"; x = 416; color_indic = Lime; UP_33 = 1; DOWN_33 = 0; }

如果((Pesky_m_1 < 0)){ Pesky_Trend_1 = "DOWN"; x = 406; color_indic = Red; UP_33 = 0; DOWN_33 = 1; }。

// ...

// 指标 (Heiken)

//...

string HA_Trend_1 //-- , HA_Trend_5, HA_Trend_15, HA_Trend_30, HA_Trend_60, HA_Trend_240, HA_Trend_1440, HA_Trend_10080;

double HA_1_1=iCustom(NULL,PERIOD_M1, "Heiken MTF",MaMethod,MaPeriod,shift_1);

double HA_2_1=iCustom(NULL,PERIOD_M1, "Heiken MTF",MaMethod,MaPeriod,shift_1+1);

if ((HA_1_1 > HA_2_1)) { HA_Trend_1 = "UP"; x = 466; color_indic = Lime; UP_41 = 1; DOWN_41 = 0; }

如果((HA_1_1 < HA_2_1)) { HA_Trend_1 = "DOWN"; x = 456; color_indic = Lime; UP_41 = 0; DOWN_41 = 1; }

//...

我知道这些移位值是非正统的,但原作者就是这么做的。

int start()

{

//...

// 指标的移位计算(仅测试)

double shift_1, shift_5, shift_15, shift_30, shift_60, shift_240, shift_1440, shift_10080;

if( test == true )

{

shift_1=iBarShift(NULL,PERIOD_M1,look_time_shift,false)。

shift_5=iBarShift(NULL,PERIOD_M5,look_time_shift,false)。

shift_15=iBarShift(NULL,PERIOD_M15,look_time_shift,false)。

shift_30=iBarShift(NULL,PERIOD_M30,look_time_shift,false)。

shift_60=iBarShift(NULL,PERIOD_H1,look_time_shift,false)。

shift_240=iBarShift(NULL,PERIOD_H4,look_time_shift,false)。

shift_1440=iBarShift(NULL,PERIOD_D1,look_time_shift,false)。

shift_10080=iBarShift(NULL,PERIOD_W1,look_time_shift,false)。

}

否则

{

shift_1=shift_indicators;

shift_5=shift_indicators;

shift_15=shift_indicators;

shift_30=shift_indicators;

shift_60=shift_indicators。

shift_240=shift_indicators。

shift_1440=shift_indicators。

shift_10080=shift_indicators。

谢谢你...

附加的文件:
 

更新版本

我重新安排了一切,因为它需要在视觉上,并改变了一些参数名称。对于iCustom来说,一切看起来都是正确的,但是PerkyAsctrend的值没有被正确计算,Heiken的逻辑显然是完全错误的。似乎它没有在晚上为Heiken MTF指标的iCustom提供一个双倍值。我还没有再次检查它们,但是这两个指标的iCustom双倍值都等于我历史上的条数(2147483647)......!我一定是在iCustom中做了什么完全错误的事情,但我怎么也找不到它。

如果你有时间或精力看一下这个问题,我将非常感激。

附加的文件:
 

致。Homicida & Ra457 re: iCustom

你好。

你在使用iCustom 时得到的那个大数字值,听起来像我遇到的困难。

我希望这有帮助。

请确保你输入iCustom的参数与指标代码本身的外部变量中给出的参数完全相同,且顺序一致。

干杯。

 

2147483647与你的历史没有关系。

它是32位有符号整数的最大值,被MT4用作指标的默认 "空值"。

当数值不显示时,指标会返回 "空值"。

 

习惯()

你好,我需要从一个指标中读取三个变量。

我将其放在指标的顶部。

变量

double eaBid=0;

double eaAsk=0;

string eaType=""。

//==========================

变量

#属性 indicator_separate_window

#属性 indicator_buffers 8

#属性 indicator_color1 黑色

#属性 indicator_color2 Lime

#属性 indicator_color3 青柠 #属性 indicator_color3 青柠

#属性 indicator_color4 黄色

#属性指示器_color5 红色

#属性指示器_color6 红色

#属性指示器_color7 黑色

#属性指示器_颜色8 黑色

double eaEP=0;

double eaSL=0;

double eaType=0;

双重iVars[]。

笨重

#property indicator_buffers 2

#属性 indicator_color1 红色

#属性 indicator_color2 ForestGreen

//---- 输入参数

string IndicatorName="TradeWatch";

double EntryBid=0;

double EntryAsk=0。

string EntryType=""。

double eaBid=0;

double eaAsk=0;

string eaType=""。

int init()

{

返回(0)。

}

开始

{

EntryBid = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 1, 0);

EntryAsk = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 2, 0);

EntryType = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 3, 0);

}

我如何将这三个变量读入我的EA中?

我看不出我哪里做错了?

谢谢。

 

为什么不直接读取应该反映在指标缓冲区 数值中的变量结果呢? 如果你在图表上放置指标后看一下指标设置中的颜色,每种颜色代表一个缓冲区。 最上面的颜色=缓冲区0,从上面开始的第二个颜色=缓冲区1,以此类推。

在你的EA中使用类似这样的东西。

Buff0=iCustom(NULL,0, "指标名称",0,0); //指标的顶部颜色

Buff0=iCustom(NULL,0, "Indicator Name",0,1); //1-Back

Buff1=iCustom(NULL,0, "指标名称",1,0); //指标顶部的次要颜色

Buff1=iCustom(NULL,0, "Indicator Name",1,1); //1-Back

修改指标本身的变量,并重新编译指标,这将更新缓冲区和图表上的指标

如果仍然感到困惑,我将给你发送一个实际的EA和指标供你查看。

戴夫

<<<

 

iCustom()

谢谢你,戴夫。

已经开始工作了。

 

祝大家一天愉快

 

我的EA

我已经用MQ4生成器创建了我的EA--ASCTrend.mq4,它使用带有ICustom功能的asctrend信号。它可以在上升信号时开出买入交易,在下降时开出卖出。

我想在我的EA中添加一些过滤器--通过对一些货币对的回溯测试,它看起来很好,但我不知道如何在我的EA中添加这个过滤器--我想是这样,但没有运气。

double Buy1_1 = iCustom(Symbol(),0, "PerkyAsctrend1",0,1);

double Buy2_1 = iCustom(NULL, 0, "BBands_Stop_v1", 4, 0, Current + 1);

双倍Buy2_2 = 1;

double Sell1_1 = iCustom(Symbol(),0, "PerkyAsctrend1",1,1);

double Sell2_1 = iCustom(NULL, 0, "BBands_Stop_v1", 5, 0, Current + 1);

double Sell2_2 = 1;

如果(Buy1_1 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;

如果(Sell1_1 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;

附加的文件: