초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 206

 
a.lxrn :

예를 들어 코드의 초보자) 조건에서 이러한 질문을 도와주세요.

실제 조건, 즉 price>ma, 하나의 메시지가 표시되는(곱하지 않고) 메시지가 한 번 표시되도록 하는 방법, 제 말을 이해하셨으리라 생각합니다.

카운터를 올바르게 등록하는 방법은 무엇입니까?

 if (Work== false ) // Критическая ошибка
     {
       if (AlertWork== false )   // Если Алерта еще не было
        {   Alert ( "Критическая ошибка. Эксперт не работает." ); AlertWork= true ; }
       return ;
     }                        

이와 비슷하지만 경고를 두 번 이상 표시해야 하므로 플래그를 재설정해야 합니다.

 

안녕하세요, 지표가 차트에 첨부될 때 추가 라인(버퍼)이 표시되지 않도록 사용자 지정 지표를 프로그래밍하는 방법을 알려주십시오.


 
Alexey Kazmin :

안녕하세요, 지표가 차트에 첨부될 때 추가 라인(버퍼)이 표시되지 않도록 사용자 지정 지표를 프로그래밍하는 방법을 알려주십시오.


이러한 속성을 사용

 #property indicator_buffers 5
#property indicator_plots    1
 
Vitaly Muzichenko :


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

초보자의 질문 MQL4 MT4 MetaTrader 4

비탈리 무지첸코 , 2020.06.14 16:29

MT5에서 작동합니다. 어떤 이유로 동일한 설정으로 MT4에서 침묵이 있습니다.

빌드 1260


이상한 것들. 어제와 오늘 발송이 안되고 그냥 벌고 편지를 보냈습니다. 동시에 나는 아무것도 바꾸거나 재건하지 않았습니다.

 
Igor Makanu :

이러한 속성을 사용

감사합니다. 시도해 보겠습니다.

 
그래픽 개체와 혼동되는 부분이 있습니다. CORNER_RIGHT_UPPER에서 픽셀 단위로 High[0]의 XY 좌표를 얻는 방법을 알 수 없습니까? int X와 int Y를 계산하는 함수는 무엇입니까?
 
Valeriy Yastremskiy :

이와 비슷하지만 경고를 두 번 이상 표시해야 하므로 플래그를 재설정해야 합니다.

   if (sizeBar && maxmin)
     {
      
                   while ( true )
                   {
                         int ticket = OrderSend ( Symbol (), OP_BUY, 0.01 , Ask, 5 , sl, tp);
                         if (ticket> 0 ) break ;                        
                   }      
             
     }

이해하지 못했다

여기에 위치를 여는 특정 조건이 있습니다. 가격이 손보다 높아야 하고 매수 주문이 체결되었다고 가정해 보겠습니다.

이 조건은 오랫동안 참이며 각 반복에서 이 코드를 사용하여 주문을 엽니다.

이 조건에 따라 하나의 주문이 열리도록 만드는 방법은 무엇입니까?

 
a.lxrn :

이해하지 못했다

여기에 위치를 여는 특정 조건이 있습니다. 가격이 손보다 높아야 하고 매수 주문이 체결되었다고 가정해 보겠습니다.

이 조건은 오랫동안 참이며 각 반복에서 이 코드를 사용하여 주문을 엽니다.

이 조건에 따라 하나의 주문이 열리도록 만드는 방법은 무엇입니까?

주문 개시 조건이 true이고 주문 개시 플래그가 false이면 주문을 열고 주문 개시 플래그를 true로 설정합니다.
 
a.lxrn :

이해하지 못했다

여기에 위치를 여는 특정 조건이 있습니다. 가격이 손보다 높아야 하고 매수 주문이 체결되었다고 가정해 보겠습니다.

이 조건은 오랫동안 참이며 각 반복에서 이 코드를 사용하여 주문을 엽니다.

이 조건에 따라 하나의 주문이 열리도록 만드는 방법은 무엇입니까?

주문 개시 조건이 true이고 주문 개시 플래그가 false이면 주문을 열고 주문 개시 플래그를 true로 설정합니다.
 

주문삭제

코드에서 오류를 찾는 데 도움을 주세요. 컴파일러도 테스터도 오류를 제공하지 않지만 제한은 제거되지 않습니다...

 void OnTick ()
            
       if (Low[ 1 ] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0 )

      {
      
      SL = NormalizeDouble (Ask - StopLoss* Point , 5 );
      TP = NormalizeDouble (Ask + TakeProfit* Point , 5 ); 
          
      ticket = OrderSend ( Symbol (), OP_BUY, Lots, price, 3 , SL, TP, "EU buy" , Magic, 0 , Red);
      
       if (ticket< 0 )
         Print ( "Не удалось открыть ордер" );
      }
            
      {
       if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0 )
      {
      
      SL = NormalizeDouble (price1 - StopLoss1* Point , 5 );
      TP = NormalizeDouble (price1 + TakeProfit1* Point , 5 ); 
     
      ticket1 = OrderSend ( Symbol (), OP_BUYLIMIT, Lots1, price1, 3 , SL, TP, "EU buy" , Magic1, 0 , Red);
      

            {
             if (BUY() == 0 && BUYLIMIT1() == 1 )
            {
             for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
             if ( OrderSelect (i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(), clrWhite );
               Print ( "OrderDelete error " , GetLastError ());
               }
               return ;}
      } } }
      
      {
       if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0 )
      {
      
      SL = NormalizeDouble (price2 - StopLoss2* Point , 5 );
      TP = NormalizeDouble (price2 + TakeProfit2* Point , 5 ); 

      ticket2 = OrderSend ( Symbol (), OP_BUYLIMIT, Lots2, price2, 3 , SL, TP, "GU buy" , Magic2, 0 , Red);
      

            {
             if (BUY1() == 0 && BUYLIMIT2() == 1 )
            {
             for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
             if ( OrderSelect (i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(), clrWhite );
               Print ( "OrderDelete error " , GetLastError ());
               }
               return ;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return (count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return (count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return (count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return (count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>=X; i--)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return (count);
}