CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
if( !PositionInfoKotiryemii.Select("SBRF-3.18") )Print("Не удалось выбрать позицию по символ SBRF-3.18 ");
if( !PositionInfoVedygii.Select("SBRF-12.17") )Print("Не удалось выбрать позицию по символ SBRF-12.17 ");
Print(PositionInfoKotiryemii.Symbol()," Объем ",PositionInfoKotiryemii.Volume()," ",PositionInfoVedygii.Symbol()," Объем ",PositionInfoVedygii.Volume());
CPositionInfo PositionInfoKotiryemii,PositionInfoVedygii;
if( !PositionInfoVedygii.Select("SBRF-12.17") )Print("Не удалось выбрать позицию по символ SBRF-12.17 ");
if( !PositionInfoKotiryemii.Select("SBRF-3.18") )Print("Не удалось выбрать позицию по символ SBRF-3.18 ");
Print(PositionInfoKotiryemii.Symbol()," Объем ",PositionInfoKotiryemii.Volume()," ",PositionInfoVedygii.Symbol()," Объем ",PositionInfoVedygii.Volume());
На данной вкладке отображается журнал компиляции программ, содержащий сообщения об использованных при компиляции файлах, а также ошибки и предупреждения, возникшие в этом процессе. — описание события. Иконки, расположенные слева от описания свидетельствуют о типе события. означает ошибку, — предупреждение, а — информационное сообщение; Если...
我只是想不明白,这是否正常。
这里有很多难以理解的事情。特别是在处理交易顺序时,我发现在一些情况下存在着一些不一致的地方。
在我看来,最好的办法是组织你的交易控制:记住你的交易订单,监测订单和头寸的构成,只需在相关列表中出现的事实。例如,当开立头寸时,首先正式开立市场订单,然后转为头寸。然而,在这种机关枪式的系列交易中,有一种情况是已经开仓了,但订单还没有关闭。显然这是同一个事件,但交易是零散地组织起来的,按顺序发布,用这种方法原则上不可能正确反映市场订单向头寸的转变。
说到鸟类。
你知道在这些交易中发出的市价订单的价格为零吗?
例如,一个人想在1.2000开一个 买入头寸,Sl=1.1000,Tr=1.3000。
当这个交易被执行时,交易出现的第一件事是市场订单被列出,数据如下:
Sl= 1.1000, Tr= 1.3000,即有指定的数字和Price=0(等于零)。只是一种零价格的市场订单 :)并且想你所想。
为了方便。从MqlTradeTransaction 中调用一个小函数。所需的元素是通过搜索类的元素在那里找到的。而对于这个元素,有一个类函数被调用,它做一些有用的事情。
请更详细地描述你到底想得到什么?你为什么要从OnTradeTransaction调用一些东西?
首先只是在文字上,然后我们会在正确的方向上纠正它。
用户的函数Abc()被执行,它实现了一个很长的(以时间计算)算法。
在 这个功能的执行过程中,会发生一些事件,例如--交易、定时器等。
有没有可能在没有完成执行Abc()函数的情况下知道这些事件的发生?
不,当一个函数被计算时,其他的都将被跳过。
它类似于Sleep()函数--也就是说,当你的函数正在计算很长的时间时,它的行为类似于Sleep--所有其他事件都将被跳过。
...
在OnTradeTransaction中,绝对是一切透明。
首先:MqlTradeTransaction结构根据交易类型(ENUM_TRADE_TRANSACTION_TYPE)以不同方式填充。
read here:Structure of a Trade Transaction (MqlTradeTransaction)
第二:为了使结果可视化,我们可以从OrderSendAsync 的例子中提取这个代码块
并将其粘贴到一个可以附加到图表上的专家顾问中。然后你可以手动开仓/平仓,并在专家标签中查看打印结果。
不,当一个函数被计算时,其他的都将被跳过。
它类似于Sleep()函数--也就是说,当你的函数正在计算很长的时间时,它的行为与Sleep是一样的--所有其余的事件都将被跳过。
谢谢你,这很不幸。
那么如何有效地利用PC资源呢?又是循环的代码和周期性的参数轮询?
在OnTradeTransaction中,绝对是一切透明。
谢谢你的回答,我差不多就是这么做的。到目前为止,问题多于见解......
请更详细地描述你到底想得到什么?你为什么要从OnTradeTransaction调用一些东西?
首先只是在文字上,然后我们会在正确的方向上纠正它。
我知道问题不在OnTradeTransaction上。看看我这里有多乱。
以下是代码。
下面是其执行的结果
2017.09.22 10:30:12 按符号选择位置失败 SBRF-12.17
2017.09.22 10:30:12成交量 0.0 成交量 0.0
我调换了第2行和第3行,也就是说,现在的代码是
我得到一个这样的结果。
2017.09.22 10:30:12 按符号选择位置失败 SBRF-12.17
2017.09.22 10:30:12SBRF-3.18卷1.0 SBRF-3.18卷1.0
在这两种情况下,编译器 都不会产生警告。附上80行专家顾问代码和测试设置。经纪人BCS。1730年的版本。
我意识到,问题不在OnTradeTransaction上。看看我有什么乱七八糟的事情发生。
下面是代码。
下面是其执行的结果
2017.09.22 10:30:12 按符号选择位置失败 SBRF-12.17
2017.09.22 10:30:12成交量 0.0 成交量 0.0
我调换了第2行和第3行,也就是说,现在的代码是
我得到一个这样的结果。
2017.09.22 10:30:12 按符号选择位置失败 SBRF-12.17
2017.09.22 10:30:12SBRF-3.18卷1.0 SBRF-3.18卷1.0
在这两种情况下,编译器 都不会产生警告。附上80行专家顾问代码和测试设置。经纪人BCS。1730年的版本。
这个错误似乎是在试图获得超过1个位置的信息,在1行(打印)。
在任何时候,只有1个(选定的)位置的信息是可用的。
- 在第二种情况下,它是正确的,因为最后一个 选择返回真,而你没有检查。
- 而在第一种情况下:最后一个Select返回false ,你也没有检查,结果是不可预测的。
..... 显然Select==false会重置之前Select==true的信息。