초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1220

 
HistorySelect (xxx, TimeCurrent () + 1 )

1초는 실생활에서 마지막 거래/주문의 빈번한 손실입니다. 예를 들어, 많은 브리지에서 주문을 실행하는 데 TTL 시간이 소요되며 최대 5초가 소요될 수 있습니다. 5초 안에 충족되지 않으면 거부합니다. 또는 충족되지만 3초 안에 완료됩니다.

수락에서 실행까지 틱이 없는 경우HistorySelect에 대한 이러한 호출 은 이에 대한 정보를 수신하지 않습니다.


아마도 TimeCurrent는 MathMax(LastOrder_time, MarketWatch_Time)와 같아야 합니다. 그러면 HistorySelect가 정확할 것입니다. 그러나 TimeCurrent는 아마도 너무 비쌀 것입니다.


ZY 그건 그렇고, HistorySelect의 이러한 작업 계획은 경매의 역사의 일부를 전달할 것입니다.

 void OnStart ()
{
   static MqlTick PrevTick = { 0 };
  
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
  {
     if ( HistorySelect (PrevTick.time, INT_MAX ))
       // Учитываем новые ордера/сделки в Истории торгов

    PrevTick = Tick;  
  }
}

언뜻보기에는 모든 것이 깨끗하지만.


저렴한 DealsTotal()을 작성하는 것은 MT5에서 쉽지 않습니다. 이것은 MT4의 기본(무료) OrdersHistoryTotal()이 아닙니다.

 

큰 소리로 생각하면서 관련성이 있고 유능한 척하지 않습니다.


fxsaber :

수락에서 실행까지 틱이 없는 경우HistorySelect에 대한 이러한 호출 은 이에 대한 정보를 수신하지 않습니다.

이 문제를 해결할 수 없습니다. 서버-터미널-MQL 상호 작용 모델은 원래 다음과 같이 배치되었습니다.

MT5에서는 아직 확인의 순간에 도달하지 않았지만 MT4에서는 심볼의 시장 개요 창에서 우리 심볼의 가격이 변경되는 상황이 있지만 EA는 틱 이하를 받지 못할 수 있음을 확실히 알고 있습니다.


좋아요, 그게 요점이 아닙니다. 이렇게 작동합니다. TS에서 솔루션을 선택하기만 하면 됩니다. 주문이 전송된 순간부터 서버의 정보가 없는 경우 주문은 어떻게 됩니까? 선험적으로 주문이 접수되거나 거부되고 이 예비 결정을 확인하거나 취소하라는 응답을 받은 경우 - 즉, 확인되지 않은 정보로 작업하거나 서버의 응답을 모두 동일하게 기다립니다. 이는 MQ에서 제공하며 대부분 만족하지 않을 수 있습니다.


fxsaber :

저렴한 DealsTotal()을 만드는 것은 MT5에서 쉽지 않습니다. 이것은 MT4의 기본(무료) OrdersHistoryTotal()이 아닙니다.

쓰지마 ;)

또는 오히려 알고리즘을 유지 관리하는 데 EA 리소스를 사용할 가능성이 가장 큽니다. SQLite가 어떻게 작동하는지 알아야 한다고 생각합니다. MQ 성능 테스트가 명시되어 있고 큰 테이블과 선택 항목으로 작업하는 것은 데이터베이스의 목적일 뿐입니다 - EA 코드 최소한의 작업으로 데이터베이스의 모든 작업은 귀하가 수행합니다. 모든 작업은 주문할 때 데이터를 채우고 서버가 응답할 때 업데이트하는 것입니다(동기화는 물론 EA가 시작될 때, 데이터베이스가 메모리에 있음)

 
Igor Makanu :

쓰지마 ;)

또는 오히려 알고리즘을 유지 관리하는 데 EA 리소스를 사용할 가능성이 가장 큽니다. SQLite가 어떻게 작동하는지 알아야 한다고 생각합니다. MQ 성능 테스트가 명시되어 있고 큰 테이블과 선택 항목으로 작업하는 것은 데이터베이스의 목적일 뿐입니다 - EA 코드 최소한의 작업으로 데이터베이스의 모든 작업은 귀하가 수행합니다. 모든 작업은 주문할 때 데이터를 채우고 서버가 응답할 때 업데이트하는 것입니다(동기화는 물론 EA가 시작될 때, 데이터베이스가 메모리에 있음)

원래 작성하여 게시했습니다. 더 빠를 가능성은 없습니다.

 
fxsaber :

원래 작성하여 게시했습니다. 더 빠를 가능성은 없습니다.

그래서 나는 문제를 제대로 보지 못했다

