초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 890

 

보류중인 주문 이 트리거 된 순간을 결정할 수있는 고문이 있습니다.

https://www.mql5.com/en/code/17610

그것으로 SELL_STOP 주문 티켓을 얻습니다.

에 따라 코드를 변경했습니다.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (bln_find_order) // true -> you should look for a order
     {
       static long counter= 0 ;
       Print ( "Attempt number " ,counter);
       ResetLastError ();
       if ( HistoryOrderSelect (ul_find_order))
        {
         long type_order= HistoryOrderGetInteger (ul_find_order, ORDER_TYPE );
         if (type_order== ORDER_TYPE_SELL_STOP )
           {
             Print ( "The pending order " ,ul_find_order, " is found! Type of order is " ,
                   EnumToString (( ENUM_ORDER_TYPE ) HistoryOrderGetInteger (ul_find_order, ORDER_TYPE )));
            bln_find_order= false ;         // true -> you should look for a order
            counter= 0 ;
             return ;
           }
         else
           {
             Print ( "The order " ,ul_find_order, " is not pending" );
            bln_find_order= false ;         // true -> you should look for a order
             return ;
           }
        }
       else
        {
         Print ( "Order " ,ul_find_order, " is not find, error#" , GetLastError ());
        }
      counter++;
     }
  }

모든 것이 특정 지점까지는 잘 됩니다. 다른 유형의 주문이 역사에 나타날 때까지.

예: SELL_LIMIT.

예시

SELL_LIMIT이 기록에 나타나는 즉시 마지막 SELL_STOP 티켓을 더 이상 얻을 수 없습니다.

EA에서 오류가 발생합니다.

주문 9가 보류 중이 아닙니다.

역사상 SELL_STOP이지만

그리고 7일에 티켓이 필요한데 9일이 그것과 무슨 상관이야

어드바이저는 전체 히스토리가 아니라 마지막 히스토리에서만 필요한 순서를 찾고 있는 것 같습니다.
TypePendingOrderTriggered
TypePendingOrderTriggered
  • 투표: 21
  • 2017.02.14
  • Vladimir Karputov
  • www.mql5.com
()   {    (bln_find_order)      {        counter=;       (,counter);       ();         {          (type_order== || type_order== ||             type_order== ||type_order==)            {             (,ul_find_order,,                   (()(ul_find_order,)));             bln_find_order=;                     counter=;             ;            }...
 

안녕하세요. StopLoss_= 0 인 경우 오류가 발생합니다.

실패 수정 #2 판매 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [잘못된 정류장]


 if (m_position.PositionType()== POSITION_TYPE_SELL )
                 {
                   if (m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)!=m_position.TakeProfit())
                    {
                     if (StopLoss_<= 0 )
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_position.StopLoss(),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                               );
                         Sleep ( 200 );
                       }

                     if (StopLoss_> 0 )
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()+StopLoss_*m_adjusted_point),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                               );
                         Sleep ( 200 );
                       }
                    }
                 }
m_position.StopLoss() 대신 0을 넣으면 동일한 오류가 발생합니다. 무슨 일이야?
 
Sile Si :

안녕하세요. StopLoss_= 0 인 경우 오류가 발생합니다.

실패 수정 #2 판매 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [잘못된 정류장]

   if (m_position.PositionType()== POSITION_TYPE_SELL )
     {
       if (m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)!=m_position.TakeProfit())
        {
         if (StopLoss_<= 0 )
           {
            m_trade.PositionModify(m_position.Ticket(),
                                   m_position.StopLoss(),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                   );
             Sleep ( 200 );
           }

         if (StopLoss_> 0 )
           {
            m_trade.PositionModify(m_position.Ticket(),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()+StopLoss_*m_adjusted_point),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                   );
             Sleep ( 200 );
           }
        }
     }

m_position.StopLoss() 대신 0을 넣으면 동일한 오류가 발생합니다. 무슨 일이야?

잘못된 프로그램 작성 논리.

StopLoss_=0인 경우 상위 조건이 트리거 됩니다. 즉, TakeProfit을 수정하려는 시도입니다. 실수는 공개 가격에서 빼는 것입니다. 이 경우 TakeProfit 수준은 현재 가격보다 높을 수 있으며 이는 실수입니다.

귀하의 경우 CURRENT PRICE(m_position.PriceCurrent)에서 빼야 합니다.

 
Vladimir Karputov :

매도 포지션이 열렸고 , Selllimit가 활성화되었습니다. 현재 가격이 아닌 새 포지션 가격을 기준으로 tp를 이전해야 합니다.

잘못된 가격으로 수정하지 않으려면 어떤 검사를 수행해야 합니까?

 
Sile Si :

매도 포지션이 열렸고 , Selllimit가 활성화되었습니다. 현재 가격이 아닌 새 포지션 가격을 기준으로 tp를 이전해야 합니다.

잘못된 가격으로 수정하지 않으려면 어떤 검사를 수행해야 합니까?

시험:

 if (m_position.PriceOpen()-ExtTakeProfit<m_position.PriceCurrent()
   {
    m_trade.PositionModify(m_position.Ticket(),
                           m_position.StopLoss(),
                           m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                           );
...
 
Vladimir Karputov :

시험:

감사하지만 오류가 남아 있습니다.

아카

현재 가격에 수용할 수 없을 정도로 가까울 수 있습니다. 그것을 확인하는 방법?

 
Sile Si :

감사하지만 오류가 남아 있습니다.

현재 가격에 수용할 수 없을 정도로 가까울 수 있습니다. 그것을 확인하는 방법?

나는 거래소에 접근할 수 없기 때문에 직접 하거나 외환 도구로 작업하십시오. 죄송합니다.


추가됨: 한 번 더 확인 입력 - 매도 포지션의 경우 새로운 TakeProfit(계산된 값)은 포지션의 현재 TakeProfit보다 높거나 같아야 합니다.

 
Vladimir Karputov :

나는 거래소에 접근할 수 없기 때문에 직접 하거나 외환 도구로 작업하십시오. 죄송합니다.


추가됨: 한 번 더 확인 입력 - 매도 포지션의 경우 새로운 TakeProfit(계산된 값)은 포지션의 현재 TakeProfit보다 높거나 같아야 합니다.

아마 시가 ( POSITON_PRICE_OPEN ) ?

 
Sergey Savinkin :

아마 시가 ( POSITON_PRICE_OPEN ) ?

이 옵션이 더 높았습니다. 위의 게시물을 참조하십시오. 당신은 대화 중에 대답했습니다.

 
Vladimir Karputov : ...한 번 더 확인 입력 - 매도 포지션의 경우 새로운 TakeProfit(계산된 가치)은 포지션의 현재 TakeProfit보다 높거나 같아야 합니다.

적합하지 않음, ATR에 의해 수정됨 이 오류에 대해 어떤 다른 검사를 수행할 수 있습니까? 모두 가능합니다. MT4에는 STOPLEVEL이 있지만 여기에는 무엇이 있습니까?

사유: