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

 
가장 가까운 매수 정류장과 가장 가까운 매도 정류장의 가격을 인쇄하는 코드를 보여줄 수 있습니까?
 
ilyav :
가장 가까운 매수 정류장과 가장 가까운 매도 정류장의 가격을 인쇄하는 코드를 보여줄 수 있습니까?

가격만? 무엇을 위한 것입니까? 그리고 "가장 가까운"이라는 단어를 해독하십시오 - 누구에게, 무엇을 ...

 
Vladimir Karputov :

가격만? 무엇을 위한 것입니까? 그리고 "가장 가까운"이라는 단어를 해독하십시오 - 누구에게, 무엇을 ...

네, 그냥 가격입니다.

보다.

이제 현재 가격 에서 100핍 단위로 10번의 바이 스톱이 있습니다.

이제 현재 가격에서 100핍 증분으로 10개의 매도 스탑을 배치했습니다.

현재 가격을 기준으로 가장 가까운 매수 정류장과 가장 가까운 매도 정류장의 가격을 인쇄에 표시해야 합니다.

그게 내가 하려고 했던 일이지만 작동하지 않습니다.

가장 가까운 구매 정류장의 가격 인쇄가 나에게는 올바르게 표시되지만 가장 가까운 판매 정류장의 인쇄는 어떤 이유로 가장 가까운 구매 정류장의 가격을 표시합니다.

여기 이 함수에서 m_order.PriceOpen(); 어떤 이유로 매수 정지 가격은 항상 거짓말을 합니다. 내가 그녀에게 매수 정지를 요청한 후 매도 정지 가격을 알려달라고 요청했지만.

이것은 추가 논리를 위해 수행됩니다.

나는 다음 매수 정류장의 가격과 다음 매도 정류장의 가격을 2로 나눕니다.

받은 수치를 바탕으로 어드바이저는 계속 일할 것입니다.

완전한 기능 -

 //+------------------------------------------------------------------+
void TradeMode3()
  {
   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);

       int TotalGridSellOrders= 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_SELL_STOP )
               TotalGridSellOrders++;
       Print ( "Количество sell ордеров grid " ,TotalGridSellOrders);
       if (TotalGridSellOrders>= 1 )
        {
         grid_sell_price_memory=m_order.PriceOpen();
         Print ( "Цена ближайшего sell grid ордера: " ,grid_sell_price_memory);
        }
     }
  }
//+------------------------------------------------------------------+
 

이제 코드를 변경하려고 했습니다.

 //+------------------------------------------------------------------+
void TradeMode3()
  {
     {
       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 )
        {
         double grid_buy_price_memory=m_order.PriceOpen();
         Print ( "Цена ближайшего buy grid ордера: " ,grid_buy_price_memory);
        }
     }
     {
       int TotalGridSellOrders= 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_SELL_STOP )
               TotalGridSellOrders++;
       Print ( "Количество sell ордеров grid " ,TotalGridSellOrders);
       if (TotalGridSellOrders>= 1 )
        {
         double grid_sell_price_memory=m_order.PriceOpen();
         Print ( "Цена ближайшего sell grid ордера: " ,grid_sell_price_memory);
        }
     }
  }
//+------------------------------------------------------------------+

변경 없이. 매수 정지 가격만 표시

 
ilyav :

이제 코드를 변경하려고 했습니다.

변경 없이. 매수 정지 가격만 표시

먼저 작성해 보겠습니다. 먼저 Buy Stop 및 Sell Stop 검색 기능에 가격을 전달해야 합니다. 그렇지 않으면 검색 방법은 무엇입니까? ...

또한 "가장 가까운"-가격보다 높거나 낮습니까? 아니면 주어진 가격과 보류 중인 주문 간의 차이의 계수입니까?

 
Vladimir Karputov :

먼저 작성해 보겠습니다. 먼저 Buy Stop 및 Sell Stop 검색 기능에 가격을 전달해야 합니다. 그렇지 않으면 검색 방법은 무엇입니까? ...

그게 내가 찾고있는 방법

 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_SELL_STOP )
               TotalGridSellOrders++;

이 기능은 현재 판매 중지 수를 완벽하게 인쇄합니다.

다음으로 가장 가까운 판매 정류장을 선택했습니다. 가격과 인쇄를 알려주세요

 double grid_sell_price_memory=m_order.PriceOpen();    
Print ( "Цена ближайшего sell grid ордера: " , grid_sell_price_memory);

설명서에 적혀있는 내용

주문정보 클래스

가격 오픈

주문 가격을 가져옵니다.

두 배 가격Open () const

반환 값

주문 배치 가격.

메모

방법으로 액세스하려면 주문을 미리 선택해야 합니다.   고르다   (티켓으로) 또는   인덱스별 선택   (인덱스 기준).


뭐가 문제 야 ? 주문을 선택했습니다. 설치 가격 문의 드립니다.

아니면 내가 뭔가를 이해하지 못하고 있습니까? 내가 잘못하고 있다면 왜 구매 정지 가격이 표시됩니까?

 
Vladimir Karputov :

또한 "가장 가까운"-가격보다 높거나 낮습니까? 아니면 주어진 가격과 보류 중인 주문 간의 차이의 계수입니까?

내가 필요한 매수 스톱 및 매도 스톱의 가격은 다음과 같습니다.

 
ilyav :

내가 필요한 매수 스톱 및 매도 스톱의 가격은 다음과 같습니다.

이 기능은 "price" 위의 가장 가까운 Buy Stop과 "price" 아래의 가장 가까운 Sell Stop을 찾습니다.

 //+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders( const double price, double &price_nearest_buy_stop, double &price_nearest_sell_stop)
  {
   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()-price> 0.0 && m_order.PriceOpen()-price<diff_buy_stop)
                 {
                  diff_buy_stop           = m_order.PriceOpen()-price;
                  price_nearest_buy_stop  = m_order.PriceOpen();
                 }
              }
             else if (m_order. OrderType ()== ORDER_TYPE_SELL_STOP )
              {
               if (price-m_order.PriceOpen()> 0.0 && price-m_order.PriceOpen()<diff_sell_stop)
                 {
                  diff_sell_stop          = price-m_order.PriceOpen();
                  price_nearest_sell_stop = m_order.PriceOpen();
                 }
              }
           }
  }
 

이제 또 다른 문제

나는 다음과 같이 내 함수를 호출하곤 했다:

 //|  Выбран режим торговли 3 ? Тогда торгуем его    
       if (РежимТорговли== 3 )
        {
         TradeMode3();
        }

코드를 붙여넣고 내 기능을 다음으로 변경했습니다.

 //|  Выбран режим торговли 3 ? Тогда торгуем его    
       if (РежимТорговли== 3 )
        {
        CalculateAllPendingOrders();
        }
     

이제 컴파일 오류

'CalculateAllPendingOrders' - wrong parameters count
 
ilyav :

이제 또 다른 문제

나는 다음과 같이 내 기능을 호출하곤 했다:

코드를 붙여넣고 내 기능을 다음으로 변경했습니다.

이제 컴파일 오류

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

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

 void CalculateAllPendingOrders( const double price , double & price_nearest_buy_stop , double & price_nearest_sell_stop )
사유: