mql5语言的特点、微妙之处以及技巧 - 页 24

 
阿列克谢-维克多罗夫
这将带来什么变化?
关于贸易事件的声明完全符合这个话题的主题。
 

一个简单的短期网络故障会使仅基于监听交易事件的交易逻辑失效。

因此,OnTradeTransaction的专家们在推理上有些过火了。

这是交易逻辑的机制,将在任何平台上忠实地提供服务

关于交易、自动交易系统和交易策略测试的论坛

在EA中使用限价订单的好例子

fxsaber, 2017.01.02 23:12

我在很多时候只通过挂单进行交易。根本不做任何处理。OrderSend返回-1(MT4或MT5+MT4Orders)--没有成功,还好,因为下一步还是要完全看交易环境如果没有等待/位置,但应该有,我们就将它与它应该 处于的状态同步--相应的OrderSend被发送。

通过这种方法,回归、部分执行等所有细微差别都得到了考虑。而且实施起来非常简单和高效。它从来没有失败过。

我没有试过异步方法,这里的难度不是很大,但我不能确定。

 
fxsaber:

一个简单的短期网络故障会使仅基于监听交易事件的交易逻辑失效。

因此,OnTradeTransaction的专家们的推理有点过头。

这是交易逻辑的机制,将在任何平台上忠实地提供服务。

是的,唯一可靠的方法是检查交易账户状态。所有的OnTrade*事件都不能为管理交易订单 提供一个可靠的机制。

至于异步操作--其唯一的优势是,你可以连续发送交易订单,而不需要等待之前订单的结果。但控制它们的执行也不能依靠事件,在这一点上与检查同步命令的结果没有区别。

交易账户的状态是我们提出请求时的情况(我们自己提出请求),如果网络出现问题--没什么大不了的,我们可以提出请求,直到网络恢复。另一方面,依靠事件,使我们完全依赖外部因素。

 

fxsaber:
贸易-事件的这种情况与本分支的主题完全一致。

我一点也不反对,我只是说,没有多少人需要抓住这样的细微之处。

fxsaber:

一个简单的短期网络故障会使仅基于监听交易事件的交易逻辑失效。

因此,OnTradeTransaction的专家们在推理上有些过火了。

这是交易逻辑的机制,将在任何平台上忠实地提供服务。

我也不打算劝阻任何人。特别是我认为控制从服务器返回是非常必要的。只是有不同的方法。你的建议是正确的,但不是万能的。

也许这是我的生活原则:"我可能做得更糟,但以我自己的方式。如果发生任何事情,将没有人可以指责。"

 

我习惯于使用MarketInfo(_Symbol, MODE_TICKVALUE) 函数来获取4中符号的点值。我还没有遇到任何问题。

在MT5的不同经纪商中,它并不那么统一。我在两个不同的账户上对欧元兑美元和美元兑日元运行了一个小脚本。注意点值和合同大小。

这是一个来自MQ的模拟账户。

这是Just2Trade的 一个模拟账户

有没有人有一个通用的功能,可以使点值看起来相同?
我知道一个刻度的大小和合同的大小应该被考虑,也许还有其他的东西?

也就是说,如果是欧元兑美元,而存款是以美元计价的--那么1个五位数的点就等于1个多。

而在什么情况下我们应该使用SYMBOL_TRADE_TICK_VALUE_PROFITSYMBOL_TRADE_TICK_VALUE_LOSS
 
Vasiliy Pushkaryov:

我习惯于使用MarketInfo(_Symbol, MODE_TICKVALUE) 函数来获取4中符号的点值。我还没有遇到任何问题。

在MT5的不同经纪商中,它并不那么统一。我在两个不同的账户上对欧元兑美元和美元兑日元运行了一个小脚本。注意点值和合同大小。

这是一个来自MQ的模拟账户。

这是Just2Trade的 一个模拟账户

有没有人有一个通用的功能,可以使点值看起来相同?
我知道一个刻度的大小和合同的大小应该被考虑,也许还有其他的东西?

也就是说,如果是欧元兑美元,而存款是以美元计价的--那么1个五位数的点就等于1个多。

什么时候使用SYMBOL_TRADE_TICK_VALUE_PROFITSYMBOL_TRADE_TICK_VALUE_LOSS 正确?
当 "Nikonor's Office "的合同规模与正常情况下一样,达到数十万时,那么积分值也会与正常情况下一样。同时,你可以将你所得到的东西乘以10万,得到你想要的东西。
 
阿列克谢-维克多罗夫
当 "nikonor的办公室 "将有一个像正常的合同规模,十万,那么点值将像正常的。同时,你可以将你所得到的东西乘以10万,得到你想要的东西。
我也曾经为此而挣扎。MetaQuotes-Demo有一种合约大小;Just2Trade有另一种。对于外汇而言,它是一个,对于股票而言,等等。- 另一个用于外汇,等等。关于如何计算一切的参考资料中所写的内容并没有加起来,让人哭笑不得。而客户正在等待...所以我们商定,他不会自动计算,而是直接乘以100。而且只在他的Just2Trade上。还是不明白这一招......:((
 
阿尔乔姆-特里什金
我也曾经为此而挣扎。对于MetaQuotes-Demo来说,合约大小是一个,对于Just2Trade来说是另一个。对于外汇来说是一样的,但对于股票和其他方面来说是不同的。- 这是不一样的,一个用于外汇,一个用于股票,等等。关于如何计算一切的参考资料中所写的内容并没有加起来,哭笑不得。而客户正在等待...所以我们商定,他不会自动计算,而是直接乘以100。而且只在他的Just2Trade上。还是不明白这一招......:((

有什么不清楚的呢?

标准合约的大小=1 买了1000手得到0.00001*1000/1=0.01的1点

另一个选择,合约大小=100000,买入0.01手(100000*0.01=1000)得到1个点 1*1000/100000=0.01

这是针对5/3位数的。

ps;而在insta,标准合约的规模是10000。
 
阿列克谢-维克多罗夫

有什么不清楚的呢?

标准合约大小=1,买入1000手,收到0.00001*1000/1=0.01的1点。

另一个选择,合约大小=100000,买入0.01手(100000*0.01=1000)得到1个点 1*1000/100000=0.01

这是针对5/3位数的。

ps;而在Insta中,标准的合同规模是10000。
我明白了,我只是不习惯于3000或5000手。我必须习惯于此。
 
Vasiliy Pushkaryov:
我明白了,我只是不习惯使用3000或5000手。你必须习惯于它。

如果你不习惯,你可以这样写

input double               lot         =  0.1;
input int                  take        =  100;   // TakeProfit

double takePips, contract;

/*******************Expert initialization function*******************/
int OnInit()
{
   contract = 100000/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE)*lot;
    takePips = take*_Point;
   return(INIT_SUCCEEDED);
}/*******************************************************************/

并在OrderSend()函数 中发送一个合同变量,不管庄家的心血来潮。