거래 처리 OnTradeTransaction - 페이지 9

 
JRandomTrader :

로봇 알고리즘의 관점에서 가상의 위치가 필요합니다. 로봇이 열면 닫아야 합니다.

나는 첫 번째 게시물의 작업이 훨씬 더 간단했다고 덧붙일 것입니다. 그리드의 각 노드가 자체 SL / TP로 닫혀 있는 제한 주문 그리드 작업을 구현해야 했습니다.

예를 들어, 그러한 단방향 전문가 고문은 계정에 하나만 있으며 다른 사람은 아무 조치도 취하지 않습니다. 그러나 여기에서도 우리는 가상의 위치에 대해 이야기하고 있습니다.


그리고 주제는 그물뿐만 아니라 우려를 제기했습니다. 헤지에서도 마찬가지입니다. 그것은 여러 Expert Advisors를 거래하지만 누군가가 그것을 받아 CloseBy에서 여러 직책을 강타했습니다. Expert Advisors가 가상의 위치를 통해 구현된다면 그러한 붕괴는 논리를 위반하지 않을 것입니다.


일반적으로 이것은 가상 거래 환경을 통해 해결됩니다. 그리고 해결하기도 쉽습니다. 이것이 알고리즘 회사가 거래소에서 TS 포트폴리오를 출시하는 방법입니다.

 
Alexey Viktorov :

단순화하기 위해 아마도 그렇습니다. 동의한다.

그런 다음 "운송 부서장"은 문제와 그의 행동을 완전히 말하지 않았습니다.

중지 명령은 무엇을 의미합니까? 일반 직위를 위해 또는 이 특정 고문이 일하는 부분에 대해서만???

물론, 특정 고문이 일하는 위치의 일부입니다. 중지 주문 - 보류 중인 판매/구매 중지 및 판매/구매 제한.

지금까지 추론에서 나는 OnTradeTransactions 에 많은 함정이 있기 때문에 OnTrade 로 가는 것이 더 낫다는 것을 깨달았습니다.

 
Илья Ребенок :

물론, 특정 고문이 일하는 위치의 일부입니다. 중지 주문 - 보류 중인 판매/구매 중지 및 판매/구매 제한.

지금까지 추론에서 나는 OnTradeTransactions 에 많은 함정이 있기 때문에 OnTrade 로 가는 것이 더 낫다는 것을 깨달았습니다.

함께 작동한다는 점에 유의하십시오. 어느 것이 첫 번째이고 어느 것이 두 번째인지 기억이 나지 않습니다. 그러나 OnTradeTransactions에는 추가 코드 없이 최소한 일부 정보가 있으며 OnTrade에서는 모든 것을 강제로 가져와야 합니다. 우선 어떤 이벤트가 함수를 트리거했는지 확인해야 합니다...

 

나는 여기에 그러한 트랜잭션 캐처를 작성했습니다. - 무엇을 어디에서 결정하는 것이 유용할 수 있습니다(여기서는 트랜잭션 유형에 따라 간단한 처리이지만) - 주문 및 트랜잭션 내역에 액세스할 수 없습니다(예: 인쇄 전문가의 ID)

 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
   if (trans_type== TRADE_TRANSACTION_ORDER_ADD || trans_type== TRADE_TRANSACTION_ORDER_UPDATE || trans_type== TRADE_TRANSACTION_ORDER_DELETE ||
      trans_type== TRADE_TRANSACTION_HISTORY_ADD || trans_type== TRADE_TRANSACTION_HISTORY_UPDATE || trans_type== TRADE_TRANSACTION_HISTORY_DELETE )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %d" , "order" ,trans.order);
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "order_type" , EnumToString (trans.order_type));
       PrintFormat ( "%-15s: %s" , "orders_state" , EnumToString (trans.order_state));
       PrintFormat ( "%-15s: %s" , "time_type" , EnumToString (trans.time_type));
       if (trans.time_type== ORDER_TIME_SPECIFIED || trans.time_type== ORDER_TIME_SPECIFIED_DAY )
        {
         PrintFormat ( "%-15s: %s" , "time_expiration" , TimeToString (trans.time_expiration, TIME_DATE | TIME_SECONDS ));
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "time_expiration" , "---" );
        }
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       if (trans.order_type== ORDER_TYPE_BUY_STOP_LIMIT || trans.order_type== ORDER_TYPE_SELL_STOP_LIMIT )
        {
         PrintFormat ( "%-15s: %.2f" , "price_trigger" ,trans.price_trigger);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "price_trigger" , "---" );
        }
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       if (trans_type!= TRADE_TRANSACTION_ORDER_ADD && (trans.order_type== ORDER_TYPE_BUY || trans.order_type== ORDER_TYPE_SELL ))
        {
         PrintFormat ( "%-15s: %d" , "position" ,trans.position);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position" , "---" );
        }
       if (trans.order_type== ORDER_TYPE_CLOSE_BY )
        {
         PrintFormat ( "%-15s: %d" , "position_by" ,trans.position_by);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position_by" , "---" );
        }
     }
   else if (trans_type== TRADE_TRANSACTION_DEAL_ADD || trans_type== TRADE_TRANSACTION_DEAL_UPDATE || trans_type== TRADE_TRANSACTION_DEAL_DELETE )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %d" , "deal" ,trans.deal);
       PrintFormat ( "%-15s: %d" , "order" ,trans.order);
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "deal_type" , EnumToString (trans.deal_type));
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       PrintFormat ( "%-15s: %d" , "position" ,trans.position);
       if (trans.order_type== ORDER_TYPE_CLOSE_BY )
        {
         PrintFormat ( "%-15s: %d" , "position_by" ,trans.position_by);
        }
       else
        {
         PrintFormat ( "%-15s: %s" , "position_by" , "---" );
        }
     }
   else if (trans_type== TRADE_TRANSACTION_POSITION )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
       PrintFormat ( "%-15s: %s" , "symbol" ,trans.symbol);
       PrintFormat ( "%-15s: %s" , "deal_type" , EnumToString (trans.deal_type));
       PrintFormat ( "%-15s: %.8f" , "price" ,trans.price);
       PrintFormat ( "%-15s: %.8f" , "price_sl" ,trans.price_sl);
       PrintFormat ( "%-15s: %.8f" , "price_tp" ,trans.price_tp);
       PrintFormat ( "%-15s: %.2f" , "volume" ,trans.volume);
       PrintFormat ( "%-15s: %d" , "position" ,trans.position);
     }
   else if (trans_type== TRADE_TRANSACTION_REQUEST )
     {
       Print ( "---" );
       Print ( EnumToString (trans_type));
     }
  }
 
Илья Ребенок :

fxsaber 예를 들어 주셔서 감사합니다!

이것은 단지 예가 아니라 원래 문제에 대한 완전한 솔루션입니다.

 
Илья Ребенок :

물론, 특정 고문이 일하는 위치의 일부입니다. 중지 주문 - 보류 중인 판매/구매 중지 및 판매/구매 제한.

지금까지 추론에서 나는 OnTradeTransactions 에 많은 함정이 있기 때문에 OnTrade 로 가는 것이 더 낫다는 것을 깨달았습니다.

같은 마음으로 진행하세요 :)

약간의 힌트 MqlTradeTransaction &trans - 관련 필드만 있음

TRADE_TRANSACTION_DEAL_*

거래 처리(TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE 및 TRADE_TRANSACTION_DEAL_DELETE)와 관련된 무역 거래의 경우 다음 필드가 MqlTradeTransaction 구조에 채워집니다.

  • 거래 - 거래 티켓;
  • 주문 - 거래가 이루어진 주문 티켓;
  • 기호 - 거래에 포함된 금융 상품의 이름.
  • 유형 - 무역 거래 유형;
  • deal_type - 거래 유형;
  • 가격 - 거래가 이루어진 가격.
  • price_sl - 손절매 가격(거래가 이루어진 순서에 따라 지정된 경우 작성됨).
  • price_tp - 이익실현 가격(거래가 이루어진 순서에 따라 지정된 경우 채워짐).
  • volume - 로트의 거래량.
  • position - 거래 실행의 결과로 열렸거나 변경되었거나 닫힌 위치의 티켓.
  • position_by - 반대 입장 티켓. 반대 위치(아웃 바이)를 마감하는 거래에 대해서만 채워집니다.

