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

 

Aleksey Stepanenko 감사합니다.


Valeriy Yastremskiy 필요하지 않은 기능을 모두 제거했기 때문에 코드가 불완전하기 때문일 수 있습니다.


 //+----------------------------------------------------------------------------+
//|                                                          AverageRange.mq4  |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  14.09.2005  Скрипт для расчёта:                                           |
//|              средней волатильности инструмента High-Low                    |
//|              среднего размера тела свечи       ABS(Open-Close)             |
//|              среднего размера тени свечи                                   |
//|                                                                            |
//|  17.11.2007  Возможность использования заданного количества баров          |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link        "http://www.kimiv.ru"
#property show_inputs

extern datetime BeginDateCalc = D'2013.01.01' ;
extern datetime EndDateCalc   = D'2013.12.31' ;
extern int       NumberOfBars  = 100 ;         


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start() {
   int     i;           
   int     b  = 0 ;     
   int     bb = 0 ;      
   int     h  = 0 ;      
   int     l  = 0 ;     
   int     s  = 0 ;      
   int     t  = 0 ;      
   string st = "" ;        

   for (i = Bars ; i > 0 ; i--) {
    
     if ((Time [i] >= BeginDateCalc && Time [i] <= EndDateCalc && NumberOfBars <= 0 )
    || (NumberOfBars > 0 && NumberOfBars >= i)) {
      
       if (bb == 0 ) bb = i;
      s += (High [i] - Low [i]) / Point ;
      t += MathAbs (Open [i] - Close [i]) / Point ;
      
       if (Open [i] > Close [i]) {
        h += (High [i] - Open [i]) / Point ;
        l += (Close [i] - Low [i]) / Point ;
      } else {
        h += (High [i] - Close [i]) / Point ;
        l += (Open [i] - Low [i]) / Point ;
      }
      
      b++;
    }
  }

  st =       "Начало: " + TimeToStr (Time [bb], TIME_DATE | TIME_MINUTES ) + "\n" ;
  st = st + "Конец: " + TimeToStr (Time [bb - b + 1 ], TIME_DATE | TIME_MINUTES ) + "\n" ;
  st = st + "Использовано баров: " + b + "\n" ;
  st = st + "Средняя волатильность: " + s / b + " п.\n" ;
  st = st + "Средний размер тела: " + t / b + " п.\n" ;
  st = st + "Средний размер верхней тени: " + h / b + " п.\n" ;
  st = st + "Средний размер нижней тени: " + l / b + " п." ;

   Comment (st);
}
//+----------------------------------------------------------------------------+
Aleksei Stepanenko
Aleksei Stepanenko
  • www.mql5.com
Профиль трейдера
 
Valeriy Yastremskiy # :

솔직히 김의 논리를 따라잡지 못했는데 왜 AND 조건을 통해서 막대시간이 지정된 값을 넘어서고 계산된 막대의 개수의 음수 값이 OR로 계산된 막대의 개수가 숫자보다 큰지 Barz 막대))) 동시에 그는 단순히 사용자 매개 변수를 수정합니다)

그리고 경고에도 사용자가 엉망으로 표시되지 않습니다)

거기에서 논리적으로 NumberOfBars가 설정되면(0보다 큼), 시간은 무시되고 마지막 막대만 계산됩니다.

그러나 사용자가 날짜를 혼동하거나 견적에 구멍이 있으면 아무 것도 표시되지 않지만 단순히 DivideByZero가 됩니다 :-)

 
안녕하세요!

누군가 mt5에서 mt4로 따옴표를 변환하는 방법을 알고 있습니까? 또는 MT5에서 MT4까지 더 나은 기록을 사용하는 몇 가지 방법.. TDS2 제외😊
 
Pavel Malyshko # :
안녕하세요!

누군가 mt5에서 mt4로 따옴표를 변환하는 방법을 알고 있습니까? 또는 MT5에서 MT4까지 더 나은 기록을 사용하는 몇 가지 방법.. TDS2 제외😊
수출 수입
 
MakarFX # :
수출 수입

그래서 mt5는 다른 인용 형식을 가지고 있습니다. mt4는 그것을 읽지 않습니다. 그것이 문제입니다. 😎

 
Pavel Malyshko # :

그래서 mt5는 다른 인용 형식을 가지고 있습니다. mt4는 그것을 읽지 않습니다. 그것이 문제입니다. 😎

CSV 및 MT4로 MT5 내보내기는 모든 것을 읽습니다.

 
Oksana_Timakova 포인트 ;

포인트로 나누는 이유는 무엇입니까?

...

강력 추천:

s+= MathRound ((High [i] - Low [i]) / Point );

그렇지 않으면 작동합니다)))

 void OnStart (){
   double first= 0.00001 ;
   double point= 0.00001 ;
   for ( uint i= 0 ;i< 10 ;++i){
       double value= NormalizeDouble (first+i*point, 5 );
       int res=( int )((value-first)/point);
       if (res!=i)
         PrintFormat (" Alert : (%. 5 f-%. 5 f)/%. 5 f!=%u, but ==%i",value,first,point,i,res);
   }
}
2021.09 . 12 11 : 06 : 26.041 Script test EURGBP,H1: removed
2021.09 . 12 11 : 06 : 26.038 test EURGBP,H1: uninit reason 0
2021.09 . 12 11 : 06 : 26.038 test EURGBP,H1: Alert : ( 0.00007 - 0.00001 )/ 0.00001 != 6 , but == 5
2021.09 . 12 11 : 06 : 26.038 test EURGBP,H1: Alert : ( 0.00003 - 0.00001 )/ 0.00001 != 2 , but == 1
2021.09 . 12 11 : 06 : 26.038 test EURGBP,H1: initialized
2021.09 . 12 11 : 06 : 25.998 Script test EURGBP,H1: loaded successfully
 

표시기 창에서 가격 차트를 완전히 숨기는 방법은 무엇입니까?

ChartSetInteger(0, CHART_HEIGHT_IN_PIXELS ,0,0)는 작동하지 않습니다. 먼저 표시기 크기를 설정한 다음 여기에 가격 창 높이를 추가해야 합니다.

 int chart_height=( int ) ChartGetInteger ( 0 , CHART_HEIGHT_IN_PIXELS , 0 );
IndicatorSetInteger ( INDICATOR_HEIGHT , 200 +chart_height);


다만, 하단의 주문창을 열면 표시창의 크기가 화면 크기보다 커져서 다시 타워에 가격이 표시됩니다.

주문창은 시시각각 변하는 것 외에는 어떻게 측정해야 하는지 모르겠습니다.

무엇을 할까요?

 

도와주세요!

이 코드를 mql5로 번역하는 데 도움을 주세요...

핸들로 작업하는 방법을 명확하게 이해하고 싶습니다.

 //+------------------------------------------------------------------+
//|                                                Stochastic.v1.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021"
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers    2
#property indicator_plots      2
#property indicator_minimum - 51
#property indicator_maximum    51
#property indicator_level1    0
#property indicator_levelstyle 0
#property indicator_levelcolor clrDimGray
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrDimGray
#property indicator_style1    STYLE_SOLID
#property indicator_width1    0
//--- plot Label2
#property indicator_label2    "Label2"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrRed
#property indicator_style2    STYLE_SOLID
#property indicator_width2    0
//--- input parameters
input int              WeekCount   = 1 ;     // Ограничение истории в неделях(0-вся история)
input int              StochPeriod = 14 ;
input ENUM_TIMEFRAMES TimeFrame   = PERIOD_CURRENT ;
//--- indicator buffers
double    Label1Buffer[];
double    Label2Buffer[];
int       index=- 1 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   IndicatorDigits( 2 );
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Label1Buffer);
   SetIndexBuffer ( 1 ,Label2Buffer);
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   ArrayInitialize (Label1Buffer, 0 );
   ArrayInitialize (Label2Buffer, 0 );
   int limit,i;
   int barPlus= iBarShift ( _Symbol , _Period , iTime ( _Symbol , PERIOD_W1 ,WeekCount));
   limit=rates_total-prev_calculated- 1 ;
   if (WeekCount!= 0 )limit=barPlus- 2 ;
   if (limit< 1 ) return ( 0 );
   for (i=limit;i>= 0 ;i--)
     {
      index= iBarShift ( _Symbol ,TimeFrame,time[i], false );
      Label1Buffer[i]= iStochastic ( _Symbol ,TimeFrame,StochPeriod, 3 , 3 , MODE_SMA , 1 ,MODE_MAIN,index)- 50 ; 
     }
   for (i=limit;i>= 0 ;i--)
     {
      Label2Buffer[i]=iMAOnArray(Label1Buffer, 0 ,StochPeriod* 3 , 0 , MODE_SMA ,i);
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

도움을 주시면 감사하겠습니다.

 
MakarFX # :

도와주세요!

이 코드를 mql5로 번역하는 데 도움을 주세요...

핸들로 작업하는 방법을 명확하게 이해하고 싶습니다.

도움을 주시면 감사하겠습니다.

유일한 질문은 이 줄입니다

  Label1Buffer[i]= iStochastic ( _Symbol ,TimeFrame,StochPeriod, 3 , 3 , MODE_SMA , 1 ,MODE_MAIN,index)- 50 ; 
-50 추가 및 어레이