오류, 버그, 질문 - 페이지 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( const string symbol, ulong deviation=ULONG_MAX) 에서 comment 매개변수가 누락되었습니다. const string 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 를 제거하십시오.