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

 
Dzmitry Zaitsau :
안녕하세요! ChartGetInteger 앞에 괄호 안에 (int)가 있는 이유를 알려주세요.

int bar=(int)ChartGetInteger(0, CHART_VISIBLE_BARS );

 ChartGetInteger возвращает значение формата long или bool . Через (int) происходит перевод ChartGetInteger в значение int. 
если int bars, значит и значение должно быть int при присваивании.

1 . Непосредственно возвращает значение свойства.
long    ChartGetInteger ( 
   long   chart_id,           // идентификатор графика 
   int    prop_id,           // идентификатор свойства 
   int    sub_window= 0        // номер подокна, если требуется 
   );
 
2 . Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром
bool    ChartGetInteger ( 
   long     chart_id,         // идентификатор графика 
   int      prop_id,         // идентификатор свойства 
   int      sub_window,       // номер подокна 
   long &   long_var         // сюда примем значение свойства 
   );
 
 

안녕하세요. 조언 부탁드립니다.

더 작은 시간대의 각 막대에 오늘의 고가 및 저가 선을 그려야 하는 표시기가 있습니다.

차트에 걸면 그 날의 최대값과 최소값의 현재 값에 따라 단순히 선을 그립니다.

 #property indicator_chart_window 
#property indicator_buffers 2        
#property indicator_color1 Blue     
#property indicator_color2 Red      

//datetime time=D'2021.03.30 00:00';

string strTime = "0:00" ;
 
double Buf_0[],Buf_1[];                   
double Sum_H= 0 ;                    
double Sum_L= 0 ;
//--------------------------------------------------------------------
int init()                         
  {
   SetIndexBuffer ( 0 ,Buf_0);        
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 );
   SetIndexBuffer ( 1 ,Buf_1);        
   SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 1 );
   return ( 0 );                        
  }
//--------------------------------------------------------------------
int start()                        
  {
   int i, Counted_bars;                    
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); 
   datetime time= StringToTime (strTime);
   int bar_index= iBarShift ( Symbol (), PERIOD_CURRENT ,time, false ); 
   i= Bars -Counted_bars;          
   if (i>bar_index) i=bar_index- 1 ;  
   while (i>= 0 )                      
     {
      Sum_H= iHigh ( Symbol (), PERIOD_D1 , 0 );
      Sum_L= iLow ( Symbol (), PERIOD_D1 , 0 );
      Buf_0[i]=Sum_H;
      Buf_1[i]=Sum_L;
      i--;                          
     }
//--------------------------------------------------------------------
   return ( 0 );                        
  }
//--------------------------------------------------------------------
파일:
2.png  31 kb
 
ifitstrue :

안녕하세요. 조언 부탁드립니다.

더 작은 시간대의 각 막대에 오늘의 고가 및 저가 선을 그려야 하는 표시기가 있습니다.

차트에 걸면 그 날의 최대값과 최소값의 현재 값에 따라 단순히 선을 그립니다.

여기 답이 있습니다

 
고맙습니다.
 
안녕하세요 차트의 아이디를 알려주세요.

bool TrendCreate(const long chart_ID=0, // 차트 ID

예를 들어 eur/usd에 스크립트를 첨부할 때 차트의 ID는 무엇입니까? 어디 물방울, 무엇을 이해할 것입니다.




 
Dzmitry Zaitsau :
안녕하세요 차트의 아이디를 알려주세요.

bool TrendCreate(const long chart_ID=0, // 차트 ID

예를 들어 eur/usd에 스크립트를 첨부할 때 차트의 ID는 무엇입니까? 어디 물방울, 무엇을 이해할 것입니다.

그들은 일반적으로 도움을 발굴합니다.

Документация по MQL5: Операции с графиками
Документация по MQL5: Операции с графиками
  • www.mql5.com
Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

MT4 및 MT5 전문가용 코드를 알려주세요. 그는 무엇을 설정할까요?   손절하다   방금 닫은 양초의 고점/저점 위 2-3핍.

또는 이 주제에 대한 자습서를 어디에서 볼 수 있습니까? 미리 감사드립니다 :-)

파일:
izilo2.jpeg  270 kb
 
WindUP :

MT4 및 MT5 전문가용 코드를 알려주세요. 그는 무엇을 설정할까요?   손절하다   방금 닫은 양초의 고점/저점 위 2-3핍.

또는 이 주제에 대한 자습서를 어디에서 볼 수 있습니까? 미리 감사드립니다 :-)

MqlRates 유형의 배열을 선언합니다. OHLC 및 기타 닫힌 양초 매개변수 복사

 int    CopyRates (
   string            symbol_name,       // имя символа
   ENUM_TIMEFRAMES   timeframe,         // период
   int               start_pos,         // откуда начнем (начнём с 1)
   int               count,             // сколько копируем (надо всего 1)
   MqlRates          rates_array[]       // массив, куда будут скопированы данные
   );

그런 다음 2-3 포인트를 벗어나서 거기에서 멈추는 높음 또는 낮음 값을 가져옵니다.

당신은 또한 사용할 수 있습니다

 double    iHigh (
   string            symbol,           // символ
   int               timeframe,       // период
   int               shift             // сдвиг
   );

그리고

 double    iLow (
   string            symbol,           // символ
   int               timeframe,       // период
   int               shift             // сдвиг
   );
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
 
Alexey Viktorov :

MqlRates 유형의 배열을 선언합니다. OHLC 및 기타 닫힌 양초 매개변수 복사

그런 다음 2-3 포인트를 벗어나서 거기에서 멈추는 높음 또는 낮음 값을 가져옵니다.

당신은 또한 사용할 수 있습니다

그리고

감사합니다. 하지만 적어도 하나의 객관적인 예를 들어줄 수 있습니다. 말하자면 탑뷰. 그리고 나는 완전히 멍청하고 주제에서와 같이 2 일입니다 :-)
 
WindUP :
감사합니다. 하지만 적어도 하나의 객관적인 예를 들어줄 수 있습니다. 말하자면 탑뷰. 그리고 나는 완전히 멍청하고 주제에서와 같이 2 일입니다 :-)

여기에서도 배우려고 노력하고 있습니다. 무언가가 잘되고있는 것 같습니다.

 //+------------------------------------------------------------------+
//|                                                    CopyRates.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property script_show_inputs
//---
sinput int     Inpcopiedrates = 2 ;     // какой бар
sinput double Inphigh        = 100 ;   // отступить от high
//---
datetime m_right_time = 0 ,m_left_Ctime = 0 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries (rates, true );
   int copied= CopyRates ( Symbol (), 0 , 0 ,Inpcopiedrates,rates);
   if (copied> 0 )
     {
       Print ( "Скопировано баров: " +copied);
       string format= "open = %G, high = %G, low = %G, close = %G, volume = %d" ;
       string out;
       int size= fmin (copied, 10 );
       for ( int i= 0 ; i<size; i++)
        {
         out=i+ ":" + TimeToString (rates[i].time);
         out=out+ " " + StringFormat (format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print (out);
         ObjectDelete ( 0 , "CopyRateshigh" );
         m_left_Ctime=rates[i].time;
         m_right_time= TimeCurrent ();
         TrendCreate( 0 , "CopyRateshigh" , clrBlue , STYLE_DASHDOTDOT , 1 );
         TrendPointChange( 0 , "CopyRateshigh" , 0 ,m_left_Ctime,rates[i].high+Inphigh/ 100 );
         TrendPointChange( 0 , "CopyRateshigh" , 1 ,m_right_time,rates[i].high+Inphigh/ 100 );
        }
     }
   else
       Print ( "Не удалось получить исторические данные по символу " , Symbol ());
  }
//+------------------------------------------------------------------+
//| Create a trend line by the given coordinates                     |
//+------------------------------------------------------------------+
bool TrendCreate( const long             chart_ID= 0 ,         // chart's ID
                 const string           name= "TrendLine" ,   // line name
                 const color            clr= clrRed ,         // line color
                 const ENUM_LINE_STYLE style= STYLE_SOLID , // line style
                 const int              width= 1 ,           // line width
                 const int              sub_window= 0 ,       // subwindow index
                 datetime               time1= 0 ,           // first point time
                 double                 price1= 0 ,           // first point price
                 datetime               time2= 0 ,           // second point time
                 double                 price2= 0 ,           // second point price
                 const bool             back= false ,         // in the background
                 const bool             selection= false ,   // highlight to move
                 const bool             ray_left= false ,     // line's continuation to the left
                 const bool             ray_right= true ,     // line's continuation to the right
                 const bool             hidden= true ,       // hidden in the object list
                 const long             z_order= 0 )         // priority for mouse click
  {
//--- set anchor points' coordinates if they are not set
   ChangeTrendEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
   ResetLastError ();
//--- create a trend line by the given coordinates
   if (! ObjectCreate (chart_ID,name, OBJ_TREND ,sub_window,time1,price1,time2,price2))
     {
       Print ( __FUNCTION__ ,
             ": failed to create a trend line! Error code = " , GetLastError ());
       return ( false );
     }
//--- set line color
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- set line display style
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- set line width
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- display in the foreground (false) or background (true)
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the left
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_LEFT ,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the right
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_RIGHT ,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- set the text
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,name);
//--- successful execution
   return ( true );
  }
//+------------------------------------------------------------------+
//| Move trend line anchor point                                     |
//+------------------------------------------------------------------+
bool TrendPointChange( const long    chart_ID= 0 ,       // chart's ID
                       const string name= "TrendLine" , // line name
                       const int     point_index= 0 ,     // anchor point index
                       datetime      time= 0 ,           // anchor point time coordinate
                       double        price= 0 )           // anchor point price coordinate
  {
//--- if point position is not set, move it to the current bar having Bid price
   if (!time)
      time= TimeCurrent ();
   if (!price)
      price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- reset the error value
   ResetLastError ();
//--- move trend line's anchor point
   if (! ObjectMove (chart_ID,name,point_index,time,price))
     {
       Print ( __FUNCTION__ ,
             ": failed to move the anchor point! Error code = " , GetLastError ());
       return ( false );
     }
//--- successful execution
   return ( true );
  }
//+------------------------------------------------------------------+
//| Check the values of trend line's anchor points and set default   |
//| values for empty ones                                            |
//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints( datetime &time1, double &price1,
                             datetime &time2, double &price2)
  {
//--- if the first point's time is not set, it will be on the current bar
   if (!time1)
      time1= TimeCurrent ();
//--- if the first point's price is not set, it will have Bid value
   if (!price1)
      price1= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- if the second point's time is not set, it is located 9 bars left from the second one
   if (!time2)
     {
       //--- array for receiving the open time of the last 10 bars
       datetime temp[ 10 ];
       CopyTime ( Symbol (), Period (),time1, 10 ,temp);
       //--- set the second point 9 bars left from the first one
      time2=temp[ 0 ];
     }
//--- if the second point's price is not set, it is equal to the first point's one
   if (!price2)
      price2=price1;
  }
//+------------------------------------------------------------------+

카피율