if( GlobalVariableCheck( "PullTag ( Do Not Delete )" ) ) {
PullNumber = GlobalVariableGet( "PullTag ( Do Not Delete )" );
} else {
PullNumber = 100;
} // End If, GlobalVariableCheck:
GlobalVariableSet( "PullTag ( Do Not Delete )", PullNumber + 1 );
if( GlobalVariableGet( "PullTag ( Do Not Delete )" ) > 999 ) {
GlobalVariableSet( "PullTag ( Do Not Delete )", 100 );
} // End If, GlobalVariableSet:
return( PullNumber );
} // End Function, GetTagNumber:
OrderID变量必须在init()函数之外声明,这样程序的其他部分就能看到它的值。
你可以将下限和上限(100-999)改为你想要的任何值,或者去掉上限,它将继续增加而不重置。
变量名称的原因... "PullTag ( Do Not Delete )" ... 是因为你现在可以在EA之外查看和删除全局变量。不要删除是一个警告信息,在查看全局变量时显示出来。如果你删除了PullTag变量,它将在下一次EA启动时再次以100为单位重新启动。全局变量即使在你关闭工作站的时候也会保留其值。
EMA交叉测试器
嗨,Codersguru!
首先,我想感谢你提供的出色的MT学习课程。 如果没有这些课程,我不知道我怎么会这么快就学会了mql。 你是男人!!。
最近,我一直在为EA编程,以便能够以多种不同的方式进行交易,这样我就能够在真实账户上测试EA,同时在同一货币对和同一TF上运行多种设置。 我喜欢EMA的想法,并且我编码了一个使用你的标准的EA。 这个版本将能够在同一TF/PAIR或任何组合上以不同的设置交易几乎无限的EA实例。 该程序在MT中设置了一个GlobalVariable,并使用它来创建一个唯一的ID,然后将其插入到已开仓交易的评论中。 然后EA根据这个唯一的ID来处理订单。
此外,我还添加了一个函数 来编写一个类似于交易报表的csv文件,其中包括测试时的设置(专家/文件夹)。这样交易后,会有很多来自所有不同EA的交易,所以基本上这是你去获得准确的交易报表的地方。
开箱后,它的功能应该和V2一样。 有一些额外的功能是我添加的,以备有人想上线。
我很感谢你所做的一切,我很想知道你对这个问题有什么想法!
尼克
嗨,亨德里克
能否请你告诉我你的设置和TF...
谢谢你嗨,Hellkas。
这些是我的货币对(所有货币对的时间框架都是一天)。
usdjpy, eurchf, audusd, euraud, usdcad, usdchf, audcad, eurchf.
设置:默认;除了逆转=True和手数=0,1
问候!
嗨,Codersguru!
该程序在MT中设置了一个GlobalVariable,并使用它来创建一个唯一的ID,然后将其插入到开仓交易的注释中。 然后EA根据这个唯一的ID来处理订单。
尼Nic
这是跟踪你的订单和你的EA可能创建的任何独立文件的好方法,再次表明你有能力看到别人可能看不到的东西。我写这篇文章的原因是,我做了同样的事情,使用OrderComment()来标记交易,并发现它带来了未来的问题。在这一点上。
1)评论字段是一个字符串参数,你的经纪人可以附加他们自己的评论。例如,当你的订单在获利或止损时被关闭,经纪人将附加一个信息到你的评论字段。如果你没有意识到这一点,如果你使用你的原始评论访问你的账户交易历史,而不知道它也被附加了,可能会导致一些错误。
2) GlobalVariable()函数的类型是双数,当作为OrderComment的输入时,它被转换为字符串类型。混合变量类型不是一个好的编程习惯,因为如果你回去改变你的代码,这可能导致未来的变量混合错误。
为了摆脱上述情况,我使用了OrderSend()函数 的MagicNumber字段。下面的代码是我用来生成一个唯一的数字的函数调用,正如你所描述的,用于订单追踪和记录。它将生成一个从100到999的数字。一旦该号码被使用,新号码就会递增一个,供下一个EA使用。如果你把对这个函数的调用放在你代码的init()函数区,它在启动时只被看到一次,并将一直伴随着你的EA直到它关闭。
例子。
int OrderID = 0;
int init() {
OrderID = GetTagNumber()
...
...
...
返回( 0 )。
}// 结束init, 函数。
然后,你可以在任何时候使用OrderID来标记你的交易、文件条目等。
//«« <<<>>> »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
int
GetTagNumber() { // Sets the SystemTag To....
int PullNumber = 0;
if( GlobalVariableCheck( "PullTag ( Do Not Delete )" ) ) {
PullNumber = GlobalVariableGet( "PullTag ( Do Not Delete )" );
} else {
PullNumber = 100;
} // End If, GlobalVariableCheck:
GlobalVariableSet( "PullTag ( Do Not Delete )", PullNumber + 1 );
if( GlobalVariableGet( "PullTag ( Do Not Delete )" ) > 999 ) {
GlobalVariableSet( "PullTag ( Do Not Delete )", 100 );
} // End If, GlobalVariableSet:
return( PullNumber );
} // End Function, GetTagNumber:
OrderID变量必须在init()函数之外声明,这样程序的其他部分就能看到它的值。
你可以将下限和上限(100-999)改为你想要的任何值,或者去掉上限,它将继续增加而不重置。
变量名称的原因... "PullTag ( Do Not Delete )" ... 是因为你现在可以在EA之外查看和删除全局变量。不要删除是一个警告信息,在查看全局变量时显示出来。如果你删除了PullTag变量,它将在下一次EA启动时再次以100为单位重新启动。全局变量即使在你关闭工作站的时候也会保留其值。
牛郎织女
像往常一样,我说得太多了。
...就在我想知道为什么SL/TP没有在历史上显示出来的时候。
谢谢你的真知灼见! 我将把它纳入我的代码中。 非常感谢你成为如此有价值的资源!! 
尼
如果你打开你的交易终端 窗口,点击账户历史标签,>右击终端的任何区域,>点击菜单标签>评论。你将能够在你的终端窗口中查看你的评论和来自你的经纪人的任何附加评论(他们通常在[....])。
牛郎织女
是的......我注意到,所有的TP/SL都被附加为[tp][sl]。 我更喜欢你的代码。
伙计们,请。
请帮我解决一些问题。为什么在这个EA中包含逆转选项?我只是不明白为什么要在两个EMA交叉的点上做反向交易...
谢谢...
到目前为止,使用REVERSAL true = 我已经赚了超过100个点,但这很疯狂。我的意思是,当EMA交叉点出现时,这个EA会开出绝对相反的交易,所以你会赔钱......
顺势而为与逆势而为
请大家注意。
请帮助我解决一些问题。为什么在这个EA中包含了反转选项?我只是不明白为什么要在两个EMA交叉的点上做反向交易...
谢谢...
到目前为止,使用REVERSAL true = 我已经赚了超过100个点,但这很疯狂。我的意思是,当EMA交叉点出现时,这个EA会开出绝对相反的交易,所以你会赔钱......嗯,你可以选择顺势工作。
我认为,在反趋势中,我们在最好的价格开仓,并在开始时承受一些损失,然后我们获得我们可以获得的最大金额
数据不足!
音频。
请不要哭,
。
我认为你没有足够的历史数据。
给我的后向测试和前向测试看一下
!