如何编码? - 页 308

 

嗨,Mladen。

我看到了您在stochastic上做的一个代码。但是,当我把它移植到我的系统中时,什么也没有发生。我可以向你确认一下它是做什么的吗?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

尊敬的先生

特伦斯

 

...

试试这里张贴的一些内容:https://www.mql5.com/en/forum/175297/page3

或这里 :https://www.mql5.com/en/forum/177239/page2

经过测试,它们是有效的

tkuan77:
你好,姆拉登。

我遇到了一个由你在stochastic上完成的代码。但是,当我把它插入我的系统时,什么也没有发生。我可以向你检查一下它是做什么的吗?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

问候语

特伦斯
 

这很奇怪。

我更详细地研究了挂锁的问题。显然,这与我的UAC(用户账户控制)设置有关,所以我进入我的windows7控制面板,把UAC完全关闭。一旦我重新启动,我注意到挂锁已经从文件中消失了。我打开它,它与我在这个论坛上发布的文件相同。与我过去几周一直在写的代码完全不同,尽管它实际上是同一个文件。我以为我失去了我所有的编码工作。我重新打开UAC并重新启动,挂锁已经恢复,我写的代码又恢复了正常。

但后来我试图编译代码,它发现了大量的错误。但它挑出的错误不是来自这段代码,而是当我关闭UAC时完全不同的代码--我知道这是因为它挑出的变量只在其他代码中出现。

我想我需要开一个全新的EA,手动输入所有这些代码并保存。

 

...

这是在windows7下的一个常见的问题(有保护)。

在windows7下,避免这种情况的最简单方法是将metatrader安装在不同于C的分区上,你就不会有这种问题了。

crsnape@btinternet.com:
这很奇怪。

我更详细地研究了挂锁的问题。显然,这与我的UAC(用户账户控制)设置有关,所以我进入我的windows7控制面板,将UAC完全关闭。一旦我重新启动,我注意到挂锁已经从文件中消失了。我打开它,它与我在这个论坛上发布的文件相同。与我过去几周一直在写的代码完全不同,尽管它实际上是同一个文件。我以为我失去了我所有的编码工作。我重新打开UAC并重新启动,挂锁已经恢复,我写的代码又恢复了正常。

但后来我试图编译代码,它发现了大量的错误。但它挑出的错误不是来自这段代码,而是当我关闭UAC时完全不同的代码--我知道这是因为它挑出的变量只在其他代码中出现。

我想我需要开一个全新的EA,手动输入所有这些代码并保存。
 

我终于实现了一个适当的工作EA。我最后把我的代码复制到记事本上,关掉UAC,然后把它粘贴到一个新的EA文件中。我知道了为什么我的函数会出现问题--我把一个int变量放在一个normalizeddouble里面。我不知道我不能这样做,但现在我知道了--我只花了一个星期的时间来解决这个问题!:/

总之,我写了这个。

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

如果(VariableRisk == false)Risk = StaticRisk。

我想知道它是否可以像这样缩短?

如果(VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

否则Risk = StaticRisk。

}

我还写了这个。

//---- 当做多时计算获利 位置的函数

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

如果(AutoCalcTakeProfit == true)

{

RefreshRates()。

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong)* RiskRewardRatio)。

Print("获利头寸计算成功")。

返回(TPPriceLong)。

}

如果(AutoCalcTakeProfit == false)

{

RefreshRates()。

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("静态获利头寸计算成功")。

返回(TPPriceLong)。

}

}

我想知道是否可以像这样缩短?

//---计算多头时的获利头寸的函数

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

RefreshRates()。

如果(AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong)* RiskRewardRatio)。

Print("获利头寸计算成功")。

否则 TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("静态获利头寸计算成功")。

返回(TPPriceLong)。

}

最后一个问题,为了给我的EA提供更多的灵活性,我想把我的时间框架定义为外部变量。例如,我的信号图是D1,而我的触发图是H4。所以在外部变量下,我可以这样做。

extern int SignalChart = PERIOD_D1;

外置int TriggerChart = PERIOD_H4;

然后通过这样的方式来引用它,例如。

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1)。

 

关于这部分:

然后通过这样的例子来引用它: SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1)。

是的,这是一个100%正确的使用方法(甚至可以说你使用的是一个封闭的条形图(在该例子中shift被设置为1),通过在测试中使用一个封闭的条形图,你将避免在多时间框架中使用开放条形图的通常陷阱)

crsnape@btinternet.com。
我终于实现了一个适当的工作EA。我最后把我的代码复制到记事本上,关掉UAC,然后把它粘贴到一个新的EA文件。我知道了为什么我的函数会出现问题--我把一个int变量放在一个normalizeddouble里面。我不知道我不能这样做,但现在我知道了--我只花了一个星期的时间来解决这个问题!:/

总之,我已经写了这个

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

如果(VariableRisk == false) Risk = StaticRisk;

我想知道它是否可以像这样缩短?

如果(VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

否则Risk = StaticRisk。

}

我还写了这个。

//---- 当做多时计算获利位置的函数

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

如果(AutoCalcTakeProfit == true)

{

RefreshRates()。

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong)* RiskRewardRatio)。

Print("获利头寸计算成功")。

返回(TPPriceLong)。

}

如果(AutoCalcTakeProfit == false)

{

RefreshRates()。

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("静态获利头寸计算成功")。

返回(TPPriceLong)。

}

}

我想知道是否可以像这样缩短?

//---计算多头时的获利头寸的函数

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

RefreshRates()。

如果(AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong)* RiskRewardRatio)。

Print("获利头寸计算成功")。

否则 TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("静态获利头寸计算成功")。

返回(TPPriceLong)。

}

最后一个问题,为了给我的EA提供更多的灵活性,我想把我的时间框架定义为外部变量。例如,我的信号图是D1,而我的触发图是H4。所以在外部变量下,我可以这样做。

extern int SignalChart = PERIOD_D1;

外置int TriggerChart = PERIOD_H4;

然后通过这样的方式来引用它,例如。

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
 

你好,我得到错误代码 4059。

[TD]功能在测试模式中不允许。

err_func_not_allowed_in_testing[/td]

4059

我做了一个搜索,但没有找到任何关于它的意思的信息?

 

你能帮助将以下代码添加到这个抛物线沙尔指标中吗?

Pip:
谢谢Mladen。

我将重新阅读你的帖子来理解,说实话,我读起来有点迷茫,但这很可能是我的无知在作祟。 如果我有任何问题,我将发布问题。

谢谢你,伙计。

谢谢。

皮普

亲爱的朋友。

你能帮我在这个抛物线警报parabolic_alert_mod.mq4INDICATOR 上添加以下代码吗?

我不是要找一个EA。如果可能的话,至少要把SHIFT选项加到指标中。

extern double TakeProfit = 50;

外部双数 Lots = 0.1;

extern double TrailingStop = 30;

外部双SAR_Step = 0.02;

外部双SAR_Maximum = 0.2;

extern double Shift=1;

附加的文件:
 

...

joelnelson

TakeProfit、Lots和TrailingStop与抛物线的计算方式无关(这些参数显然是从使用抛物线的EA的工作中提取的)。所以,如果你不是在寻找一个EA,就不可能以有意义的方式添加这些参数。

另外,参数中的移动是指被测试的条形图(抛物线SAR不移动,因为移动平均线通常可以移动),这些参数可能是为了调用一个内置的SAR,内置的SAR有以下形式

double iSAR([/TD] [TD]string symbol,int timeframe,double step,double maximum,int shift)

在这种情况下,移位1是为了测试抛物线沙尔的第一个闭合条的值。

joelnelson:
亲爱的朋友。

您能帮助将以下代码添加到这个抛物线SAR警报parabolic_alert_mod.mq4INDICATOR 吗?

我不是在寻找一个EA。如果可能的话,至少要把SHIFT选项加到指标中。

extern double TakeProfit = 50;

外部双数 Lots = 0.1;

extern double TrailingStop = 30;

外部双SAR_Step = 0.02;

外部双SAR_Maximum = 0.2。

外置双Shift=1。
 

...

这个错误可以由一些函数返回。

在测试中可能导致该错误的函数有以下几个。

市场信息

消息框

发送FTP

发送邮件

WindowIsVisible

查找窗口

WindowHandle

因此,对上述一些函数的调用引起了该错误

crsnape@btinternet.com:
嗨,我得到了错误代码4059。[TD]函数在测试模式下不允许。
ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]4059
我做了一个搜索,但找不到任何关于它的意思的更多信息?