거래 처리 OnTradeTransaction - 페이지 5

 
fxsaber :

바보.

나는 당신이 당신 자신에 대해 말하는 것을 이해합니다.

하지만 "그가 하고 싶어하는 - 그가 알아서 할 것입니다. "는 어떻습니까?

 
fxsaber :

"추천"으로 수십 개를 만드는 것보다 하나의 게시물로 답변하는 것이 더 쉽습니다.

그는 이해하기를 원한다.

내가 원했을 때 ... 하지만 당신의 코드는 뭔가 있습니다.
 
Alexey Viktorov :
내가 원했을 때 ... 하지만 당신의 코드는 뭔가 있습니다.

이 경우 MT4/5에 대해 약간만 알면 됩니다.

 
fxsaber :

이 경우 MT4/5에 대해 약간만 알면 됩니다.

불행히도, 나는 조금보다 조금 더 알고 있습니다.

이미 한 번 말했지만, 모든 배럴에 플러그를 꽂는 것처럼 코드를 비즈니스 안팎에 끼워넣습니다. 누가 그것을 필요로 하는지, 그는 오랫동안 그것을 사용했으며 일부는 그것을 광고하기도 합니다. 그러나 실제로 필요하지 않은 곳에 그것을 부과하는 것은 단순히 음란합니다. 특히 사람이 트릭을 통하지 않고 mql5의 프로그래밍을 이해하고 이해하려는 경우.

 
Alexey Viktorov :

불행히도, 나는 조금보다 조금 더 알고 있습니다.

이미 한 번 말했지만, 모든 배럴에 플러그를 꽂는 것처럼 코드를 비즈니스 안팎에 끼워넣습니다. 누가 그것을 필요로 하는지, 그는 오랫동안 그것을 사용했으며 일부는 그것을 광고하기도 합니다. 그러나 실제로 필요하지 않은 곳에 그것을 부과하는 것은 단순히 음란합니다. 특히 사람이 mql5의 프로그래밍을 이해하고 이해하기를 원하는 경우가 아닌 단점을 통해 이해하려는 경우.

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

거래 처리 OnTradeTransaction

fxsaber , 2019.02.08 13:24

분기 작성자의 문제에 대한 해결책을 보여주십시오.

몇 가지 진술을 할 때 실제로 어떻게든 확인하는 것이 좋을 것입니다. 여러 페이지에서 OnTradeTransaction 솔루션이 나타나지 않았습니다. 그리고 그것이 나타나면 제공된 솔루션이 왜 이것이고 그렇지 않은지 빨리 분명해질 것입니다. 결정은 눈에 보이는 논리가 아니라 도대체 무엇이어야 합니다. 내가 포함을 제거한다는 사실에서 논리의 소스 코드는 손실을 잃지 않을 것입니다. 그리고 논리(아이디어)만 이해하면 됩니다. 더 이상은 필요하지 않습니다.

나는 이 진술 에 동의합니다. 논리가 명확해지면 모든 내포물이 버려지고 순수한 내포물이 생성됩니다. 이것이 제안된 경로입니다. 포함을 마스터하는 것이 아니라 코드를 보여주고 솔루션이 필요한 작업이 어떻게 작동할 수 있는지 겁내지 않는 것입니다.

 

여기에서 나는 문제의 근원으로 돌아갔다. 그리고 질문이 생깁니다.

OnTradeTransaction 절차에서 트랜잭션의 트랜잭션을 포착하고 이를 기반으로 보류 중인 정지 주문을 내립니다.

아래는 거래 거래 코드입니다.

 case TRADE_TRANSACTION_DEAL_ADD :
        {
         drop_info2( "TRADE_TRANSACTION_DEAL_ADD\r\n" +TransactionDescription(trans));
         if ((trans.deal_type== DEAL_TYPE_BUY || trans.deal_type== DEAL_TYPE_SELL ) && trans.order!= 0 )
           {
             if (getIsDealOfExpert(trans.deal)) //функция проверки принадлежности сделки к роботу
              {
               drop_info2( "Сделка наша" );
               analyzeFilledOrder(trans.order,trans.volume); //процедура по выставлению отложенных стоп ордеров
              }
           }
        }
       break ;

거래가 로봇에 속하는지 확인하기 위한 기능 코드

 bool getIsDealOfExpert( ulong dealTicket)
     {
       if ( HistoryDealSelect (dealTicket) && HistoryDealGetInteger (dealTicket, DEAL_MAGIC )==magic_number && HistoryDealGetString (dealTicket, DEAL_SYMBOL )==symbol)
         return true ;
       else
         return false ;
     }

보류 중인 중지 주문을 위한 절차 코드

 void analyzeFilledOrder( ulong orderTicket, double volume)
  {
   bool isFindOrder= false ;
   string fullComment;
   ENUM_ORDER_TYPE orderType;
   if (getIsOrderOfExpert(orderTicket, true )) //Если ордер из сделки уже в истории
     {
      fullComment= HistoryOrderGetString (orderTicket, ORDER_COMMENT );
      orderType= ENUM_ORDER_TYPE ( HistoryOrderGetInteger (orderTicket, ORDER_TYPE ));
      isFindOrder= true ; //локальная переменная, если нашли в истории
     }
   if (!isFindOrder && getIsOrderOfExpert(orderTicket, false )) //Если не нашли ордер в истории и ордер есть не в истории
     {
      fullComment= OrderGetString ( ORDER_COMMENT ); 
      orderType= ENUM_ORDER_TYPE ( OrderGetInteger ( ORDER_TYPE ));
      isFindOrder= true ; //локальная переменная, если нашли не в истории
     }
   if (isFindOrder) //если хоть где-то нашли, то выставляем отложенные стоп ордера
     {
     //выставляем стоп ордера

내역이 아닌 내역에 있는 주문 검색 기능의 코드

 bool getIsOrderOfExpert( ulong OrderTicket , bool isHistory)
     {
       bool is_expert= false ;
       //если ордер находится в истории
       if (isHistory)
        {
         if ( HistoryOrderSelect ( OrderTicket ) && HistoryOrderGetInteger ( OrderTicket , ORDER_MAGIC )==magic_number && HistoryOrderGetString ( OrderTicket , ORDER_SYMBOL )==symbol)
            is_expert= true ;
        }
       else
        {
         if ( OrderSelect ( OrderTicket ) && OrderGetInteger ( ORDER_MAGIC )==magic_number && OrderGetString ( ORDER_SYMBOL )==symbol)
            is_expert= true ;
        }
       return is_expert;
     }

나는 터미널에서 수신된 순서대로 로그에 트랜잭션의 도착에 대한 정보를 표시합니다. 이제 데모 계정에서 거래할 때 발생한 문제:

주기적으로 거래는 TRADE_TRANSACTION_ORDER_DELETE, TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_HISTORY_ADD 순서로 도착합니다. 이 경우 종종 거래가 완료된 후 중지 주문이 설정되지 않습니다. 내 생각에 이것은 주문이 이미 삭제되었지만 아직 내역에 입력되지 않았기 때문입니다. 즉, 거래 내역이나 터미널에서 주문을 찾을 수 없습니다. 이것이 의심스럽긴 하지만 로봇이 모든 차원( isFindOrder= false )에서 주문을 검색한 후 찾지 못하기 때문에 중지 주문이 지정되지 않는다는 사실이 남아 있습니다. 거래 순서는 정확할 수 있지만 주문은 여전히 어디에도 없습니다. 모든 경우에 로봇은 거래를 올바르게 결정하지만 주문에 도달하지는 않습니다. 동시에 모든 것이 때때로 올바르게 작동하고 주문이 이루어집니다.

다른 접근 방식을 시도했지만 아무 것도 도움이되지 않습니다. 이제 보류 중인 주문을 하는 절차의 시작 부분에 1초의 절전 모드를 추가할 생각입니다. 시간이 충분하지 않을 수 있습니다. 일반적으로 어디를 파야할지조차 모릅니다.

경험과 아이디어를 공유해 주세요.

강조 표시된 문구를 다음 문구와 어떻게 결합할 수 있습니까?

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

거래 처리 OnTradeTransaction

일리야 차일드 , 2019.02.07 20:20

그물 모드를 추가하는 것을 잊었습니다. 위치는 모든 로봇이 동일합니다. 즉, 한 로봇이 포지션을 매수 하고 두 번째 로봇이 포지션을 매수 하고 TRADE_TRANSACTION_DEAL_ADD 이벤트가 역순으로 발생하여 첫 번째 로봇은 이를 보지 못했습니다.

예, 논리에 따르면 트랜잭션에서 주문 주석을 받아야 합니다. 위치는 여기에서별로 도움이 되지 않습니다.

오타에 신경 쓰지 말자. 한 사람은 두 번째 구입 한 사람을 샀다. 가장 중요한 것은 두 명의 고문이 상계 계정 유형의 동일한 상품에 대해 작업한다는 것입니다. 아니면 제가 뭔가를 잘 이해하지 못하는 건가요?

 
Alexey Viktorov :

오타에 신경 쓰지 말자. 한 사람은 두 번째 구입 한 사람을 샀다. 가장 중요한 것은 두 명의 고문이 상계 계정 유형의 동일한 상품에 대해 작업한다는 것입니다. 아니면 제가 뭔가를 잘 이해하지 못하는 건가요?

하나의 네팅 기호에 여러 Expert Advisors가 있는 것이 일반적입니다. 예를 들어, 그리드. 따라서 네팅 포지션이 0일 가능성은 충분히 있지만 SL과 TP가 2개 존재합니다. 문제는 위에서 명확하게 언급되었습니다.

 
fxsaber :

하나의 네팅 기호에 여러 Expert Advisors가 있는 것이 일반적입니다. 예를 들어, 그리드. 따라서 네팅 포지션이 0일 가능성은 충분히 있지만 SL과 TP가 2개 존재합니다. 문제는 위에서 명확하게 언급되었습니다.

우리는 무엇이든 생각할 수 있습니다. "교통부장"의 말을 듣고 싶습니다. 결국 나는 그의 글을 인용했다.

 
Alexey Viktorov :

우리는 무엇이든 생각할 수 있습니다. "교통부장"의 말을 듣고 싶습니다. 결국 나는 그의 글을 인용했다.

사장님이 너무 '겁'이 나서 다시는 나오지 않으셨나보네요 :)

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

나는 당신을 잘 이해하지 못했습니다. 여기 내 거래 처리가 있습니다

거래의 주문 상태에 대해. 당신은 내가 그것을 스스로 발명하지 않는다는 것을 이해합니다. 이것은 모든 deal_add 트랜잭션의 주문 상태입니다. 마켓이 되었는데, 지연이 있는 점 양해 부탁드립니다.

이제 오해의 또 다른 부분이 도착했습니다. 거래 Deal_add가 도착했지만 포지션이 나타나지 않고 존재하지 않는 포지션에 대한 지연이 발생했습니다.

추가되었습니다.

거래 Deal_add가 도착했지만 포지션이 나타나지 않고 존재하지 않는 포지션에 대한 지연이 발생했습니다. 거래 유형은 판매, 주문 유형은 구매입니다. 처음에는 한도가 Sell_limit이었지만

분명히 오래된 infa가 어딘가에서 정리되지 않았거나 초기화되지 않은 infa가 사용되었습니다.

deal_add가 도착하면 주문은 일반적으로 이미 기록에 있거나 이미 삭제되었지만 기록에는 아직 나타나지 않았습니다.

여전히 주문이 있고 배치된 상태에 있는 경우도 있습니다.

그러나 현재로서는 거의 시작할 수 없습니다.

주문 또는 내역이 선택되는 위치를 확인하여 _정말_ 선택되고 있는지 확인하세요.