错误、漏洞、问题 - 页 1886

 
Vladimir Karputov:


那么问题是什么呢?

你在哪里可以看到,在数字 "i "下有一个位置,有这样那样的票,用于这样那样的符号?一般来说,除了简单的输出序列号外,你还可以输出票据和符号。


对于不同的情况,一个函数给出相同的值,这是否正常?

ZS:顺便说一下,帖子里有一个问题。

问题是,如果我选择买入,函数(PositionGetInteger(POSITION_TYPE))返回0

而如果你选择了一个不存在的位置,函数也会返回0

 
Alexandr Bryzgalov:
对于不同的情况,一个函数给出相同的值,这是否正常?


什么是 "不同情况"?并按我上面的建议做。

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

虫子、虫子、问题

Vladimir Karputov, 2017.05.12 11:15

...

一般来说,除了简单地输出序列号外,还要输出票据和符号。


 
Alexandr Bryzgalov:

我知道我需要检查,但事情可能发生......

位置获取积分

该函数返回先前用PositionGetSymbol或PositionSelect函数选择的一个开放位置的请求属性。位置属性应该是datetime,int类型。该函数有2种变体。

1.直接返回该属性的值。

longGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id// Property identifier
);

2.根据函数的成功,返回真或假。如果成功,属性值将被放置在目标变量中,该变量通过引用传递给最后一个参数。

boolPositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id,// property identifier
长&long_var//获取属性的值
);

参数

属性_id

位置属性的[in]标识符。该值可以是enumENUM_POSITION_PROPERTY_INTEGER中的一个值。

long_var

[out] 长类型的变量,取所请求的属性的值。

返回的值

一个值是tymelong。在执行不成功的情况下,返回0。

马吉克的情况比较薄。因此,做一个检查(PositionGetInteger(POSITION_TICKET) > 0)是符合逻辑的。
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
魔法的情况更微妙。因此,做一个检查(PositionGetInteger(POSITION_TICKET) > 0)是合乎逻辑的。

是的,你必须检查,这很好。

但当你写一个函数时,你总是试图确保它在不同情况下返回不同的值。

我认为在不同情况下从函数中得出相同的值是不正确的。
 
Alexandr Bryzgalov:

但当你写一个函数时,你总是试图为不同的情况获得不同的值。

这就是提到魔术的原因。如果PositionGetInteger(POSITION_MAGIC)出现错误,该如何返回?
 
fxsaber:
这就是魔术师提到它的原因。如果PositionGetInteger(POSITION_MAGIC)出现错误,该如何返回?
0--手动打开的位置,正确吗?
 
Alexandr Bryzgalov:

如果一个函数在不同情况下给出相同的值,可以吗?

ZS:顺便说一下,帖子里有一个问题。

问题是,如果我选择买入,函数(PositionGetInteger(POSITION_TYPE))返回0。

如果你选择了一个不存在的位置,函数也将返回0


所以第一个调用是在你保证了一个位置时使用的(就像你在循环中一样)。而这里是第二种形式的调用

bool  PositionGetInteger( 
   ENUM_POSITION_PROPERTY_INTEGER  property_id,     // идентификатор свойства 
   long&                           long_var         // сюда примем значение свойства 
   );

适用于职位被突然选中的情况。


做到这一点,相信你在 "结果 "变量中得到的东西--一切都会水到渠成。

//+------------------------------------------------------------------+
//|                                                         posi.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "http://sn-bot.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int tot=PositionsTotal();
   for(int i=0;i<tot;i++)
     {
      ulong OrderTicket_=PositionGetTicket(i);
      long cmd=PositionGetInteger(POSITION_TYPE);
      if(OrderTicket_>0 && cmd<=POSITION_TYPE_SELL)
         Print("N",i,"cmd=",cmd);

     }
   ulong OrderTicket_=PositionGetTicket(100);
   long cmd=-3;
   bool result=PositionGetInteger(POSITION_TYPE,cmd);
   if(result)
      Print("N100 cmd=",cmd);
  }
//+------------------------------------------------------------------+
 
Alexandr Bryzgalov:
0--位置是手动打开的,正确吗?
是的,但任何其他数值也会产生误导。
 
Vladimir Karputov:


所以第一个调用是在你保证了一个位置时使用的(就像你在循环中一样)。而这里是第二种形式的调用

适用于职位被突然选中的情况。


做到这一点,相信你在 "结果 "变量中得到的东西--一切都会落到实处。

这不是问题,问题是该函数在不同情况下返回相同的值。

我知道如何检查它。

原来的问题是,这到底是否正常?

SZY:一个错误可以在无意中产生,然后在100000个代码中你会厌倦寻找它。

什么,你不需要犯错吗?)

 
Alexandr Bryzgalov:

这不是问题,但该函数在不同情况下返回相同的值。

我知道如何检查它

问题原本是关于这到底是否正常?


在我看来,你并没有检查我给你看的代码。这样吧:你先检查一下,然后再问问题。