개발자! 당신은 당신이 만드는 것을 전혀 테스트합니까? - 페이지 6

 
Mikalas :

주문이 수정되었는지(서버 응답 없이) 제어하는 방법을 알려주시겠습니까?

주문을 수정하면 여러 이벤트가 발생하며, 이러한 모든 이벤트를 제어하고 대기 작업이 대기 목록에 있는 시간을 제어합니다.

My Forts 로봇은 세션당 500-600번의 거래를 하며 지금까지 이벤트 손실이 없었습니다. 대기 목록의 모든 작업이 실행되고 타이머 확인에 도달하지 않습니다.

 
Yurich :

이벤트 모델은 정의에 따라 절대적으로 신뢰할 수 없습니다. 이벤트가 도달하지 않았다고 해서 이벤트가 존재하지 않았다는 의미는 아닙니다.

이벤트 중 일부가 도달하고 일부가 도달하지 않으면 명령 실행 결과의 처리를 보장하기 위해 이전 코드 등과 비교하여 상태를 확인하는 중복 코드 블록이 필요합니다. 그렇다면 문제는 중복 코드가 절대적으로 안정적으로 작동하는 경우 이벤트 기반 코드를 사용하는 이유입니다. 이벤트를 기반으로 하지 않는 코드 하나 대신 두 개의 코드를 사용하는 이유는 무엇입니까? 중복을 생성하시겠습니까?
 
Yurich :

주문을 수정하면 여러 이벤트가 발생하며, 이러한 모든 이벤트를 제어하고 대기 작업이 대기 목록에 있는 시간을 제어합니다.

My Forts 로봇은 세션당 500-600번의 거래를 하며 지금까지 이벤트 손실이 없었습니다. 대기 목록의 모든 작업이 실행되고 타이머 확인에 도달하지 않습니다.

이제 이것은 더 흥미 롭습니다 ... 즉. 결국 예정된 이벤트가 오지 않는 경우는 없었나요?
 
C-4 :
이제 이것은 더 흥미 롭습니다 ... 즉. 결국 예정된 이벤트가 오지 않는 경우는 없었나요?
이벤트 손실이 없다고 말한 것은 대기 목록에 있는 작업이 이벤트(중요한 이벤트 체인 중 하나 이상)를 기다리고 있다는 의미입니다. Mikhail이 말하는 이벤트 손실이 있을 수 있습니다. 저는 이벤트 로그를 보관하지 않지만 이벤트 모델의 전반적인 기능에는 영향을 미치지 않습니다.
 

받는 사람: 마이클.

일반적으로 상황이 어떤 방향으로든 해결될 때까지 추가 확인을 수행하는 것이 더 쉽습니다.

 int dealsCount = 0;
///
/// С заданной периодичностью синхронизируем количество обработанных и поступивших трейдов.
///
void OnTimer ( void )
{
   if (dealsCount != HistoryDealsTotal ())
   {
       //Пришли новые трейды. их нужно обработать
       for ( int i = dealsCount; i < HistoryDealsTotal (); i++)
      {
           ulong ticket = HistoryDealGetTicket (i);
           DealChecking(ticket);
      } 
   }
}

///
/// Поступило новое событие о поступлении трейда.
///
void    OnTradeTransaction (
       const MqlTradeTransaction &    trans,
       const MqlTradeRequest &        request,
       const MqlTradeResult &         result
   )
{
   if (trans.type == TRADE_TRANSACTION_DEAL_ADD )
     DealChecking(trans.deal);
   ...
}

///
/// Обработчик трейдов.
/// \param ticket - Уникальный идентификатор трейда, который надо обработать.
void DealChecking( int ticket)
{
   
   // Далее идет нужная обработка.
   ...
   //Трейд обработан - увеличиваем количество обработанных трейдов.
   dealsCount++;
}

이 구현에는 중복성이 없습니다. "new trade has come" 이벤트의 실제 핸들러는 단 하나뿐입니다. 그러나 호출은 타이머와 OnTradeTransaction 이벤트의 두 가지 방식으로 수행됩니다. 어떤 이유로 새 거래가 OnTradeTransaction 이벤트를 트리거하지 않으면 총 거래 수와 처리된 거래 수 사이에 비동기화가 발생합니다. 이 경우 for 루프를 통해 처리되지 않은 모든 거래는 여전히 DealChecking 핸들러에 도달합니다.

그것에 대해 생각한다면 그러한 계획은 TRADE_TRANSACTION_DEAL_ADD뿐만 아니라 모든 이벤트에 대해 구성 될 수 있습니다.
 
Mikalas :

...

P / S 그리고 다음과 같이 시작하는 전체 문장과 "텍스트를 빼낼" 필요가 없습니다.

거래 유형을 알면 거래 계정 의 주문, 포지션 및 거래의 현재 상태 에 대한 분석을 결정할 수 있습니다.

자세한 내용은 항상 도움말에서 찾을 수 있습니다.

나는 Yurich 의 다른 모든 것에 동의합니다. 당신은 아마도 당신의 계획을 재고해야 할 것입니다.

 

동료들에게!

여러분의 의견에 진심으로 감사드립니다!

벌레만 갉아먹습니다. 그렇다면 왜 PLATFORM이 있습니까?

 

Mikalas :

그렇다면 왜 플랫폼인가?

아마도 수사학적 질문이었을 것입니다. :) 그리고 그렇지 않다면 이미 이 스레드에 답이 나와 있습니다.

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

개발자! 당신은 당신이 만드는 것을 전혀 테스트합니까?

C-4 , 2013.12.10 12:08

나는 조언하지 않습니다. 이 버그를 MQ와 함께 수정하는 것이 광장 아래에 새 터미널을 단독으로 차단하는 것보다 훨씬 쉽습니다. 끝없는 수정 결함과 "표준 기능" 작성에 얽매이십시오. 나는 내 자신의 경험에서 말합니다. 특정 작업에 대한 또 다른 "자전거"의 결과인 Stock #을 기반으로 자체 제작한 복합 단지 중 하나를 부분적으로 개발했습니다. 지원 서비스와 싸우는 것이 더 좋고 더 쉽고 저렴할 것입니다.
나는 또한 터미널의 모든 것, 예를 들어 "최종 가격"에 대한 태도에 만족하지 않습니다. 그러나 임계량의 거래자가 있을 때 MQ가 그들의 요구에 귀를 기울이기 시작하기를 바랍니다.
 
확인. MT5의 진정한 대안은 무엇입니까?
 
Armen :
확인. MT5의 진정한 대안은 무엇입니까?

이것이 바로 그러한 분기를 만들기 전에 스스로에게 물어야 하는 질문입니다. MT5가 오기 전에 FORTS에서 거래하려면 최소한 자신의 거래 터미널을 작성해야 했습니다. 알고리즘 거래에 실제로 적용할 수 없는 Quick을 제외하고 이 부문에는 기성품 솔루션이 없습니다(QPile에서 1000줄 이상 프로그램을 작성한 사용자는 내가 말하는 내용을 이해할 수 있을 것입니다). Stock# 라이브러리의 보조 세트가 있지만 "즉시 사용 가능한"(출시 및 거래) 본격적인 거래 터미널로 개발되지 않았습니다. 사실, 보통의 우수한 프로그래머가 Stock#을 사용하여 거래 플랫폼을 만드는 데 최대 6개월이 걸립니다. 초보 프로그래머 는 이 제품을 전혀 다룰 수 없습니다. Kofite, TSLab, WealthLab과 같은 터미널도 있습니다. 그러나 브로커가 직접 지원하지 않는다는 점을 분명히 이해해야 합니다. 많은 Quick + YourSuperTradingPlatform이 여러분을 기다리고 있습니다(DDE를 통한 데이터 전송의 모든 후속 문제와 함께). 그리고 PlazaII 프로토콜을 통해 작업하려는 경우 한 달에 3,000루블이면 브로커가 그러한 기회를 제공할 것입니다.

부르주아 부문에서는 상황이 더 좋지 않습니다. 모든 미국 중개인이 알고리즘 거래 가능성이 있는 거래 플랫폼을 제공하는 것은 아닙니다. 모든 미국 중개인이 러시아에서 일할 수 있는 것은 아닙니다. API를 제공하면 좋습니다. 그리고 다시 이 API에 대한 자전거 작성으로 돌아갑니다. 더욱이, 제공되는 플랫폼이 너무 다르며 다른 시장 부문에 맞게 개선되었습니다. ThinkOrSwim과 최소한 동일한 Wealth-Lab을 비교하십시오. 표준도 없고 통합된 인터페이스도 없습니다.

일반적으로 귀하의 모토가 "내가 꿈꿔왔던 평화" 또는 "새로운 소프트웨어를 테스트하고 다음 자전거를 만들기 위해 거래합니다"라면 - 실제로 MetaTrader5가 아닌 다른 플랫폼을 찾는 것이 좋습니다.