为我把这个MT3转换成MT4 - 非常容易 - 页 2

 

为我把这个MT3转换成MT4 - 非常容易

我正在考虑从MT4转换到MT3。

我刚刚完成编辑我的第一个专家顾问。

我花了大约4周时间学习了足够多的MT和MQL4知识,最终将我的策略编程完成,但现在我想我可能只是将程序转换为MQL2。

从我在这个论坛上读到的内容来看,我不认为MT4有什么优势。

我所读到的,以及通过回测我的EA所了解到的,是MT4策略测试器 并不工作。仅仅因为这个原因,我认为多花几天时间进行切换才有意义,这样我就可以用MT3进行准确的回测了。

我已经下载并安装了MT3,并看了一下编辑器的字典。我可以看到,MT3的功能比MT4少,但我认为这不会是一个大问题。

我的MQL4 EA的一个功能是我非常依赖的,就是用于存储原始挂单价格的OrderMagicNumber,当订单被执行时,价格会随着滑点而改变。

MQL2订单没有OrderMagicNumber,但我确实注意到在MQL2字典里有一个名为OrderValue的函数,在其描述中,该函数可以检索订单的注释(VAL_COMMENT)。

如果我可以使用注释来存储首选价格,我想我可以切换到MT3。然而,我无法在字典中找到如何设置订单注释。SetOrder函数描述中没有将 "评论 "列为其参数之一。

有谁熟悉MQL2的这一功能,可以告诉我如何设置订单注释?

 
BC Brett:

从我在这个论坛上读到的内容来看,我不认为MT4有什么优势。

我所读到的,以及通过回测我的EA所了解到的,是MT4策略测试器并不工作。仅仅因为这个原因,我认为多花几天时间进行转换才有意义,这样我就可以用MT3进行准确的回测。

那么,你在哪里看到MT3回测器 比MT4回测器更可靠?

我认为你在这方面的信息非常错误!

MT4回测可以非常可靠,但这取决于你拥有的历史数据的质量和你的建模质量%。

您不能像在MT4编程中那样,在MQL2中为发送的订单添加 "评论 "或指定 "魔法数字"。MT4编程比MQL2编程更先进,为什么要向后退?

 

你可能想在这里阅读关于MT4回溯测试的内容:http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8

(如果你不能访问该页面,你需要注册成为会员 - 这是免费的)

 

根据我在这里和那里收集到的信息,对回测有点认真的人使用WealthLab、Amibroker或MetaStocks等软件,而不是mt3或mt4。

也许如果你不使用任何股价内的数据,mt4的回测是可以的。例如,如果你使用日线,你应该只使用日线的开盘和收盘值(如果你设置了止损或止盈,甚至不使用高点和低点)。没有其他东西。

原因是,尽管他们的 "建模质量 "可能会说,唯一使用真实数据的mt4回测方法是"仅开盘价"。

"每点 "和 "控制点 "的方法是很好的童话故事。就个人而言,我不会根据童话般的数据回测来交易资金。

我还在学习mt4,但根据我的经验,我不会以任何其他方式使用mt4回测。我甚至不能100%确定我建议的方式是否100%可靠。如果我想做良好的回测,我会得到一个回测软件。

关于mt4与mt3的实盘交易:从我在这里和那里收集到的信息来看;-)mt4不可信。有时,mt4说没有执行的订单,实际上是被执行了!这是由经纪人报告的。这是由经纪人报告的。如果这是真的,那么提供mt4实时交易的经纪商并不认真。或者,他们确保mt4的错误没有发生在他们的平台上,这也是可能的。

另一方面,"我在这里和那里收集到的信息 "表明,用mt3进行实盘交易是可能的。

 

为我把这个MT3转换成MT4 - 非常容易

大家好,如果有人能帮我把这个转换为MT4语言,我将非常感激--我们的经纪人刚刚升级为MT4。

以下是代码。

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

非常感谢!

 
scott TTM:
大家好,如果有人能把这个转换成MT4语言,我将非常感激--我们的经纪人刚刚升级到MT4。

以下是代码。

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

非常感谢!

嗨,斯科特...

试试这个....

附加的文件:
ttm_stoch.mq4  5 kb
 

Hellkas,

恐怕这并不完全可行。 请到www.compoundfx.com/mt3stoch.jpg,看看它在MT3图表上应该是什么样子的--我试图上传这个,但没有成功。

谢谢你的努力,也许这能帮助你?

当我在MT4中绘制它时,我只看到一条洋红色的线,而不是青色的--尽管我看到输入是存在的。

斯科特

 

你好。

首先hellkas 在用我的工具Mql2Mq4转换mql指标后,我很感激你保留了我的文件头!!。

那么转换后的指标不能正常工作是正常的,如果你在Metatrade 4的专家信息日志TabSheet(面板)中查看,你会看到 "Zero Devide exception",就像这张图。在指标脚本中,你使用了除法运算符,有些时候是NULL:-(这就是为什么会出现这个错误,我再说一遍,在Metatrade 3中,没有产生任何异常,但在Metatrade 4中却有。

我把转换后的程序放在MT3上运行,你可以看到我做了什么改变。

再见

附加的文件:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

yousky。

非常感谢,它看起来很完美! 我很欣赏它。

-SB

 

yousky。

好吧,经过进一步审查,它还没有完全达到目的。 它在MT4上仍然给我错误的读数,即线条没有在它们应该的地方交叉。 我使用了你放在这里的代码。 有什么想法吗?

庄家