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

 
Andrey Barinov :

그런 다음 디버그하십시오. 거래 티켓을 인쇄 하고 테스터에서 실제로 선택된 것이 무엇인지 확인하십시오. 거래 유형별 로 필터를 추가합니다.

로트가 각각 올바르게 제공되면 티켓이 올바르게 선택됩니다.

 
Andrey Dik :

로트가 각각 올바르게 제공되면 티켓이 올바르게 선택됩니다.

아니요. 인과 아웃 모두 같은 로트를 가지고 있습니다. 그리고 이익이 없습니다.

여기 내 코드가 있습니다. 공장.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong LastOutDealTicket( const string symbol, const uint magic)
  {
//===============
   long lasttime= 0 ;
//===============

//===============
   ulong ticket= 0 ;
//===============

//===============
#ifdef __MQL5__
//===============
   :: HistorySelect ( 0 , TimeCurrent ()+ 60 );
//===============
   const int deals=:: HistoryDealsTotal ();
//===============
   for ( int i=deals- 1 ;i>= 0 ;i--)
     {
       //===============
       const ulong tempticket=:: HistoryDealGetTicket (i);
       //===============

       //===============
       if (:: HistoryDealGetInteger (tempticket, DEAL_ENTRY )!= DEAL_ENTRY_OUT || :: HistoryDealGetString (tempticket, DEAL_SYMBOL )!=symbol ||
         :: HistoryDealGetInteger (tempticket, DEAL_MAGIC )!=magic) continue ;
       //===============

       //===============
       if (:: MQLInfoInteger ( MQL_TESTER )) return (tempticket);
       //===============

       //===============
       if (:: HistoryDealGetInteger (tempticket, DEAL_TIME )<=lasttime) continue ;
       //===============

       //===============
      ticket=tempticket;
      lasttime=:: HistoryDealGetInteger (tempticket, DEAL_TIME );
       //===============
     }
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   const int ordershistory= OrdersHistoryTotal ();
//===============
   for ( int i=ordershistory- 1 ;i>= 0 ;i--)
     {
       //===============
       if (!:: OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) || :: OrderSymbol ()!=symbol || :: OrderMagicNumber ()!=magic || 
         (:: OrderType ()!= OP_SELL && :: OrderType ()!= OP_BUY )) continue ;
       //===============

       //===============
       if (:: MQLInfoInteger ( MQL_TESTER )) return (:: OrderTicket ());
       //===============

       //===============
       if (:: OrderCloseTime ()<=lasttime) continue ;
       //===============

       //===============
      ticket=:: OrderTicket ();
      lasttime=:: OrderCloseTime ();
       //===============
     }
//===============
#endif 
//===============

//===============
   return (ticket);
//===============
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastClosedProfit( const string symbol, const uint magic)
  {
//===============
   const ulong lastoutticket=::LastOutDealTicket(symbol,magic);
//===============

//===============
   if (lastoutticket<= 0 ) return ( 0 );
//===============

//===============
   double result= 0 ;
//===============

//===============
#ifdef __MQL5__
//===============
   result=:: HistoryDealGetDouble (lastoutticket, DEAL_PROFIT );
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   if (:: OrderSelect (( int )lastoutticket, SELECT_BY_TICKET , MODE_HISTORY ))result=:: OrderProfit ();
//===============
#endif 
//===============

//===============
   return (result);
//===============
  }
 
Andrey Barinov :

아니요. 인과 아웃 모두 같은 로트를 가지고 있습니다. 그리고 이익이 없습니다.

여기 내 코드가 있습니다. 공장.

나는 시도했지만 코드도 0.0을 제공합니다)))

헤징 계정이 있는 경우.
 
Andrey Dik :

나는 시도했지만 코드도 0.0을 제공합니다)))

헤징 계정이 있는 경우.

2009 빌드에서 모든 것을 확인했습니다. 내 코드는 출력해야 할 내용을 출력합니다. 0을 반환하면 거기에 0이 있는 것입니다.

 
Andrey Barinov :

2009 빌드에서 모든 것을 확인했습니다. 내 코드는 출력해야 할 내용을 출력합니다. 0을 반환하면 거기에 0이 있는 것입니다.

글쎄, 그와 같은 것, 역사상 0이 아닌 결과에 대한 닫힌 거래가 있지만 0을 제공합니다.

[삭제]  
Andrey Barinov :
안드레이 딕 :

문제가 DC 쪽에 있을 수 있다는 옵션이 있습니다.

 
Alexey Kozitsyn :

문제가 DC 쪽에 있을 수 있다는 옵션이 있습니다.

테스터에서 Metaquotes와 Robo에서 시도했습니다.

 
오류를 발견했습니다.. 제 문제는 제가 매직을 포지션 클로징 함수로 넘기지 않고 오프닝 함수로 넘겼기 때문에 결과적으로 매직으로 딜을 선택할 수 없었습니다..
 

Name 메서드로 초기화할 때 다음을 호출하는 다중 통화 교환에서 CSymbolInfo를 사용하는 경우:

 if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE ,m_tick_value))
   return ( false );
if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_PROFIT ,m_tick_value_profit))
   return ( false );
if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_LOSS ,m_tick_value_loss))
   return ( false );

그런 다음 USDCAD 기호 를 테스트하는 동안 오류가 생성됩니다.

no prices for symbol
 
Andrey Pogoreltsev :

Name 메서드로 초기화할 때 다음을 호출하는 다중 통화 교환에서 CSymbolInfo를 사용하는 경우:

그런 다음 USDCAD 기호를 테스트하는 동안 오류가 생성됩니다.

그들이 말하는 내용을 이해하는 사람이 있습니까?