그리고 MqlTradeResult &result를 시청해야 합니다.

하지만 이제 1000줄의 코드가 있습니다!

 
prostotrader :

같은 마음으로 진행하세요 :)

약간의 힌트 MqlTradeTransaction &trans - 관련 필드만 있음

TRADE_TRANSACTION_DEAL_*

거래 처리(TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE 및 TRADE_TRANSACTION_DEAL_DELETE)와 관련된 무역 거래의 경우 다음 필드가 MqlTradeTransaction 구조에 채워집니다.

  • 거래 - 거래 티켓;
  • 주문 - 거래가 이루어진 주문 티켓;
  • 기호 - 거래에 포함된 금융 상품의 이름.
  • 유형 - 무역 거래 유형;
  • deal_type - 거래 유형;
  • 가격 - 거래가 이루어진 가격.
  • price_sl - 손절매 가격(거래가 이루어진 순서에 따라 지정된 경우 작성됨).
  • price_tp - 이익실현 가격(거래가 이루어진 순서에 따라 지정된 경우 채워짐).
  • 볼륨 - 로트의 거래량.
  • position - 거래 실행의 결과로 열렸거나 변경되었거나 닫힌 위치의 티켓.
  • position_by - 반대 입장 티켓. 반대 포지션(아웃 바이)을 마감하는 거래에 대해서만 채워집니다.

그리고 MqlTradeResult &result를 시청해야 합니다.

그러나 이제 1000줄의 코드가 있습니다!

물론, 나는 당신의 자존심이 터지고 있다는 것을 이해합니다. 경험, 모든 것...

그러나 나는 비꼬기 위해서가 아니라 도움을 받기 위해 여기에 왔습니다. 조금 더 위를 보면 내가 deal_add에 채워지지 않은 필드를 파싱하는 데 실수를 저질렀다는 데 동의했다는 것을 알 수 있습니다.

좀 더 건설적인 도움을 주시면 감사하겠습니다. 스스로 "쓰레기" 할 수 있습니다.) 건설적인 비판을 받아들입니다.

" 그리고 MqlTradeResult &result "를 살펴봐야 합니다.

참고로 무역거래 결과는 TRADE_TRANSACTION_REQUEST 에 대해서만 채워져 있고 이런 거래에 대해서만 분석이 필요하다고 한다.

 

당신은 이상한 인식을 가지고 있습니다.

나는 내 생각에 누군가를 "쓰레기"할 생각조차하지 않았습니다. 분명히 당신은 삶에 대한 그러한 인식과

당신은 아마 그것을 자주 사용합니다.

그리고 "폭발"하는 것은 내가 아니라 fxsaber (a)입니다. 거의 모든 주제에서 그는 자신의

그러나 동시에 그는 실제 생활에서 거래하지 않으며 FORTS에서는 더욱 그렇습니다!

동일한 문제에 대한 간단하고 복잡한 솔루션이 있습니다.

귀하의 질문에 따르면 귀하는 초보자입니다.

그러나 그들이 "우리는 단순한 방법을 찾는 것이 아니다"라고 말하듯이!

OnTradeTransaction 기능은 다음 을 단순화하도록 특별히 설계되었습니다.

로봇 개발에서 프로그래머를 위한 "생명",

OnTrade에 익숙하고 어떻게든 작동하도록 하려면 많은 코드 를 작성해야 한다는 사실 때문입니다.

나는 이미 거래가 아니라고 말했지만 명령 은 모든 것의 머리입니다!

초기 주문량이 1이 아닌 2,10이라면 어떻게 하시겠습니까?

보류 중인 주문을 설정했습니다. 즉, "강하게" 제어할 수 없으며 더욱 그렇습니다.

거래에! 대기 중인 주문에는 많은 함정이 있습니다.

그러나 당신은 스스로 시도하는 대신 모호한 기성 솔루션을받은 간단한 경로를 선택했습니다.

알아내십시오(힌트 포함) - 주인은 신사입니다.

행운을 빌어요, 더 이상 참여하지 않습니다.

 
prostotrader :

당신은 이상한 인식을 가지고 있습니다.

나는 내 생각에 누군가를 "쓰레기"할 생각조차하지 않았습니다. 분명히 당신은 삶에 대한 그러한 인식과

당신은 아마 그것을 자주 사용합니다.

그리고 "폭발"하는 것은 내가 아니라 fxsaber (a)입니다. 거의 모든 주제에서 그는 자신의

그러나 동시에 그는 실제 생활에서 거래하지 않으며 FORTS에서는 더욱 그렇습니다!

동일한 문제에 대한 간단하고 복잡한 솔루션이 있습니다.

귀하의 질문에 따르면 귀하는 초보자입니다.

그러나 그들이 "우리는 단순한 방법을 찾는 것이 아니다"라고 말하듯이!

OnTradeTransaction 기능은 다음 을 단순화하도록 특별히 설계되었습니다.

로봇 개발에서 프로그래머를 위한 "생명",

OnTrade에 익숙하고 어떻게든 작동하도록 하려면 많은 코드 를 작성해야 한다는 사실 때문입니다.

나는 이미 거래가 아니라고 말했지만 명령 은 모든 것의 머리입니다!

초기 주문량이 1이 아닌 2,10이라면 어떻게 하시겠습니까?

보류 중인 주문을 설정했습니다. 즉, "강하게" 제어할 수 없으며 더욱 그렇습니다.

거래에! 대기 중인 주문에는 많은 함정이 있습니다.

그러나 당신은 스스로 시도하는 대신 모호한 기성 솔루션을받은 간단한 경로를 선택했습니다.

알아내십시오(힌트 포함) - 주인은 신사입니다.

행운을 빌어요, 더 이상 참여하지 않습니다.

기성품 솔루션을 사용하지 않는다는 사실부터 시작하겠습니다. 나는 당신이 거기에서 나를 어떻게 생각했는지 모르지만 (유용한 지식을 배웠지만) 주제에서 단일 솔루션을 사용하지 않았으며 여전히 실험하고 이해하고 있습니다. 일반적으로 귀하의 게시물에서 귀하가 다른 사람을 위해 생각하는 것을 좋아한다는 것을 알았습니다. 범죄가 없습니다.

주문량에 따라 어떤 차이가 있습니까? 거래를 기반으로 실제로 얼마나 많은 양을 처리했는지 이해할 수 있습니다. 해당 주문 채우기 유형으로 부분 주문 채우기를 잡는 것보다 이것이 더 쉬운 것 같습니다. 더욱이 한 주제에서는 거래만이 입지를 다졌다는 자신감을 준다는 점을 강조했다.

 
Илья Ребенок :

기성품 솔루션을 사용하지 않는다는 사실부터 시작하겠습니다. 나는 당신이 거기에서 나를 어떻게 생각했는지 모르지만 (유용한 지식을 배웠지만) 주제에서 단일 솔루션을 사용하지 않았으며 여전히 실험하고 이해하고 있습니다. 일반적으로 귀하의 게시물에서 귀하가 다른 사람을 위해 생각하는 것을 좋아한다는 것을 알았습니다. 범죄가 없습니다.

주문량에 따라 어떤 차이가 있습니까? 거래를 기반으로 실제로 얼마나 많은 양을 처리했는지 이해할 수 있습니다. 해당 주문 채우기 유형으로 부분 주문 채우기를 잡는 것보다 이것이 더 쉬운 것 같습니다. 더욱이 한 주제에서는 거래만이 입지를 다졌다는 자신감을 준다는 점을 강조했다.

읽는 법을 잊으셨습니까?

" 행운을 빕니다, 더 이상 참여하지 않습니다. "

사유: