MT5와 속도 - 페이지 27

 
fxsaber :

어떤 터미널이 더 많은 CPU를 소비한다고 생각합니까?

2 그리고 여기 이유가 있습니다

 
fxsaber :

CPU를 줄이려면 터미널의 모든 하위 창(시장 감시, 내비게이터, 도구 등)을 닫고 모든 차트를 최소화하고 터미널 자체를 최소화하는 것이 좋습니다.

Market Watch에서 사용하지 않는 모든 기호를 제거하십시오. 특히 VPS와 관련이 있습니다.


어떻게든 이러한 작업을 자동화할 것을 제안합니다. VPS를 종료하기 전에 를 누르고 종료했습니다. 입력하면 - 클릭하면 모든 것이 표시됩니다.

나는 오랫동안 알고리즘 트레이더에게 이 모든 조정 없이 다른 버전의 터미널이 필요하다고 말해왔다!

위의 모든 것 외에도 각 고문에게 다음을 추가했습니다.

 ChartSetInteger ( 0 , CHART_SHOW , false );

여전히 브레이크 :(

 
A100 :

2 그리고 여기 이유가 있습니다

네, 두 번째입니다.

 
SymbolInfoTick 은 구조적으로 어떻게 배열되어 있습니까? 수십 밀리초 동안 실행될 수 있는 이유를 이해할 수 없습니다.
 

b2560은 b2592와 비교할 때 성능이 크게 떨어집니다. 버그 수정을 기다리고 있습니다.

스레드가 도움이 되었습니다.

 
fxsaber :

b2560은 b2592와 비교할 때 성능이 크게 떨어집니다. 버그 수정을 기다리고 있습니다.

b2593 - 고정. 고맙습니다!

 
거래 내역에 주문/거래를 추가하면 부분 캐시가 아닌 HistorySelect 캐시가 완전히 다시 작성됩니다. 따라서 지연이 트리거될 때 지연됩니다.
 // Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1 ; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer ( 1 );

void OnTimer ()
{
   static MqlTradeRequest Request = { 0 };
   static MqlTradeResult Result = { 0 };

   if ( PositionSelectByTicket (Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL ;
    Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_BID );
    Request.position = Result.order;
  }
   else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL ;
    Request.type = ORDER_TYPE_BUY ;
    Request.symbol = _Symbol ;
    Request.volume = 0.1 ;
    Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
    Request.position = 0 ;
  }

   if ( OrderSend (Request, Result))
    _B2( HistorySelect ( 0 , INT_MAX ));
}

결과.
 2020.09 . 08 20 : 23 : 32.103 Alert : Time[Test6.mq5 411 : HistorySelect ( 0 , INT_MAX )] = 5 ms.
2020.09 . 08 20 : 23 : 32.239 Alert : Time[Test6.mq5 411 : HistorySelect ( 0 , INT_MAX )] = 5 ms.
2020.09 . 08 20 : 31 : 59.863 Alert : Time[Test6.mq5 433 : HistorySelect ( 0 , INT_MAX )] = 9 ms.
2020.09 . 08 20 : 32 : 00.845 Alert : Time[Test6.mq5 433 : HistorySelect ( 0 , INT_MAX )] = 5 ms.
2020.09 . 08 20 : 32 : 01.856 Alert : Time[Test6.mq5 433 : HistorySelect ( 0 , INT_MAX )] = 4 ms.
2020.09 . 08 20 : 32 : 02.846 Alert : Time[Test6.mq5 433 : HistorySelect ( 0 , INT_MAX )] = 7 ms.


왜 중요 함. HFT 로봇이 실행 중이라고 상상해보십시오. 같은 계정에서 거래는 손으로 이루어집니다. 그것이 바로 HFT 로봇에서 HistorySelect 캐시가 해당 결과와 함께 재설정되었다는 것입니다. 물론 HFT 로봇의 역사는 비참한 10,000 주문/거래가 아니라 훨씬 더 많습니다. 이러한 기록에 대해 전체 캐시를 재구축하려면 비용이 많이 듭니다. 따라서 추가하는 것이 논리적입니다.


수동 거래가 로봇의 속도를 늦추어서는 안 된다는 것은 분명합니다. 순수한 알고리즘 거래의 경우 지연이 발생하면 문제가 발생합니다.

 

현재 거래 환경(포지션 및 주문)의 전체(구조 배열) 스냅샷을 만들 수 있는 기능은 거의 없습니다.

Position* 및 Order* 기능을 통한 옵션은 루프에서 이 두 목록을 전달할 때 충돌(활성 거래)을 일으킵니다. 누락되었거나 고려되지 않은 사항이 있습니다.

즉각적인 전체 스냅샷은 이러한 문제를 방지합니다.


시장 검토를 위한 위협 전체 스냅샷 - 아직 수요를 평가하지 않습니다. MT5를 HFT(HFT)에 가깝게 만듭니다.

 

CPU가 100%이고 OrderSend 시간 초과가 1초 이상인 상태로 터미널(및 아무 것도 없음)을 구동할 수 있었습니다(고의가 아님).

아마 그 이유를 찾기가 쉽지 않을 것입니다.


ZY 그런 브레이크가 비슷한 디자인에서 나온 것 같다.

 void OnTrade ()
{
   OnTick ();
}

재현할 코드를 생성할 수 없습니다.


실제로 Expert Advisors를 사용하여 터미널을 50ms의 핑으로 몇 초 안에 거래 주문 이 실행되는 상태(터미널 로그)로 만드는 것이 가능합니다. 100ms 이내에 거래 주문이 실행되기 시작하므로 어드바이저를 제거하기만 하면 됩니다.

 
fxsaber :

현재 거래 환경(포지션 및 주문)의 전체(구조 배열) 스냅샷을 만들 수 있는 기능은 거의 없습니다.

Position* 및 Order* 기능을 통한 옵션은 루프에서 이 두 목록을 전달할 때 충돌(활성 거래)을 일으킵니다. 누락되었거나 고려되지 않은 사항이 있습니다.

즉각적인 전체 스냅샷은 이러한 문제를 방지합니다.


시장 검토를 위한 위협 전체 스냅샷 - 아직 수요를 평가하지 않습니다. MT5를 HFT(HFT)에 가깝게 만듭니다.

그리고 어떤 종류의 주문이 있었고 거래 조건을 이해하기 위해 티켓으로 주문-거래-포지션을 추적하고 포지션 티켓으로 반대 방향으로 추적하는 일반 기능. 역사의 상태를 추적하는 것은 사악한 현실입니다.

클릭 시 전체 서라운드는 멋지지만 분명히 비싸고 자주 필요하지 않습니다. 시장이 무너져도

나 자신을 위해 명령과 영장을 나눕니다. 명령을 실행하는 명령 은 연기입니다. 시장 질서가 혼란스럽습니다.

전문적이지 않은 의견을 엄격하게 판단하지 마십시오.