MT5와 속도 - 페이지 78

 
Valeriy Yastremskiy :

터미널의 메모리가 터미널 프로그램 µl, tix 등의 메모리에 추가된다는 것을 정확히 이해합니다.

아니요. Just CopyTicks는 10초 동안 요청된 틱 캐시를 유지합니다. 예를 들어, 3GB의 메모리를 요청한 경우 터미널은 이 3GB를 캐시에 저장합니다. 전체적으로 터미널은 6GB를 소비합니다. ArrayFree 를 만들고 다른 기호에 대해 3GB를 요청하면 터미널은 9GB를 사용합니다. 등.

 
Valeriy Yastremskiy :

터미널의 메모리가 터미널 프로그램 µl, tix 등의 메모리에 추가된다는 것을 정확히 이해합니다.

틀림없이.
 
수식을 사용하여 여러 기호의 눈금 기록을 기반으로 사용자 지정 기호를 만드는 스크립트를 만들어야 합니다.
 MqlTick Formula( const MqlTick &Symbol1_Tick
                 const MqlTick &Symbol2_Tick,
                 const MqlTick &Symbol3_Tick,
                 const MqlTick &Symbol4_Tick,
                 const MqlTick &Symbol5_Tick );

10억 틱이라도 이 문제를 해결하려면 100MB의 RAM이면 충분할 것 같습니다. 그러나 MT5에서는 CopyTicks를 사용하여 이 작업을 해결할 수 없습니다.

이러한 목발이 만들어집니다.

  1. CopyTicks는 각 기호에 대해 개별적으로 호출되며(항상 각 호출 후에 캐시가 지워지기를 기다림) FileSave를 통해 해당 파일에 틱 기록을 기록합니다.
  2. 그런 다음 이 파일에서 눈금을 읽고 이에 대한 Formula가 호출됩니다.

예, 이것은 끔찍한 목발이지만 다른 옵션은 없습니다. 저것들. CopyTicks로 직접 작업할 수 없습니다. 틱 파일 아카이브를 사용해야 합니다.


RAM을 가장 많이 소비하는 단계는 1단계입니다. 각 호출 후에 캐시가 해제되기를 기다리는 조건에서도. 동시에 2항. 무료로 진행됩니다!

 

한 번에 8쌍의 거래가 있으며 각각에는 여러 고문이 있습니다. 그리고 일반적으로 리소스 면에서는 좋아 보이지만 메모리의 25% 이상을 차지하지 않고 프로세서가 10% 이상 로드되지 않으며 몇 초 만에 새 차트가 열리는 것과 같은 지연이 눈으로 확인되고, 일반적으로 거래. 아마도 몇 가지 모범 사례, 적어도 논문이 있을 수 있습니다. 이 모든 것이 더 빨리 작동하도록 패키지화할 수 있습니까? 여러 Expert Advisor를 하나로 가상화한다는 것을 알고 있습니다. 여기에 어떤 함정이 있습니까? 거래 주문은 어떻게 보내지 나요? 주의할 점은?

추신: 저는 가상을 통한 동기화와 차트당 1명의 전문가 자문가인 MT4Orders를 통한 거래를 사용합니다.

 
fxsaber :

서로. VPS를 가져갑시다. 마켓 스크리너는 작업할 수 없습니다.

위협 몇 달 동안 발생하는 동결을 없애면 좋을 것입니다. 무한 RAM이 있는 시스템에서 이 스크립트 를 실행하십시오. 예를 들어 6월 1일부터 틱을 한 캐릭터로 다운로드할 수 없습니다. 리소스 소비 없이 CopyTicks를 중단합니다.

터미널이 멈췄을 때 덤프를 가져옵니다. 이유가 무엇인지 봅시다.

 
traveller00 :

한 번에 8쌍의 거래가 있으며 각 쌍에는 여러 고문이 있습니다. 그리고 일반적으로 리소스 면에서는 좋아 보이지만 메모리의 25% 이상을 차지하지 않고 프로세서가 10% 이상 로드되지 않으며 몇 초 만에 새 차트가 열리는 것과 같은 지연이 눈으로 확인되고, 일반적으로 거래. 아마도 몇 가지 모범 사례, 적어도 논문이 있을 수 있습니다. 이 모든 것이 더 빨리 작동하도록 패키지화할 수 있습니까?

새로운 MT4Orders(이 분기 생성 후 기록 작업이 가속화됨)를 사용하고 현재 환경(주문 및 위치)을 스냅샷합니다. 모든 것이 나를 위해 날아갑니다.

여러 Expert Advisor를 하나로 가상화한다는 것을 알고 있습니다. 여기에 어떤 함정이 있습니까? 거래 주문은 어떻게 보내지 나요? 주의할 점은?

동기식 OrderSend를 통해 모든 작업을 수행하지만 동시에 MT5 검사를 비활성화합니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: MT4Orders

fxsaber , 2020.09.29 08:45

그런 선

MT4ORDERS::OrderSend_MaxPause = 0 ; // Отключение проверки корректности работы MT5-OrderSend.

당신은 그것을 모두 끌 수 있습니다. MT5 거래 내역이 느려지면 유용할 수 있습니다. MT4Orders는 때때로 이 기록에 액세스하여 MT5-OrderSend를 확인하고 수정합니다.

이 작업을 수행하지 않는 것이 좋습니다.


각 세트(입력 매개변수 세트)에는 고유한 가상이 제공됩니다. 동기화 장치는 모든 가상을 통해 각각에 대해 동기화를 수행합니다. 첫 번째 가상이 아닌 루프에서 이 작업을 수행해야 합니다.

모든 OrderSend(동기화 장치 내부)를 호출한 후에는 반드시 스냅샷이 생성되고 OrderSend 실행 중에 제공된 새로운 틱이 (모든 가상에) 추가됩니다. 저것들. 가상의 일시 중지 후 - 우리는 모든 것을 신선하게 만듭니다.

신선한 틱은 매번 CopyTicks를 통해서만 가져옵니다. 전달을 위한 SymbolInfoTick이 없습니다. 동시에 CopyTicks_LastTick.time_msc < SymbolInfoTick.time_msc (호출이 순서에 관계없이 차례로 발생하더라도 자주 발생)인 경우 동기화 장치가 켜지지 않는 경우 반드시 제어됩니다. 그렇지 않으면 현실에서 한계 한계가 충족되었지만 가상에서는 그렇지 않은 상황에 직면할 수 있습니다. 그리고 동기화 문제가 있을 것입니다.

스냅샷은 VIRTUAL::Snapshot을 사용하여 만듭니다. 명백한 속도에 더하여, 이를 통해 나머지 기호를 분리할 수 있습니다. 이것은 더 많은 것을 제공합니다. 속도. 또한 스냅샷에서 히스토리가 비활성화되었을 뿐만 아니라

 #define VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Отказ от снепшота истории для повышения производительности

뿐만 아니라 필드(아래에 표시됨)도 기록에 액세스해야 하는 채우기가 필요합니다.

 #define MACROS(A) this . ##A = ::Order ##A();

   bool ORDERS::Copy( const bool WithoutHistory = false )
  {
    MACROS(CloseTimeMsc)

     if (WithoutHistory && ! this .CloseTimeMsc) // Для исторических ордеров оставляем все без изменений.
    {
       const string Str = NULL ;
       this . comment = Str;

       this . Commission = 0 ;
       this . OpenPriceRequest = this .OpenPrice;
    }
     else // В MT4Orders требуется обращение к истории.
    {
       const string Str = ::OrderComment();
       this .comment = Str;

      MACROS(Commission)
      MACROS(OpenPriceRequest)
    }

나는 LastDeal.time_msc가 LastTick.time_msc보다 크지 않은지 확인하기 위해 더 일찍 검사를 했습니다. 이 조건이 충족되지 않은 경우 명백한 이유로 동기화를 거부했습니다. 그러나 그러한 검사는 많은 리소스를 소비하므로(기록과 함께 작동) 거부했습니다.


On-function 거래 - OnTick.


아마도 주요 내용을 나열했을 것입니다.

 

내가 알기로는 동기식, OrderSend 뿐만 아니라 수정, 삭제 등을 포함한 모든 거래 주문 ?


틱 순서가 엉망이 될 수 있기 때문에 SymbolInfoTick이 전달되지 않습니까? 그리고 CopyTicks는 모두 올바른 순서로 있습니다.


SymbolInfoTick은 시간을 확인하는 데만 필요하며 그게 다인가요? 모든 거래 등은 CopyTicks를 통해서만 진행되나요?


여러 Expert Advisors를 1:1 차트로 묶는 것이 합리적입니까? 불가능한 것은 아니지만, 엉망으로 만들고 다시 쓸 가치가 있는지, 아니면 이익이 최소화될 것인지 이해하려고 노력하고 있습니다.

 
traveller00 :

여러 Expert Advisors를 1:1 차트로 묶는 것이 합리적입니까? 불가능한 것은 아니지만, 엉망으로 만들고 다시 쓸 가치가 있는지, 아니면 이익이 최소화될 것인지 이해하려고 노력하고 있습니다.

이익은 어디에서 올 수 있습니까? 모두는 그들 중 하나 의 거래 작업 을 기다리고 있습니다.

글쎄, 덜 병렬화.

하나의 주문 캐시를 전혀 보관할 수 없다면 이점은 의심 스럽습니다..

 
Anton :

터미널이 멈췄을 때 덤프를 가져옵니다. 이유가 무엇인지 봅시다.

문제를 재현하는 코드가 부족합니까? 아니면 번식하지 않습니까?

 
traveller00 :

내가 알기로는 동기식, OrderSend 뿐만 아니라 수정, 삭제 등을 포함한 모든 거래 주문 ?

나는 MT5-OrderSend를 의미했습니다.

틱 순서가 엉망이 될 수 있기 때문에 SymbolInfoTick이 전달되지 않습니까? 그리고 CopyTicks는 모두 올바른 순서로 있습니다.

구멍이 생길 것이기 때문입니다.

SymbolInfoTick은 시간을 확인하는 데만 필요하며 그게 다인가요?

네.

모든 거래 등은 CopyTicks를 통해서만 진행되나요?

오직.

여러 Expert Advisors를 1:1 차트로 묶는 것이 합리적입니까? 불가능한 것은 아니지만, 엉망으로 만들고 다시 쓸 가치가 있는지, 아니면 이익이 최소화될 것인지 이해하려고 노력하고 있습니다.

저에게는 이것이 큰 도움이 됩니다.


각 단일 패스(단일 테스트 모드에서)는 끝에 동일한 파일에 입력을 씁니다. 따라서 최적화 후 일부 패스를 본 후 이러한 패스의 데이터가 포함된 파일을 얻습니다. 이 파일에서 더 나아가 내가 좋아하는 것만 남겨두고 필터링합니다. 그리고 전투 로봇이 시작될 때 FileSelectDialog를 통해 이 파일을 선택하기만 하면 됩니다. 따라서 그는 포트폴리오를 거래합니다.


최적화에는 20분이 소요됩니다. 패스 보기 - 3분. 필터는 3분입니다. 전투 작업 시작 - 초. 로봇은 컴파일할 필요가 없습니다. 동일한 방식으로 버전과 차트를 추적합니다.

시작할 때 각 세트의 보고서를 봅니다. 언제든지 실제 세계에서 해당 가상의 상태와 그 이름을 딴 것을 볼 수 있으며 단축키를 사용하여 가상과 실제 모두에 대한 자세한 HTML 보고서를 볼 수 있습니다. 단일 세트 및 전체 포트폴리오.


Virtuals의 거래 통계는 특별히 빠르게 작성되기 때문에 (키보드에서) 빠르게 서로 세트를 비교할 수 있습니다.

파일:
clip0184.gif  64 kb