初学者的问题 MQL5 MT5 MetaTrader 5 - 页 82

 

下午好。

关于mql5的问题-- 我如何使用止损和止盈触发器?

我发送了一个订单,修改了它,它被执行后就消失了。之后我无法改变sl或tp,因为OrderSelect没有找到订单。然后,触发器被触发,一个新的订单被创建,它自动实现了止损/止盈。

 
Forux: 关于mql5的问题-- 我如何使用止损和止盈触发器?

我发送订单,修改它,它被执行后就消失了。那么就没有机会改变sl了,tp-OrderSelect会弹出一个错误The order has not been found。然后,触发器被触发,一个新的订单被创建,自动执行止损/止盈。

mql5的意识形态是,在订单触发后,为选定的符号打开(改变,关闭)一个位置。所以在订单触发后(如果它没有导致平仓),我们应该对该位置进行处理。例如,使用PositionSelect()。为了改变止损和止盈水平,该仓位有自己的交易请求 变量。
 
Yedelkin:
mql5意识形态包括在订单触发后为选定的符号打开(改变,关闭)一个位置。因此,在订单触发后(如果它没有导致平仓),我们应该对该位置进行操作。例如,使用PositionSelect()。为了改变止损和止盈水平,该仓位有自己的交易请求 变量。

那么为什么止损不平仓呢?

2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 10:33:50     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:02   Cant select order 2 error 4754
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 10:33:50     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)

此外,它的成交量总是等于0.10手,即使在达到止损 后也是如此。

 

Forux: Тогда почему stopLoss не закрывает позицию?   Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss 

你怎么知道当SL被触发时,该头寸没有被平仓,其交易量保持不变?
 
Yedelkin:
那么你如何确定在触发SL后没有平仓,并且其成交量保持不变?

PositionGetDouble(POSITION_VOLUME)

2013.01.16 11:38:36     Core 1  disconnected
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:30   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:28   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:26   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:24   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:22   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 11:38:34     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:11   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:09   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:06   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:04   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:02   PositionGetDouble(POSITION_VOLUME) = 0.1
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 11:38:34     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
2013.01.16 11:38:34     Core 1    magic=12345
 
那么在再次使用PositionGetDouble(POSITION_VOLUME)之前,你是否按照《参考手册》的规定,更新了位置信息?
 
Yedelkin:
在再次使用PositionGetDouble(POSITION_VOLUME)之前,你是否按照《手册》中的规定更新位置信息?

如果我正确地理解了什么意思,那么是的,做以下事情

PositionSelect(_Symbol); // судя по справке обновляет кеш
Print("PositionGetDouble(POSITION_VOLUME) = " + PositionGetDouble(POSITION_VOLUME));
 
Forux: 如果我正确地理解了什么意思,那么是的,做以下事情
是的,这就是我所说的。也就是说,使用这样的结构10秒,仍然会返回Sl闭合位置的非零量?在这种情况下,还不知道它的情况 :(
 

试试这个。

if(PositionSelect(_Symbol)) 
   Print("myPositionGetDouble(POSITION_VOLUME) == " + PositionGetDouble(POSITION_VOLUME));
else 
   Print("Сведения о позиции не обнаружены");
 
Yedelkin:

像这样试试吧。

非常感谢您 :)

2013.01.16 12:47:49     Core 1  disconnected
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:30   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:28   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:26   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:24   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:22   Сведения о позиции не обнаружены
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   deal performed [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)
2013.01.16 12:47:45     Core 1  2010.05.03 00:01:21   stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:11   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:09   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:06   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:04   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:02   myPositionGetDouble(POSITION_VOLUME) == 0.1
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00    === add order === 2
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   deal performed [#2 buy 0.10 EURUSD at 1.33310]
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)
2013.01.16 12:47:45     Core 1  2010.05.03 00:00:00   exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
2013.01.16 12:47:45     Core 1    magic=12345