OnTradeTransaction() 및 OnTick() 두 지점에서 주문 목록을 업데이트해야 한다고 생각했기 때문에 데이터베이스에서 이 작업을 제안했습니다.

 
void OnTradeTransaction ( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if (trans.type== TRADE_TRANSACTION_DEAL_ADD )
     {
       if (! HistoryDealSelect (trans.deal))
         return ;
       bool time_to_sum_up= false ;
       if ( HistoryDealGetInteger (trans.deal, DEAL_ENTRY )== DEAL_ENTRY_OUT )
        {
         time_to_sum_up= true ;
        }
       if (!time_to_sum_up)
         return ;
       HistorySelect ( 0 , TimeCurrent ());
       int deals= HistoryDealsTotal ();
       for ( int i=deals- 1 ; i>= 0 ; i--)
        {
         if ( HistoryDealGetTicket (i)==trans.deal)
           {
             Print ( "Found!" );
             return ;
           }
        }
       Print ( "Not Found!" );
     }
   return ;
  
이 코드는 내 EA의 단순화된 스니펫입니다.
몇몇 경우에 이 코드를 실행한 결과 "찾을 수 없음"이 반환된다고 가정합니다.
왜 그런지 잘 이해가 되지 않습니다.
트리거하는 이벤트에서 자신을 찾을 수 없는 이유는 무엇입니까?
서버에서 터미널로 보낸 트랜잭션 이벤트가 도착했는데 서버에서 터미널과 정확한 시간을 동시에 동기화할 수 없습니까?
내 이해는 TimeCurrent()의 값이 1초만 증가해도 충분하다는 것입니다.
나는 중요한 것을 놓치고 있는 것이 틀림없다, 그렇지?
제 이해에 오류가 있으면 지적해 주시면 대단히 감사하겠습니다.
Объем импорта г/г - экономический индекс Японии
Объем импорта г/г - экономический индекс Японии
  • www.mql5.com
Объем импорта г/г (Imports y/y) отражает изменение объема импорта товаров и услуг в отчетном месяце по сравнению с тем же месяцем прошлого года. Показатели импорта используются для оценки внешней торговой активности Японии и спроса на импортируемые товары внутри страны. Из-за последствий "финансового кризиса" США Япония также столкнулась с...
 
mql5에서 일부 기호의 Market Deep을 여는 방법을 만들 수 있습니까? 이것은 여러 기호로 작업할 때 중요 합니다.
 
Dmitri Custurov :

여기 내 코드가 있습니다. 초기화 시 테이블에 하나의 항목을 생성합니다. OnTick 본문에서 동일한 PRIMARY KEY를 사용하여 레코드를 추가하려고 시도하고 그 후에 데이터베이스가 즉시 닫히기 때문에 즉시 오류를 반환해야 합니다. 그러나 동시에 열면 최소한 첫 번째 항목이 표시되어야 하지만 테스터에서 실행하면 거기에 없습니다. 그리고 테이블조차 생성되지 않습니다. 그리고 터미널에서 실행하면 모든 것이 정상입니다. 첫 번째 항목은 입니다.

기지의 위치가 엉망이 아니길 바랍니다.

 
Aleksey Mavrin :

기지의 위치가 엉망이 아니길 바랍니다.

당연히 아니지. 모든 것은 파일에 기록됩니다. 테스터 모드에서는 데이터베이스가 메모리에 생성되고 테스트 후에 파괴된다고 생각합니다.

 
Igor Makanu :

큰 소리로 생각하면서 관련성이 있고 유능한 척하지 않습니다.

...

또는 오히려 알고리즘을 유지 관리하는 데 EA 리소스를 사용할 가능성이 가장 큽니다. SQLite가 어떻게 작동하는지 알아야 한다고 생각합니다. MQ 성능 테스트가 명시되어 있고 큰 테이블과 선택 항목으로 작업하는 것은 데이터베이스의 목적일 뿐입니다 - EA 코드 최소한의 작업으로 데이터베이스의 모든 작업은 귀하가 수행합니다. 모든 작업은 주문할 때 데이터를 채우고 서버가 응답할 때 업데이트하는 것입니다(동기화는 물론 EA가 시작될 때, 데이터베이스가 메모리에 있음)

그리고 어떤 데이터베이스가 당신을 위해 모든 일을 할 것입니까? 말해줄래?

 

한 터미널에서는 주문만 하고 다른 터미널에서는 (동일한 브로커와 계정으로) 실행을 제어합니다. DB 또는 PUB/SUB ZMQ를 통한 통신. DB는 확실히 SQLite 가 아닙니다. 이러한 목적에 가장 적합한 것은 물론 개인적인 의견인 Redis입니다.

행운을 빕니다

사유: