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

 
Ashes :

결과는 실제로 분석에 시간을 소비하지 않고 지표를 사용하지 않는 가장 단순한 Expert Advisor에서 얻은 것임을 상기시켜 드리겠습니다.

어드바이저 코드를 공개하십시오.
 
Ashes :

결과는 실제로 분석에 시간을 소비하지 않고 지표를 사용하지 않는 가장 단순한 Expert Advisor에서 얻은 것임을 상기시켜 드리겠습니다.

비교하려고:

Windows 7 시스템에서 10,000번의 거래로 이 테스트를 실행한 Intel Pentium Dual-Core E5400 @ 2.70GHz, 2038MB(PR111)는 472866ms가 걸렸습니다.

위와 같은 점을 감안할 때 15분의 장벽과 테스터의 특성(딜이 충분했다면)으로 인해 2010년 우승 후보 중 일부가 부당하게 탈락했을 가능성이 있다.

** - 테스트 완료 후 여러 번 테스트를 진행했을 때 거래가 표시된 심볼의 차트가 표시되지 않았습니다.

그런 결과를 보여줄 "간단한 전문가 고문"을 작성하지 못했습니다. 내 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                  TimeOnDeals.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input int       deals= 1000 ;
input double    lot= 0.01 ;
uint start;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   start= GetTickCount ();
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   PrintFormat ( "deals=%d  time=%d" ,deals,( GetTickCount ()-start));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
   return ( GetTickCount ()-start);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   static int done_deals= 0 ;
//---
   if (done_deals<deals)
     {
       if (Buy(lot)) done_deals++;
       else Print ( "Не удалось выполнить Buy, ошибка " , GetLastError ());
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Buy( double v)
  {
   double price= SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   MqlTradeRequest    m_request;         // request data
   MqlTradeResult     m_result;           // result data   
   m_request.action= TRADE_ACTION_DEAL ;
   m_request.symbol      = _Symbol ;
   m_request.magic       = 555 ;
   m_request.volume      =v;
   m_request.type        = ORDER_TYPE_BUY ;
   m_request.price       =price;
   m_request.sl          = 0 ;
   m_request.tp          = 0 ;
   m_request.deviation   = 10 ;
   return ( OrderSend (m_request,m_result));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
bool Sell( double v)
  {
   double price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
   MqlTradeRequest    m_request;         // request data
   MqlTradeResult     m_result;           // result data   
   m_request.action= TRADE_ACTION_DEAL ;
   m_request.symbol      = _Symbol ;
   m_request.magic       = 555 ;
   m_request.volume      =v;
   m_request.type        = ORDER_TYPE_SELL ;
   m_request.price       =price;
   m_request.sl          = 0 ;
   m_request.tp          = 0 ;
   m_request.deviation   = 10 ;
   return ( OrderSend (m_request,m_result));
  }
//+------------------------------------------------------------------+


다음은 최적화 결과입니다. 결과 열에는 실행 시간이 밀리초 단위로 표시됩니다.


 
Rosh :

그런 결과를 보여줄 "간단한 전문가 고문"을 작성하지 못했습니다. 내 코드는 다음과 같습니다.

다음은 최적화 결과입니다. 결과 열에는 실행 시간이 밀리초 단위로 표시됩니다.

흥미로운...

알렉산더 :
어드바이저 코드를 공개하십시오.

전문가 고문은 자동 거래 챔피언십 2010을 위한 전문가 고문을 빠르게 작성하는 방법 문서의 템플릿을 기반으로 합니다.

CExpertAdvisor 클래스는 변경 없이 사용됩니다. 아마도 클래스 사용의 부작용일까요? 테스트 결과, 특정 임계값을 초과한 후 감속이 시작되는 것으로 보입니다. 아마도 이것은 메모리/가비지 수집의 재할당이 영향을 미치기 시작하는 소진 후에 제한된 크기의 트랜잭션을 위한 테이블입니까?

추신. EA는 Alpari-Demo 계정(제로 마진)의 기능을 사용하며, 그렇지 않으면 거래 수가 변경될 수 있음을 다시 한 번 알려드립니다.

파일:
 
Rosh :

그런 결과를 보여줄 "간단한 전문가 고문"을 작성하지 못했습니다. 내 코드는 다음과 같습니다.

다음은 최적화 결과입니다. 결과 열에는 실행 시간이 밀리초 단위로 표시됩니다.

XLSX에서도 출력에 문제가 있습니까?

 
Rosh :

그런 결과를 보여줄 "간단한 전문가 고문"을 작성하지 못했습니다. 내 코드는 다음과 같습니다.

다음은 최적화 결과입니다. 결과 열에는 실행 시간이 밀리초 단위로 표시됩니다.

표 - 최적화 프로그램의 결과: Log OFF?. 로깅의 부작용?

 
Ashes :


전문가 고문은 자동 거래 챔피언십 2010을 위한 전문가 고문을 빠르게 작성하는 방법 문서의 템플릿을 기반으로 합니다.

CExpertAdvisor 클래스는 변경 없이 사용됩니다. 아마도 클래스 사용의 부작용일까요? 테스트 결과, 특정 임계값을 초과한 후 감속이 시작되는 것으로 보입니다. 아마도 이것은 메모리/가비지 수집의 재할당이 영향을 미치기 시작하는 소진 후에 제한된 크기의 트랜잭션을 위한 테이블입니까?

추신. EA는 Alpari-Demo 계정(제로 마진)의 기능을 사용하며, 그렇지 않으면 거래 수가 변경될 수 있음을 다시 한 번 알려드립니다.

이 클래스에는 GetDealByOrder(ulong order) 메서드가 포함되어 있습니다.

 ulong CExpertAdvisor::GetDealByOrder( ulong order) // получение тикета сделки по тикету ордера
  {
   PositionSelect (m_smb);
   HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));
   uint total= HistoryDealsTotal ();
   for ( uint i= 0 ; i<total; i++)
     {
       ulong deal= HistoryDealGetTicket (i);
       if (order== HistoryDealGetInteger (deal, DEAL_ORDER ))
         return (deal);                             // запомнили тикет сделки 
     }
   return ( 0 );
  }

각 트랜잭션에서 호출됩니다. 따라서 트랜잭션의 전체 이력을 정리할 때마다 트랜잭션 수의 제곱에 비례하여 테스트 시간이 느려집니다.

최적화 또는 테스트가 필요한 Expert Advisor에서는 시간 손실이 불가피하므로 사용하지 않는 것이 좋습니다. 이러한 경우에는 이러한 호출을 알고리즘적으로 대체하는 것이 좋습니다.

 
Rosh :

이 클래스에는 GetDealByOrder(ulong order) 메서드가 포함되어 있습니다.

각 트랜잭션에서 호출됩니다. 따라서 트랜잭션의 전체 이력을 정리할 때마다 트랜잭션 수의 제곱에 비례하여 테스트 시간이 느려집니다.

최적화 또는 테스트가 필요한 Expert Advisor에서는 시간 손실이 불가피하므로 사용하지 않는 것이 좋습니다. 이러한 경우에는 이러한 호출을 알고리즘적으로 대체하는 것이 좋습니다.

저것들. EA 템플릿을 사용하는 모든 사람들이 "고통을 겪었습니다"...

XLSX는 어떻습니까? 전문가 코드는 관련이 없습니까?

 
Rosh :

이 클래스에는 GetDealByOrder(ulong order) 메서드가 포함되어 있습니다.

  ulong CExpertAdvisor::GetDealByOrder( ulong order) // получение тикета сделки по тикету ордера
  {
   PositionSelect (m_smb);
   HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));
   uint total= HistoryDealsTotal ();
   for ( uint i= 0 ; i<total; i++)
     {
       ulong deal= HistoryDealGetTicket (i);
       if (order== HistoryDealGetInteger (deal, DEAL_ORDER ))
         return (deal);                             // запомнили тикет сделки
     }
   return ( 0 );
  } 

각 트랜잭션에서 호출됩니다. 따라서 이 Expert Advisor 에서는 이러한 주어진 조건에서 매번 전체 거래 내역을 정렬하고 거래 횟수의 제곱에 비례하여 테스트 시간이 느려집니다.

최적화 또는 테스트가 필요한 Expert Advisor에서는 시간 손실이 불가피하므로 사용하지 않는 것이 좋습니다. 이러한 경우에는 이러한 호출을 알고리즘적으로 대체하는 것이 좋습니다.

HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));

이 방법은 전체 기록을 반복합니까? 공개 위치 와 관련된 이야기의 그 부분뿐만 아니라? 열린 위치와 관련된 거래가 5개 이하인 경우 전체 기록을 반복하는 것보다 HistorySelectByPosition을 사용하는 것이 더 낫다고 생각합니다. HistorySelect (0, TimeCurrent ());

PS CExpertAdvisor는 보지 않았습니다.

 
Konstantin83 :

HistorySelectByPosition ( PositionGetInteger (POSITION_IDENTIFIER));

이 방법은 전체 기록을 반복합니까? 공개 위치와 관련된 이야기의 그 부분뿐만 아니라? 열린 위치와 관련된 거래가 5개 이하인 경우 전체 기록을 반복하는 것보다 HistorySelectByPosition을 사용하는 것이 더 낫다고 생각합니다. HistorySelect (0, TimeCurrent ());

PS CExpertAdvisor는 보지 않았습니다.

이 경우 수천 개의 거래가 한 위치에 쏟아지고 모두 동일한 위치 ID POSITION_IDENTIFIER 를 갖습니다. 따라서 이 경우 HistorySelectByPosition을 호출하는 것은 HistorySelect (0, TimeCurrent ())를 호출하는 것과 동일하며 이러한 거래를 열거하면 기록에서 모든 거래가 열거됩니다.

기사의 템플릿을 사용하는 실패한 예가 만들어 졌다고 가정 해 봅시다 . 그것은 시베리아 남자와 일본 전기 톱에 관한 자전거와 같습니다.

 
Ashes :

XLSX는 어떻습니까? 전문가 코드는 관련이 없습니까?

이 장소는 수정될 것입니다. 개발자들은 알고 있습니다. 감사합니다.