错误、漏洞、问题 - 页 2380

 
bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...
 
fxsaber:

已经存在的逻辑被打破了。

这就更有意思了。

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = "")
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

如果我们不改变调用,注释将像以前一样被覆盖。

如果我们明确地传递NULL,我们会复制现有的注释

 
Slava:

已经存在的逻辑被违反了。

没有人使用这种逻辑。更有理由使用它。

 
Slava:

已经存在的逻辑被打破了。

这就更有意思了。

如果你不改变挑战,评论将像以前一样被覆盖。

如果明确传递NULL,则复制现有的注释

请看一下并

bool CTrade::PositionClose(const string symbol,const ulong deviation)

它尝试了10次(!!!)平仓:(我在调试时遇到了这种情况(净值、实值、开仓)。

2019.01.28 16:58:11.764 57384742        Si-3.19 buy     in      1.00    66492   98591318        -1.03   0.00    0.00            Price=66493
2019.01.28 17:01:14.586 57384818        Si-3.19 sell    out     1.00    66503   98591566        0.00    0.00    11.00           
2019.01.28 17:01:14.598 57384819        Si-3.19 sell    in      1.00    66502   98591567        -1.03   0.00    0.00            
2019.01.28 17:04:16.067 57385000        Si-3.19 buy     out     1.00    66514   98591891        0.00    0.00    -12.00          

突出显示的一行是第二次尝试平仓 :)你可以从日志中看到,它并不完全成功

目前,我正在使用它。

bool CTrade::PositionClose(const ulong ticket,const ulong deviation)

已经有一次试图通过代码来关闭位置。让用户控制位置关闭的事实似乎是正确的。10次尝试并不是万能的。

 
Slava:

已经存在的逻辑被打破了。

这就更有意思了。

如果我们不改变调用,注释将像以前一样被覆盖。

如果我们明确地传递NULL,我们会复制现有的注释

或者说,这将是更方便的。

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

然后不管谁需要它,都会用一个空值来覆盖它。默认值将被复制。

 

亲爱的开发者们!

该航站楼已更新至1983年。在创建图形对象(我正在创建垂直线和趋势线)时,测试器中出现了一些奇怪的错误。1981年,一切都很正常。

现在我得到了错误4001。

创建代码。

//+------------------------------------------------------------------+
//| Создаем трендовую линию на чарте                                                                                    |
//+------------------------------------------------------------------+
void DrawTrendLine(const string id,// Строковый идентификатор
                   const datetime t1,         // Время первой точки линии
                   const datetime t2,         // Время второй точки линии
                   const double price,// Цена обеих точек линии
                   const color clr            // Цвет линии
                   )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(t1)+"_"+TimeToString(t2);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//---
//Print( __FUNCTION__,": Создаем тренд-линию "+name+": t1 = "+TimeToString( t1 )+", t2 = "+TimeToString( t2 )+", price = "+DoubleToString( price ) );
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_TREND,0,t1,price,t2,price))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
      ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,false);
      ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(t1)+", t2 = "+TimeToString(t2)+", price = "+DoubleToString(price));
  }
//+------------------------------------------------------------------+
//| Создаем вертикальную линию на чарте                              |
//+------------------------------------------------------------------+
void DrawVLine( const string id,         // Строковый идентификатор
               const datetime time      // Время
               )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(time);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_VLINE,0,time,0))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,_vLineClr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(time));
  }
 
另外,测试器中的评论也不再显示。
 

给开发者的问题。

标准库的mytrade.PositionClose(conststring symbol,ulong deviation=ULONG_MAX)函数缺少一个注释参数:conststring comment=""。

这是一个疏忽吗?

 

在这里写似乎更合适。

https://www.mql5.com/ru/forum/302709#comment_10570043

Вопросы по проектам / папки Projects и Shared Projects
Вопросы по проектам / папки Projects и Shared Projects
  • 2019.02.08
  • www.mql5.com
Попытался начать работать с проектами, но что-то не ладится. Допустим, уже есть исходный файл с инклудами...
 
从文档中删除STATUS_TERMINAL_PATH