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

 
Vladimir Karputov :

PRICE 를 함수에 전달해야 하며, 그 근처에서 보류 중인 주문 이 검색됩니다.

이 가격 외에 두 개의 변수 를 전송해야 합니다.

내가 포기하는 것뿐입니다. 스크린 샷에서 화살표로 표시한 보증금의 가격을 인쇄할 기성 고문이 있습니까?

그리고 나는 이 기능이 PRICES를 전송하지 않고 작동하는 이유를 전혀 이해하지 못합니다.

 int TotalGridBuyOrders= 0 ;
         Print ( __FUNCTION__ );
         for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
             if (m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
               if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic && m_order. OrderType ()== ORDER_TYPE_BUY_STOP )
                  TotalGridBuyOrders++;
         Print ( "Количество buy ордеров grid " ,TotalGridBuyOrders);
         if (TotalGridBuyOrders>= 1 )
           {
            grid_buy_price_memory=m_order.PriceOpen();
             Print ( "Цена ближайшего buy grid ордера: " ,grid_buy_price_memory);

???

 
ilyav :

내가 포기하는 것뿐입니다. 스크린 샷에서 화살표로 표시한 보증금의 가격을 인쇄할 기성 고문이 있습니까?

나는 당신에게 준비 기능을 주었다. 당신은 그것에 전달해야합니다:

  • 현재 가격
  • 가장 가까운 Buy stop의 가격을 저장할 변수
  • 가장 가까운 Sell stop의 가격이 쓰여질 변수

명확하지 않은 것은 무엇입니까?

 
공습 경보 해제. 분명히 내 것이 아니다.
 
ilyav :

내가 포기하는 것뿐입니다. 스크린 샷에서 화살표로 표시한 보증금의 가격을 인쇄할 기성 고문이 있습니까?

그리고 나는 이 기능이 PRICES를 전송하지 않고 작동하는 이유를 전혀 이해하지 못합니다.

???

여는 대괄호와 닫는 대괄호 사이에 불일치가 있기 때문에 깨진 코드가 표시됩니다. 최소한 컴파일되지는 않습니다. 그리고 두 번째로 = 깨진 논리.

 
Vladimir Karputov :

여는 대괄호와 닫는 대괄호 사이에 불일치가 있기 때문에 깨진 코드가 표시됩니다. 최소한 컴파일되지는 않습니다. 그리고 두 번째로 = 깨진 논리.

코드 다시 작성

하지만 그는 나에게 가격에서 멀리 떨어진 보류 주문을 제공합니다

 void TradeMode3()
  {
   price_nearest_buy_stop  = 0 ;
   price_nearest_sell_stop = 0 ;
   double diff_buy_stop    = DBL_MAX ;
   double diff_sell_stop   = DBL_MAX ;

   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
             if (m_order. OrderType ()== ORDER_TYPE_BUY_STOP )
              {
               if (m_order.PriceOpen()-price1> 0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 
                 }
               Print ( "buy : " ,price_nearest_buy_stop);
                 return ;  
              }
              
               
             else if (m_order. OrderType ()== ORDER_TYPE_SELL_STOP )
              {
               if (price1-m_order.PriceOpen()> 0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print ( "sell : " ,price_nearest_sell_stop);
                 return ;
              }
           }
  }
  
 
 
ilyav :

코드 다시 작성

하지만 그는 나에게 가격에서 멀리 떨어진 보류 주문을 제공합니다

인쇄는 OrdersTotal 루프 뒤에 와야 합니다.

그리고 price1은 무엇입니까? 어떻게 받나요?
 

그리고 이 버전에서는 일반적으로 사용 가능한 모든 항목을 인쇄합니다.

 //+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0 ;
   price_nearest_sell_stop = 0 ;
   double diff_buy_stop    = DBL_MAX ;
   double diff_sell_stop   = DBL_MAX ;

   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
             if (m_order. OrderType ()== ORDER_TYPE_BUY_STOP )
              {
               if (m_order.PriceOpen()-price1> 0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
                 Print ( "buy : " ,price_nearest_buy_stop);
                 
              }
             else if (m_order. OrderType ()== ORDER_TYPE_SELL_STOP )
              {
               if (price1-m_order.PriceOpen()> 0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
                 Print ( "sell : " ,price_nearest_sell_stop);
                 
              }
           }
  }
 
Vladimir Karputov :

인쇄는 OrdersTotal 루프 뒤에 있어야 합니다.

그리고 price1은 무엇입니까? 어떻게 받나요?
 //|  Выбран режим торговли 3 ? Тогда торгуем его    

       if (РежимТорговли== 3 )

        {

        price1=m_symbol. Bid ();

        TradeMode3();

그리고 내가 쓴 고문의 머리글에

 double price1;
double price_nearest_buy_stop;
double price_nearest_sell_stop;

그리고 모든 것이 맞다면 여기가 최종 버전입니다.

 //+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void TradeMode3()
  {
   price_nearest_buy_stop  = 0 ;
   price_nearest_sell_stop = 0 ;
   double diff_buy_stop    = DBL_MAX ;
   double diff_sell_stop   = DBL_MAX ;

   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic)
           {
             if (m_order. OrderType ()== ORDER_TYPE_BUY_STOP )
              {
               if (m_order.PriceOpen()-price1> 0.0 && m_order.PriceOpen()-price1<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price1;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }

              }
             else if (m_order. OrderType ()== ORDER_TYPE_SELL_STOP )
              {
               if (price1-m_order.PriceOpen()> 0.0 && price1-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price1-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }

              }

           }
   Print ( "Цена ближнего SELL_STOP : " ,price_nearest_sell_stop);
   Print ( "Цена ближнего BUY_STOP : " ,price_nearest_buy_stop);
  }
//+------------------------------------------------------------------+

모든 것이 작동하는 것처럼. 오류가 있으면 알려주십시오. 매우 감사합니다.

 

이 문제를 해결하는 데 도움을 요청합니다.

현재 시간 프레임이 M1이라고 가정하고 상위 TF의 주어진 막대의 마지막 막대 N의 시간을 알아야 하지만 시간은 60분이 아니라 45분 또는 다른 시간일 수 있습니다. 주말이지만 현재 TF의 마지막 막대에 대한 TF 날짜를 알아야 합니다.

그것을 구현하는 방법?

 
ilyav :

그리고 내가 쓴 고문의 머리글에

그리고 모든 것이 맞다면 여기가 최종 버전입니다.

모든 것이 작동하는 것처럼. 오류가 있으면 알려주십시오. 매우 감사합니다.

라인 전

price1=m_symbol. Bid ();

따옴표를 업데이트해야 합니다.

 if (! RefreshRates ())
   return ;
사유: