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

 

안녕하세요!!! 모두 새해 복 많이 받으세요!!!

다음은 그리드의 평균 주문 가격 표시를 보여주는 스크린샷입니다.

다음은 평균 가격과 비문의 수평선을 만드는 코드입니다.

 //+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice( int ot=- 1 )
  {
   double order_lots = 0 , order_price = 0 , avg_price = 0 ;
     {
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble (order_price / order_lots, Digits );

   if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString (ot))!= 0 )
       ObjectCreate ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJ_HLINE , 0 , 0 , avg_price);
   else
       ObjectSetDouble ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJPROP_PRICE ,avg_price);
   if (ot== 0 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrLime );
   ObjectCreate ( "signal4" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal4" , OBJPROP_XDISTANCE , 100 );
   ObjectSet( "signal4" , OBJPROP_YDISTANCE , 260 );
   ObjectSetText( "signal4" , "- Средняя цена сетки ордеров на покупку" , 14 , "Times New Roman" , clrLime );
   if (ot== 1 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrRed );
   ObjectCreate ( "signal3" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal3" , OBJPROP_XDISTANCE , 100 );
   ObjectSet( "signal3" , OBJPROP_YDISTANCE , 280 );
   ObjectSetText( "signal3" , "- Средняя цена сетки ордеров на продажу" , 14 , "Times New Roman" , clrRed );
   return (avg_price);
  }

수평선을 제거하는 코드를 입력하십시오

 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену
   if (CountTrade() == 0 )
     {
       if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString ( 0 ))== 0 &&CountTrade( 0 )< 1 ) //для бай
        {
         ObjectDelete ( 0 , "AveragePriceLine" + IntegerToString ( 0 ));
        }
       if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString ( 1 ))== 0 &&CountTrade( 1 )< 1 ) //для селл
        {
         ObjectDelete ( 0 , "AveragePriceLine" + IntegerToString ( 1 ));
        }
     }

비문이 줄 위에 나타나고 줄이 제거될 때 제거되도록 코드를 변경하도록 도와주세요.

도와 주셔서 감사합니다.

 
EVGENII SHELIPOV # :

코드를 변경하도록 도와주세요.

당신이 도울 수 있다면 정확히 무엇이 당신에게 효과가 없습니까?

 
Andrey Sokolov # :

당신이 도울 수 있다면 정확히 무엇이 당신에게 효과가 없습니까?

무례하지 말자. 내가 할 줄 알았다면 여기에 지원하지 않았을 것이다.

질문은 매우 간단합니다. 수평선을 기준으로 비문의 좌표를 알아야합니다. 계산하는 방법을 모르겠습니다.


 
EVGENII SHELIPOV # :

무례하지 말자. 내가 할 줄 알았다면 여기에 지원하지 않았을 것이다.

질문은 매우 간단합니다. 수평선을 기준으로 비문의 좌표를 알아야합니다. 계산하는 방법을 모르겠습니다.


" 무례하지 말자 "라는 의미로 ? 내가 "도와줘"가 아니라 "도와줘"라고 썼나요?

 
EVGENII SHELIPOV # :

안녕하세요!!! 모두 새해 복 많이 받으세요!!!

수평선을 제거하는 코드를 입력하십시오

도와 주셔서 감사합니다.

충분해

 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену
   if (CountTrade() == 0 )
     {
       ObjectsDeleteAll ( 0 , "AveragePriceLine" );
     }
EVGENII 셸리포프 # :

질문은 매우 간단합니다. 수평선을 기준으로 비문의 좌표를 알아야합니다. 계산하는 방법을 모르겠습니다.

여기 당신을 도울 것입니다

ChartTimePriceToXY

ChartXYToTime가격

 
Tretyakov Rostyslav # :

충분해

여기 당신을 도울 것입니다

ChartTimePriceToXY

ChartXYToTime가격

힌트를 준 Rostislav에게 감사하지만 내가 뭔가 잘못하고 있습니다.

지금까지는 0Y 축을 따라 변경만 하면 되지만 비문은 수평선과 결합하기를 원하지 않습니다.

