오류, 버그, 질문 - 페이지 2137

 

이익을 읽을 때 오류가 발생했습니다(또는 이미 이해하지 못하는 내용이 있음).

Advisor에는 다음과 같은 기능이 있습니다.

 bool Fn_profit_summ( double &profit_summ, bool is_buy, ulong magic, bool prnt= false ){
   profit_summ = 0 ;
   string str=(is_buy? "B" : "S" )+ " -> " ; 
   //-----------------------------             
   int total = PositionsTotal ();          
   for ( int i=total- 1 ; i>= 0 ; i--){
       const ulong tic= PositionGetTicket (i); if (tic<= 0 )     return ( false ); //--- asinchr
       if (! PositionSelectByTicket (tic)                   )   return ( false ); //--- asinchr 
       bool is_buy_ = ( PositionGetInteger ( POSITION_TYPE   )== POSITION_TYPE_BUY ); 
       if ( is_buy_                             !=  is_buy)   continue ; 
       if ( PositionGetInteger ( POSITION_MAGIC ) !=  magic )   continue ;
       if ( PositionGetSymbol ( POSITION_SYMBOL ) != _Symbol )   continue ;
      profit_summ += PositionGetDouble ( POSITION_PROFIT )+ PositionGetDouble ( POSITION_SWAP );
       str+= IntegerToString (tic)+ " - " + DoubleToString (( PositionGetDouble ( POSITION_PROFIT )+ PositionGetDouble ( POSITION_SWAP )), 2 )+ "/" ;
      }
   //-----------------------------
   if ( prnt) Print (str+ " --> " + DoubleToString (profit_summ, 2 ));
   return ( true );}

내가 보는 로그에서 :

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

다 좋은데 이건 매도주문이 아니라 매수주문의 이익입니다

티켓은 정확히 판매 주문(273, 로그에서와 같이)


함수에서 동기화를 확인하고 유형이 올바른 것으로 간주되지만 이익은 실제로 동일하지 않습니다. 그렇다면 이것은 일반적으로 종말입니다. 고객은 지정된 손익에 도달할 때만 별도로 매도 및 매수 포지션을 마감하고 계속해서 매도를 마감합니다. 이익을 매수합니다. 또한 창고는 실수로 배수될 수 있습니다.

(재 작업했는데 이미 나에게 보이는 경우 - 수정하십시오. 이것이 사실이고 그러한 치명적인 버그가 없기를 진심으로 바랍니다.)

 
Galina Bobro :

이익을 읽을 때 오류가 발생했습니다(또는 이미 이해하지 못하는 내용이 있음).

Advisor에는 다음과 같은 기능이 있습니다.

나는 로그에서 다음을 참조하십시오.

다 좋은데 이건 매도주문이 아니라 매수주문의 이익입니다

티켓은 주문을 정확히 판매합니다(로그에서와 같이 273)


함수에서 동기화를 확인하고 유형이 올바른 것으로 간주되지만 이익은 실제로 동일하지 않습니다. 그렇다면 이것은 일반적으로 종말입니다. 고객은 지정된 손익에 도달할 때만 별도로 매도 및 매수 포지션을 마감하고 지속적으로 매도를 마감합니다. 이익 매수를 취합니다. 또한, 창고는 사고로 배수될 수 있습니다

(재 작업했는데 이미 나에게 보이는 경우 - 수정하십시오. 이것이 사실이고 그러한 치명적인 버그가 없기를 진심으로 바랍니다.)

 string str=( ! is_buy? "B" : "S" )+ " -> " ;
 
Kirill Belousov :
이것은 무엇을 위한 것입니까? "출력 S를 구매하는 경우"가 필요한 이유는 무엇입니까?
 

나는 종종 사용자 정의 기호 로 작업합니다. 예를 들어, 이것을 디버깅해야 합니다. 이렇게 하려면 여기에 이름을 입력해야 합니다.


그러나 사용자 지정 기호(사용자 지정 기호뿐만 아니라)의 이름은 길고 복잡할 수 있으므로 키보드에서 입력할 때 어렵습니다. 기호 이름을 버퍼에 복사하는 메커니즘은 어디에도 없습니다. 따라서 이 메뉴에 "기호 이름 복사" 항목을 추가하는 것을 제안합니다.


추신: Tester Visualizer에 밀리초를 추가하십시오!

 
fxsaber :

추신: Tester Visualizer에 밀리초를 추가하십시오!

추가하자

 

런타임 에러

 struct A {
template < typename T>
         void Print (   T t ) { :: Print ( 2 ); }
        ~A() { Print ( 1 ); }
};
void OnStart () { A a; }

결과 : 1

예상: 2

 
A100 :

예상: void A::Print<int>(int):1

아마도 그것은 일반 인쇄물의 교활함과 관련이 있습니다. 동일한 방식으로 iCustom을 다시 로드합니다. 결과는 같을 것이라고 생각합니다.

Print, Comment , Alert, iCustom, ...에 대한 네임스페이스 - 뭔가 특별한 것 같습니다.

 
fxsaber :

아마도 그것은 일반 인쇄물의 교활함과 관련이 있습니다.

연결되지 않은

 void Print2( int )           { Print ( 1 ); }
struct A {
template < typename T>
         void Print2(   T t ) { Print ( 2 ); }
        ~A() { Print2( 1 ); }
};
void OnStart () { A a; }

결과는 같다

 

사용자 지정 기호 에 대한 SymbolInfoTick은 기록에 눈금이 있는 경우에도 빈 눈금을 반환합니다(CustomTicksAdd가 수행되지 않은 경우).

터미널 측에서 CustomTicksReplace 후에 히스토리의 마지막 틱(또는 해당 시간만)이 SymbolInfoTick에 의해 수행되는 것이 좋습니다.


나는 개발자에게이 문제에 대한 의견을 표현하도록 요청합니다.이 작업을 수행하는 것이 논리적 인 사람 - 터미널 또는 사용자?

터미널에서 볼 수 있기 때문입니다. 이렇게 하면 사용자가 코드에서 거의 감지할 수 없는 버그(잡은 버그)를 방지할 수 있습니다.

이제 예를 들어 기호의 마지막 시간은 이러한 방식으로 찾아야 합니다.

   ulong GetOriginalLastTime( void ) const
  {
     MqlTick Tick[ 1 ] = { 0 };

    :: SymbolInfoTick ( this .Symb, Tick[ 0 ]);
    
     if (!Tick[ 0 ].time_msc)
      :: CopyTicks ( this .Symb, Tick, COPY_TICKS_ALL , 0 , 1 );

     return (Tick[ 0 ].time_msc);
  }
 
A100 :

연결되지 않은

결과는 같다

네, 버그입니다. 그를 만난 적이 없다, tk. 나는 항상 이것을 메소드에 추가합니다.