MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1578

 
MakarFX :

Versuchen Sie es (ich habe es nicht getestet)

감사합니다. 나중에 확인하겠습니다.

 
Eugen8519 :



기능을 올바르게 배치하는 데 도움이 됩니다.

...

그러나 삽입 방법과 위치

정지 손실에 도달했을 때 메시지를 수신하거나   테이크 프로 t.?


마카르FX :

우리는 같은 것에 대해 이야기하고 있습니까?

OnTradeTransaction 을 사용하여 SL의 이탈을 추적하는 예를 찾았습니다. https://www.mql5.com/en/code/21147 .

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

두 가지 다른 기기에 대한 동일한 Expert Advisor

안녕하세요! 이해를 도와주세요.

끌어온 차트에서 작업하는 Expert Advisor가 있습니다( Symbol() 값은 작업 기호의 이름으로 사용됨).

그러나 이 EA에는 발주된 주문의 티켓이 포함된 ticket_exist 변수도 있으며 EA는 ticket_exist가 0이 아닌 경우 주문이 여기에서 설정된다는 것을 이해합니다.

질문: 두 개의 다른 도구에서 이러한 Expert Advisor를 열고 한 도구에서 ticket_exist 변수가 0이 아닌 경우 동일한 이름을 가진 변수가 다른 도구에서 0으로 유지됩니까?

수.

 
Mihail Nefedov :

두 가지 다른 기기에 대한 동일한 Expert Advisor

안녕하세요! 이해를 도와주세요.

드래그한 차트에서 작동하는 Expert Advisor가 있습니다( Symbol() 값은 작업 도구의 이름으로 사용됨).

그러나 이 EA에는 발주된 주문의 티켓이 포함된 ticket_exist 변수도 있으며 EA는 ticket_exist가 0이 아닌 경우 주문이 여기에서 설정된다는 것을 이해합니다.

질문: 두 개의 다른 도구에서 이러한 Expert Advisor를 열고 한 도구에서 ticket_exist 변수가 0이 아닌 경우 동일한 이름을 가진 변수가 다른 도구에서 0으로 유지됩니까?

수.

한 Expert Advisor의 변수 값은 다른 Expert Advisor에서 사용할 수 없습니다. 가장 중요한 것은 기호나 마법 또는 둘 모두가 다르다는 것입니다.

 

시간 단위는 몇 시입니까? 서버 시간 또는 UTC ?

어디선가 읽은 기억이 나는데 어디서 본 기억이...

 
Alexey Viktorov :

한 Expert Advisor의 변수 값은 다른 Expert Advisor에서 사용할 수 없습니다. 가장 중요한 것은 기호나 마법 또는 둘 모두가 다르다는 것입니다.

덕분에! 내가 올바르게 이해했다면 서로 다른 기호에서 작업하는 Expert Advisors(두 개의 절대적으로 동일한 것)의 충돌을 얻으려면 해당 변수를 전역으로(전체 터미널에 대해) 설정하거나 예를 들어 일련 번호로 주문에 액세스해야 합니다. 숫자 또는 단순히 그 존재 사실에 의해?

 
MakarFX :

이것을 시도하십시오 (나는 확인하지 않았습니다)

작동하지 않고 컴파일 오류가 발생합니다.


그런 다음 이것을 시도했는데 문제없이 컴파일되지만 시장이 닫히면 테스트 할 수 없습니다

내일 끝내겠습니다

   void OnTradeTransaction ( const MqlTradeTransaction &trans,
                           const MqlTradeRequest &request,
                           const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       long      deal_entry        = 0 ;
       string    deal_symbol       = "" ;
       long      deal_magic        = 0 ;
       long      deal_reason       =- 1 ;
       if ( HistoryDealSelect (trans.deal))
        {
         deal_entry= HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
         deal_symbol= HistoryDealGetString (trans.deal, DEAL_SYMBOL );
         deal_magic= HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
         deal_reason= HistoryDealGetInteger (trans.deal, DEAL_REASON );
        }
       else
         return ;

       if (deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if (deal_entry== DEAL_ENTRY_OUT )
           {
             if (deal_reason== DEAL_REASON_SL )
               SendNotification ( "Закрыл  позицию > StopLoss" );

             if (deal_reason== DEAL_REASON_TP )
               SendNotification ( "Закрыл  позицию > TakeProfit" );
           }
       }
  }
파일:
x4.PNG  11 kb
 
Eugen8519 :

작동하지 않고 컴파일 오류가 발생합니다.


그런 다음 이것을 시도했는데 문제없이 컴파일되지만 시장이 닫히면 테스트 할 수 없습니다

내일 끝내겠습니다

코드를 잘못 입력했습니다 !

약간 수정, 모든 것이 작동합니다 (확인했습니다)

   datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit ()
  {
   lastclouse= TimeCurrent ();
   .....
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (LastClouseProfit()!= EMPTY_VALUE )
     {
       SendNotification (LastClouseProfit()); lastclouse= TimeCurrent ();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket= 0 ;
   double profit= EMPTY_VALUE ;
   HistorySelect (lastclouse, TimeCurrent ());
   uint total= HistoryDealsTotal (); 
   for ( uint i= 0 ;i<total;i++) 
     { 
       if ((ticket= HistoryDealGetTicket (i))> 0 ) 
        { 
         profit+= HistoryDealGetDouble (ticket, DEAL_PROFIT ); 
        }
     } 
   return (profit);
  }
//+------------------------------------------------------------------+
 
MakarFX :

코드를 잘못 입력했습니다 !

약간 수정, 모든 것이 작동합니다(확인했습니다)

여기에서 거래가 SL 또는 TP에 의해 정확히 마감되었다는 사실도 추적해야 합니다. 그리고 OnTradeTransaction의 도움으로 거래가 종료된 직후에 미리 만들어진 데이터를 얻을 수 있습니다.

 double LastClouseProfit()
  {
   ulong ticket= 0 ;
   double profit= EMPTY_VALUE ;
   HistorySelect (lastclouse, TimeCurrent ());
   uint total= HistoryDealsTotal (); 
   for ( uint i= 0 ;i<total;i++) 
     { 
       if ((ticket= HistoryDealGetTicket (i))> 0 ) 
        { 
         profit= HistoryDealGetDouble (ticket, DEAL_PROFIT ); 
        }
     } 
   return (profit);
  }

TimeCurrent 에 의해 두 개 이상의 거래가 성사되면 어떤 결과가 반환되어야 합니까?... 그리고 이익이 있다고 해서 거래가 SL 또는 TP에 의해 성사되었음을 의미하지는 않습니다. 내가 말했듯이 이것은 추적해야합니다. 따라서 OnTradeTransaction 을 사용 하는 것이 가장 쉬운 솔루션입니다!

 
Mihail Matkovskij :

여기에서 거래가 SL 또는 TP에 의해 정확히 마감되었다는 사실도 추적해야 합니다.

거래 종료에 대한 알림이 필요하다는 것을 이해합니다. 아마도 제가 잘못 이해했을 것입니다 ...

마이클 마트코프스키 :

TimeCurrent 에 의해 둘 이상의 거래가 성사되면 어떤 결과가 반환되어야 합니까?

모르겠어 확인해봐야지