코드와 스크린샷을 첨부하고 있습니다. 오류가 어디에 있는지 알려주십시오.

 //+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice( int ot=- 1 )
  {
   double order_lots = 0 , order_price = 0 , avg_price = 0 ;
   int x = 0 , y = 0 ;
     {
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble (order_price / order_lots, Digits );

   if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString (ot))!= 0 )
       ObjectCreate ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJ_HLINE , 0 , 0 , avg_price);
   else
       ObjectSetDouble ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJPROP_PRICE ,avg_price);
   if (ot== 0 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrLime );
   ObjectCreate ( "signal4" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal4" , OBJPROP_XDISTANCE , 500 );
   ChartTimePriceToXY ( 0 , 0 , 0 ,avg_price, x, y);
   ObjectSet( "signal4" , OBJPROP_YDISTANCE , y + 10 );
   ObjectSetText( "signal4" , "- Средняя цена сетки ордеров на покупку" , 14 , "Times New Roman" , clrLime );
   if (ot== 1 )
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrRed );
   ObjectCreate ( "signal3" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal3" , OBJPROP_XDISTANCE , 500 );
   ChartTimePriceToXY ( 0 , 0 , 0 , avg_price, x, y) ;
   ObjectSet( "signal3" , OBJPROP_YDISTANCE , y + 10 );
   ObjectSetText( "signal3" , "- Средняя цена сетки ордеров на продажу" , 14 , "Times New Roman" , clrRed );
   return (avg_price);
  }


 
EVGENII SHELIPOV # :

힌트를 준 Rostislav에게 감사하지만 내가 뭔가 잘못하고 있습니다.

지금까지는 0Y 축을 따라 변경만 하면 되지만 비문은 수평선과 결합하기를 원하지 않습니다.

코드와 스크린샷을 첨부하고 있습니다. 오류가 어디에 있는지 알려주십시오.

괄호를 잊지 마세요

 //+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice( int ot=- 1 )
  {
   double order_lots = 0 , order_price = 0 , avg_price = 0 ;
   int x = 0 , y = 0 ;
     {
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType()==ot||ot< 0 )
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble (order_price / order_lots, Digits );

   if ( ObjectFind ( 0 , "AveragePriceLine" + IntegerToString (ot))!= 0 )
       ObjectCreate ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJ_HLINE , 0 , 0 , avg_price);
   else
       ObjectSetDouble ( 0 , "AveragePriceLine" + IntegerToString (ot), OBJPROP_PRICE ,avg_price);
   if (ot== 0 )
     {
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrLime );
       ObjectCreate ( "signal4" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
      ObjectSet( "signal4" , OBJPROP_XDISTANCE , 500 );
       ChartTimePriceToXY ( 0 , 0 , 0 ,avg_price, x, y);
      ObjectSet( "signal4" , OBJPROP_YDISTANCE , y + 10 );
      ObjectSetText( "signal4" , "- Средняя цена сетки ордеров на покупку" , 14 , "Times New Roman" , clrLime );
     }
   if (ot== 1 )
     {
      ObjectSet( "AveragePriceLine" + IntegerToString (ot), OBJPROP_COLOR , clrRed );
       ObjectCreate ( "signal3" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
      ObjectSet( "signal3" , OBJPROP_XDISTANCE , 500 );
       ChartTimePriceToXY ( 0 , 0 , 0 , avg_price, x, y);
      ObjectSet( "signal3" , OBJPROP_YDISTANCE , y + 10 );
      ObjectSetText( "signal3" , "- Средняя цена сетки ордеров на продажу" , 14 , "Times New Roman" , clrRed );
     }
   return (avg_price);
  }
 
Tretyakov Rostyslav # :

괄호를 잊지 마세요

다른 건 없어

 
EVGENII SHELIPOV # :

다른 건 없어

로그에 오류가 있어야 합니다.
 

어레이에 복사

 MqlRates CopySymb[];  
if ( CopyRates (mSymbol, PERIOD_CURRENT , 0 , 6 ,CopySymb)< 0 ) return ;
Print ( ArrayMaximum ( ??? ) );

배열에서 최대값을 얻는 방법은 무엇입니까?