위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법) - 페이지 11

 
secret :
미리 정해진 연기. 가격은 그것에 도달하지만 실행은 나중에 더 나쁜 가격으로 발생합니다.

아니요, 한도가 더 나쁜 것으로 판명되면 브로커는 nafik이거나 알아낼 수 있습니다.

그리고 멈추면 이것은 정상입니다. 주문이 플러그인에 의해 확인되지 않고 어딘가에 표시되는 경우 20-30ms는 충분히 허용됩니다.

글쎄, 얼마나 많은 진드기가 있었는지 - 그것은 전혀 중요하지 않습니다.

 
Andrei Trukhanovich :

커미션이 달러로 된 볼륨에서 달러로 계산되면 어떻게 도움이 됩니까?

이상하지만 계정의 통화가 영향을 미칩니다. 분명히 거기에서 변환 할 때 사용되는 것은 현재 환율이 아니라 일종의 고정 환율입니다. 로트가 작은 경우 반올림합니다.

 

나는 스스로 무엇인가를 알아내야 했고, 주문 작업의 용이함을 보여주는 매우 재현하기 쉬운 예제가 탄생했습니다.


따라서 OnTick에서 전통적으로 작동하는 Expert Advisor가 출시되었다고 가정해 보겠습니다. OnTick은 터미널의 거래 환경 상태에서 언제든지 발생할 수 있으므로 EA가 무엇을 볼 수 있는지 보는 것이 흥미 롭습니다. 따라서 OnTick Expert Advisor가 접할 수 있는 상태를 다음과 같이 꺼냈습니다.

 #define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnTradeTransaction ( const MqlTradeTransaction &, const MqlTradeRequest &, const MqlTradeResult & )
{
   static int i = 0 ;
  
   Print (i++);
  
   if ( HistorySelect ( 0 , INT_MAX ))
     Print (TOSTRING( PositionsTotal ()) + TOSTRING( OrdersTotal ()) + TOSTRING( HistoryDealsTotal ()) + TOSTRING( HistoryOrdersTotal ()));
        
   Print ( "----------------" );
}

이 코드는 단순히 현재 포지션/주문 수 와 마감된 거래/주문 수를 출력합니다.


우리는 손으로 포지션을 시작하고 간단히 열고 닫습니다. 다른 건 없습니다. 그런 인쇄물을 얻었습니다(실행마다 다를 수 있음).

         // Открываем позицию руками.

         0
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         1
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         2
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         3
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         4
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         5 // Открывающий позицию ордер исчез полностью - нет среди живых и мертвых.
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 25 
        ----------------
         6 // Открылась позиция, но нет соответствующей ей сделки.
         PositionsTotal () = 1 OrdersTotal () = 0 HistoryDealsTotal () = 25 HistoryOrdersTotal () = 26 
        ----------------
         7
         PositionsTotal () = 1 OrdersTotal () = 0 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------

         // Закрываем позицию руками.
         8 // Позиция и закрывающий ее ордер.
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         9
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         10
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         11
         PositionsTotal () = 1 OrdersTotal () = 1 HistoryDealsTotal () = 26 HistoryOrdersTotal () = 26 
        ----------------
         12 // Позиция закрыта, но закрывающий ее ордер продолжает висеть.
         PositionsTotal () = 0 OrdersTotal () = 1 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         13 // Закрывающий позицию ордер полностью исчез - нет среди мертвых/живых.
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         14
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 26 
        ----------------
         15
         PositionsTotal () = 0 OrdersTotal () = 0 HistoryDealsTotal () = 27 HistoryOrdersTotal () = 27 
        ----------------

따라서 OnTick-EA는 위에서 언급한 흥미로운 16가지 상황 중 하나에 부딪힐 수 있습니다.

나는 구체적인 예를 선택하지 않았다. 출시하고 그 결과를 게시했습니다. 출시는 다른 흥미로운 옵션을 제공할 수 있습니다.


나는 내가 무엇을 하고 있는지 정확히 알고 있었기 때문에 결과에 대해 논평할 수 있었습니다.

이것을 모르는 고문은 무엇입니까? 여러 Expert Advisors가 계정에서 병렬로 작업한다고 상상해 봅시다. 위의 상황이 공생하여 발생하는 혼란을 쉽게 분석할 수 있다는 것은 분명하다고 생각합니다.


간결한 코드가 첨부되어 누구나 재현할 수 있습니다.

 
fxsaber :

스스로 뭔가를 알아내야 했고, 주문 작업의 용이함을 보여주는 매우 재현하기 쉬운 예제가 탄생했습니다.


따라서 OnTick에서 전통적으로 작동하는 Expert Advisor가 실행 중이라고 가정해 보겠습니다. OnTick은 터미널의 거래 환경 상태에서 언제든지 발생할 수 있으므로 EA가 무엇을 볼 수 있는지 보는 것이 흥미 롭습니다. 따라서 OnTick Expert Advisor가 접할 수 있는 상태를 다음과 같이 꺼냈습니다.

이 코드는 단순히 현재 포지션/주문 수 와 마감된 거래/주문 수를 출력합니다.


우리는 손으로 포지션을 시작하고 간단히 열고 닫습니다. 다른 건 없습니다. 그런 인쇄물을 얻었습니다(실행마다 다를 수 있음).

따라서 OnTick-EA는 위에서 언급한 흥미로운 16가지 상황 중 하나에 부딪힐 수 있습니다.

나는 구체적인 예를 선택하지 않았다. 출시하고 그 결과를 게시했습니다. 출시는 다른 흥미로운 옵션을 제공할 수 있습니다.


내가 무엇을 하고 있는지 정확히 알고 있었기 때문에 결과에 대해 논평할 수 있었습니다.

이것을 모르는 고문은 무엇입니까? 여러 Expert Advisors가 계정에서 병렬로 작업한다고 상상해 봅시다. 위의 상황이 공생하여 발생하는 혼란을 쉽게 분석할 수 있다는 것은 분명하다고 생각합니다.


간결한 코드가 첨부되어 누구나 재현할 수 있습니다.

OnTradeTransaction이 몇 번 호출되고 어떤 순간에 무엇을 받을 수 있는지 파악해야 합니다.

TRADE_TRANSACTION_ORDER_ADD

새로운 미결 주문을 추가합니다.

TRADE_TRANSACTION_ORDER_UPDATE

미결 주문 변경. 이러한 변경에는 클라이언트 터미널 또는 거래 서버의 명시적인 변경뿐만 아니라 배치될 때의 상태 변경도 포함됩니다(예: ORDER_STATE_STARTED 상태에서 ORDER_STATE_PLACED 로 또는 ORDER_STATE_PLACED 에서 ORDER_STATE_PARTIAL 등).

TRADE_TRANSACTION_ORDER_DELETE

열린 목록에서 주문을 제거합니다. 해당 요청이 이루어진 결과 또는 실행(채우기) 및 히스토리로 전송의 결과로 열린 주문에서 주문이 삭제될 수 있습니다.

TRADE_TRANSACTION_DEAL_ADD

역사에 거래를 추가합니다. 주문 실행 또는 계정 잔액 작업의 결과로 수행됩니다.

TRADE_TRANSACTION_DEAL_UPDATE

역사상 거래를 변경합니다. 서버에서 이전에 실행된 거래가 변경되는 상황이 있을 수 있습니다. 예를 들어, 거래가 브로커에 의해 철회된 외부 거래 시스템(거래소)에서 변경되었습니다.

TRADE_TRANSACTION_DEAL_DELETE

기록에서 거래를 삭제합니다. 서버에서 이전에 실행된 트랜잭션이 삭제되는 상황이 있을 수 있습니다. 예를 들어, 거래가 브로커에 의해 철회된 외부 거래 시스템(거래소)에서 삭제되었습니다.

TRADE_TRANSACTION_HISTORY_ADD

실행 또는 취소의 결과로 내역에 주문을 추가합니다.

TRADE_TRANSACTION_HISTORY_UPDATE

주문 내역에서 주문 변경. 이 유형은 무역 서버 측에서 기능을 확장하기 위해 제공됩니다.

TRADE_TRANSACTION_HISTORY_DELETE

주문 내역에서 주문을 삭제합니다. 이 유형은 무역 서버 측에서 기능을 확장하기 위해 제공됩니다.

TRADE_TRANSACTION_POSITION

트랜잭션 실행과 관련이 없는 위치 변경. 이 유형의 거래는 거래 서버 측에서 위치가 변경되었음을 나타냅니다. 포지션은 거래량, 시가, 손절매 및 이익실현 수준이 변경될 수 있습니다. 변경 사항에 대한 정보는 OnTradeTransaction 핸들러를 통해 MqlTradeTransaction 구조로 전달됩니다. 거래의 결과로 포지션을 변경(추가, 변경 또는 청산)한다고 해서 TRADE_TRANSACTION_POSITION 거래가 나타나는 것은 아닙니다.

TRADE_TRANSACTION_REQUEST

거래 요청이 서버에서 처리되었고 처리 결과가 수신되었음을 알립니다. MqlTradeTransaction 구조에서 이러한 유형의 트랜잭션의 경우 유형(트랜잭션 유형)이라는 하나의 필드만 분석해야 합니다. 추가 정보를 얻으려면 OnTradeTransaction 함수의 두 번째 및 세 번째 매개변수(요청 및 결과)를 분석해야 합니다.

 
Alexey Viktorov :

OnTradeTransaction이 몇 번 호출되고 어떤 순간에 무엇을 받을 수 있는지 파악해야 합니다.

최대한 씹어 먹었던 것 같다.

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

위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법)

fxsaber , 2021.05.03 12:48

따라서 OnTick-EA는 위에서 언급한 흥미로운 16가지 상황 중 하나에 부딪힐 수 있습니다.

 
fxsaber :
최대한 씹어 먹었던 것 같다.

이 모든 것을 OnTradeTransaction 에서 처리하는 경우 OnTick()의 경우

OnTradeTransaction을 호출하는 이유를 파악하고 그에 따라 해당 호출에서 사용할 수 있는 항목을 처리합니다.
 
Alexey Viktorov :

이 모든 것을 OnTradeTransaction 에서 처리하는 경우 OnTick()의 경우

OnTradeTransaction을 호출하는 이유를 파악하고 그에 따라 해당 호출에서 사용할 수 있는 항목을 처리합니다.

포럼의 누군가가 설명할 수 있습니다. 나는 나가지 않는다.

 
Alexey Viktorov :

이 모든 것을 OnTradeTransaction 에서 처리하는 경우 OnTick()의 경우

OnTradeTransaction을 호출하는 이유를 파악하고 그에 따라 해당 호출에서 사용할 수 있는 항목을 처리합니다.

OnTick에서는 이러한 모든 기이함이 완전히 제자리에 있습니다. OnTick으로 재현 가능한 예제를 만드는 것은 어렵습니다. OnTradeTransaction이 예로 선택되었지만 이것이 본질을 바꾸지는 않습니다.

 
traveller00 :

OnTick에서는 이러한 모든 기이함이 완전히 제자리에 있습니다. OnTick으로 재현 가능한 예제를 만드는 것은 어렵습니다. OnTradeTransaction이 예로 선택되었지만 이것이 본질을 바꾸지는 않습니다.

돈키호테를 계속 모방하십시오 ...

 
fxsaber :

 нет среди живых и мертвых

MT4Orders 수준에서 이 지점을 우회하는 것이 좋습니다.

이제 불행히도 이중 주문이 있습니다. 아마도 이것 때문일 것입니다.