MT5와 속도 - 페이지 5

 
fxsaber :

전투 고문에서는 의심스러운 곳 어디에서나 _B(FuncName(...), AlertTime) 의 기능을 입혔습니다.

나는 그것이 매우 비싸다는 것을 잊었다.

         Alert : Time[SyncEA.mqh 309 : :: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) ] = 21 ms.
 
fxsaber :

Threat 각 틱에서 기껏해야 HistorySelect 때문에 총 수십 밀리초를 소비합니다.

전투 고문 프로파일링.


 
Toli 스키, 루핑 펠트 또는 다른 것은 가지 않습니다. 주문이 성공적으로 이루어지면 티켓이 반환됩니까? HistoryOrderSelect(티켓) 함수의 반환이 알려주는 것이 있습니까? 로봇을 시작할 때를 제외하고 고가의 HS를 사용하는 이유는 무엇입니까?
 
Vladimir Simakov :
로봇을 시작할 때를 제외하고 고가의 HS를 사용하는 이유는 무엇입니까?

스레드의 시작 부분에 게시됩니다.

 
fxsaber :

주문 보내기를 하고 있습니다. OrderSend 종료 직후 특정 포지션이 테이크에 의해 청산되지 않은 경우, 다른 OrderSend를 만듭니다. 이것은 프로그래밍해야 하는 모든 논리입니다. 비동기는 사용되지 않습니다.

이제 우리 로봇에게 일어난 상황입니다. 당신은 OrderSend를 보냈고, 그것이 실행되는 동안 제한 한도가 트리거되었고, 그 이후에 위에서 언급한 우리의 포지션 인수가 트리거되었습니다.

여기서 나는 정말로 아무것도 이해하지 못했습니다. 가능하다면 단계를 더 자세히 설명하십시오. 내가 이해 한 유일한 것은 OnTradeTransaction 이벤트 핸들러 만 사용된다는 것입니다. 즉, 이벤트 처리 우선 순위 제어가 필요하지 않으며 제안 된

 bool HandleNextEvent(ENUM_EVENT_TYPE);

로 퇴화하다

 bool HandleNextEvent();
요청 이 무엇이었습니까? HandleNextEvent() 제공
 OnTradeTransaction (...)
{
         /*вычисления1*/
        HandleNextEvent();
         /*вычисления2*/
}
이제 스키마 의 2차 이벤트 핸들러는 다음과 같이 구현되도록 제안됩니다.
On2TradeTransaction(...)
{
         if флаг установлен goto label
         /*вычисления1*/
                запомнить результаты вычислений
                установить флаг
                 return ;
label:          извлечь результаты вычислений
         /*вычисления2*/
}
 
A100 :

여기서 나는 정말로 아무것도 이해하지 못했습니다. 가능하다면 단계를 더 자세히 설명하십시오.

 void OnMain()
{
   OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
  
   // Следующий OrderSend должен быть незамедлительно вызван.
   if (наблюдаемая позиция закрылась по тейку) // Проблема определить это без доступа к очереди.
     OrderSend (OP_BUYLIMIT)  
   else
     OrderSend (OP_SELLLIMIT)    
}
 
fxsaber :

OrderSend 를 호출한 후 돌아올 수 없습니까?

 void OnMain()
{
         if (first)
        {
                 OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
                 return ;
        }
//...
}

새 이벤트가 이미 대기열에 추가되었을 때(또는 타이머에 의해) 다음에 OnMain으로 돌아갈 때

 

A100 :

OrderSend 를 호출한 후 돌아올 수 없습니까?

이에 대한 제한은 없습니다.

새 이벤트가 이미 대기열에 추가되었을 때(또는 타이머에 의해) 다음에 OnMain으로 돌아갈 때

다음 이벤트는 포지션 인수가 아니라 지연 실행입니다.

 
fxsaber :

다음 이벤트는 포지션 인수가 아니라 지연 실행입니다.

현재 큐 전체를 읽거나 주어진 수의 이벤트를 읽을 때까지 반복적인 반환(반환)을 수행하는 것이 좋습니다. 거래 이벤트가 끝나면 타이머가 반환되며 모든 이벤트에 한 번에 액세스할 수 있습니다.

 
void OnMain()
{
         if (first)
        {
                 OrderSend (OP_BULIMIT); // Во время выполнения сработал и другой отложенник и тейк позиции (после отложенника).
                 return ; 
        }
         if ( OnTrade событие последнее )
                 return ; //может еще есть
         if ( OnTimer событие последнее )
        { // все торговые события в лукошке
                 if (наблюдаемая позиция закрылась по тейку) // Проблема определить это без доступа к очереди.
                         OrderSend (OP_BUYLIMIT)  
                 else
                         OrderSend (OP_SELLLIMIT)
        }
}
OnTimer가 없는 보다 우아한 솔루션도 있습니다.
사유: