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

 
Northwest :

1. 모든 것을 제자리에 놓고 컴퓨터를 괴롭히지 마십시오 .

죄송하지만 반품할 수 없습니다. 표시기는 왼쪽에서 오른쪽으로 계산해야 합니다.

그리고 나는 그를 고문하지 않고 의도한 목적을 위해 그를 사용합니다.

2. iBandsOnArray, iStdDevOnArray는 어레이에 저장된 데이터에 대해 계산됩니다.

음, 예, bbMacd[] 배열의 데이터에 대해 계산된 다음 무엇입니까?

3. 어레이는 1주기로 채워집니다.

하나 또는 첫 번째?

하나의 배열을 채우려면 다음과 같은 개인 주기가 필요하다고 말하고 싶습니다.

배열이 채워져 더 이상 작업을 수행할 수 없습니까?


지표가 느려지는 이유와 발생 위치를 계산하는 방법을 찾는 것이 중요합니다.

더 많은 질문과 답변이 없습니다.

불행히도 당신은 그렇게 말하지 않았습니다.

어레이에 구축된 것이 있다면 이미 준비된 어레이에 구축되어야 합니다. 그리고 이것은 배열을 준비하는 1주기이고 이 배열을 기반으로 지표를 구축하는 두 번째 주기입니다. 이것은 일반적인 경우입니다. 비공개 항목도 있지만 비공개적으로 생각해야 합니다. 예를 들어 계산된 막대 하나만으로 값을 반환하는 함수를 만들 수 있습니다.

 //+------------------------------------------------------------------+
//| BandsOnArray                                                     |
//+------------------------------------------------------------------+
double BandsOnArray( const int rates_total, const int index, const int period, const double deviation_bb, const double &array[], const int line, const bool as_series= true )
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period- 1 : index>=period- 1 );
   if (period< 1 || !check_index)
       return 0 ;
   //--- calculate StdDev
   double dev=StdDevOnArray(rates_total,index,period,array);
   //--- base line
   double mid= 0 ;              
   for ( int i= 0 ; i<period; i++)
       mid+=array[index+i];    
   mid/=period;               
   //--- upper line
   double top=mid+dev*deviation_bb;
   //--- lower line
   double btm=mid-dev*deviation_bb;
   return (line== UPPER_BAND ? top : line== LOWER_BAND ? btm : mid);
  }  
//+------------------------------------------------------------------+
//| StdDevOnArray                                                    |
//+------------------------------------------------------------------+
double StdDevOnArray( const int rates_total, const int index, const int period, const double &array[], const bool as_series= true )
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period- 1 : index>=period- 1 );
   if (period< 1 || !check_index)
       return 0 ;
//--- calculate value
   double avg= 0 ;              
   for ( int i= 0 ; i<period; i++)
       avg+=array[index+i];    
   avg/=period;               
   double sd= 0 ;
   for ( int i= 0 ; i<period; i++)
      sd+=(avg-array[index+i])*(avg-array[index+i]);
   return ( sqrt (sd/period));
  }  
//+------------------------------------------------------------------+

그러나 StdDevOnArray 및 BandsOnArray는 평활 기간 값과 동일한 양의 채워진 데이터가 필요한 Simple-smoothing 을 사용하기 때문에 이미 준비된 데이터 배열이 입력으로 필요합니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

Artyom Trishkin , 2018.11.18 20:21

PlotIndexSetInteger(0,PLOT_ARROW,140);

그러나 주 수와 동일한 수의 버퍼를 생성해야 합니다. 그리고 각 버퍼의 화살표 코드를 140에서 149로 설정하십시오. 1,2,3,4,5,6,7,8,9,10 - 10주이면 1년에 충분합니까? 70일만입니다. 아니면 어떻게 하시겠습니까?


대소문자를 통해 SetIndexArrow를 변경할 수 있습니까?

아니면 적어도 히스토그램에 숫자를 표시합니까?


거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

Artyom Trishkin , 2018.11.18 20:02

버퍼는 시간 값으로 채워집니다. 시간이 0이면 히스토그램이 그려지지 않습니다. 따라서 시간이 0과 같은지 확인해야 합니다(0 시간을 찾도록 설정한 설정에서). 0과 같으면 시간(영) 값이 아닌 버퍼에 입력하지만 0.1 - 히스토그램 열을 표시합니다. 이 경우 표시기의 자릿수가 0으로 설정되어 있으므로 데이터 창에 값이 0.1이 아닌 0으로 표시됩니다.


이제 명확합니다. 감사합니다.

 
psyman :

대소문자를 통해 SetIndexArrow를 변경할 수 있습니까?

아니면 적어도 히스토그램에 숫자를 표시합니까?



이제 명확합니다. 감사합니다.

전체 버퍼에서 즉시 작동합니다 .

또한 찾기 표시줄에 주 번호 아이콘을 넣어야 하며, 이는 1년의 주 수로 표시되어야 합니다. 숫자가 있는 화살표는 Wingdings에서 명확하게 누락되었습니다.

텍스트 개체의 도움으로 나갈 수 있고 주 번호로 막대를 표시할 수 있지만 버퍼 아이콘을 32(빈 기호)로 설정합니다. 막대의 값은 표시되지만 표시되지는 않습니다. 그런 다음 값은 해당 연도의 주의 숫자가 될 수 있으며 개체에서 원하는 모든 것을 지정하고 개체를 찾기 표시줄에 표시할 수 있습니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

Artyom Trishkin , 2018.11.19 10:50

전체 버퍼에서 즉시 작동합니다 .

또한 발견 표시줄에 주 번호 아이콘을 넣어야 하며, 이는 1년의 주 수로 표시되어야 합니다. 숫자가 있는 화살표는 Wingdings에서 명확하게 누락되었습니다.

텍스트 개체의 도움으로 나갈 수 있고 주 번호로 막대를 표시할 수 있지만 버퍼 아이콘을 32(빈 기호)로 설정합니다. 막대의 값은 표시되지만 표시되지는 않습니다. 그런 다음 값은 해당 연도의 주의 숫자가 될 수 있으며 개체에서 원하는 모든 것을 지정하고 개체를 찾기 표시줄에 표시할 수 있습니다.


나는 요일에 대해 썼습니다 - 월, 화, 수 .., 숫자가 아닙니다. 차트에 5개의 다른 표시만 있으면 됩니다.

 
psyman :

나는 요일에 대해 썼습니다 - 월, 화, 수 .., 숫자가 아닙니다. 차트에 5개의 다른 표시만 있으면 됩니다.

그러면 5개의 버퍼가 필요하고 각각에 다른 화살표 번호(140에서 144까지)를 할당해야 합니다.

 
Artyom Trishkin :

어레이에 구축된 것이 있다면 이미 준비된 어레이에 구축되어야 합니다. 그리고 이것은 배열을 준비하는 1주기이고 이 배열을 기반으로 지표를 구축하는 두 번째 주기입니다. 이것은 일반적인 경우입니다. 비공개 항목도 있지만 비공개적으로 생각해야 합니다. 예를 들어 계산된 막대 하나만으로 값을 반환하는 함수를 만들 수 있습니다.

그러나 StdDevOnArray 및 BandsOnArray는 평활 기간 값과 동일한 양의 채워진 데이터가 필요한 Simple-smoothing 을 사용하기 때문에 이미 준비된 데이터 배열이 입력으로 필요합니다.

상황을 명확히 해주셔서 감사합니다.
 

인사말

버튼으로 팝업 창을 만드는 방법은 무엇입니까? 거래의 수동 확인/취소를 위해 필요

 
Andrey Sokolov :

인사말

버튼으로 팝업 창을 만드는 방법은 무엇입니까? 거래의 수동 확인/취소를 위해 필요

메세지 박스()
 
Artyom Trishkin :
메세지 박스()

감사해요

 

안녕하세요.

테스터에서와 같이 최대 감소율을 얻는 방법은 무엇입니까?

코드는 다음과 같습니다.

 double   MaxPeak,DD, MaxDD, DD2, MaxDD2;
--------------------------------------
--------------------------------------
это вывод:

 SM( "Maximal drawdown        : " + DoubleToString (MaxDrawdown_Money(), 2 )+ " (" + DoubleToString (MaxDrawdown_Protsent(), 2 ) + " %)" );

-------------------------------------
-------------------------------------

//--------------------Рассчет % относительной просадки----------
double MaxDrawdown_Protsent()
{
if ( AccountEquity () > MaxPeak)
{
MaxPeak = AccountEquity ();
}
if ( AccountEquity () < MaxPeak)
{
DD2 = NormalizeDouble ((MaxPeak - AccountEquity ())/MaxPeak* 100 , 2 );
}
if (MaxDD2< DD2)
{
MaxDD2 = DD2;
}
return (MaxDD2);
}
//---------------------Рассчет суммы максимальной просадки--------
double MaxDrawdown_Money()
{
if ( AccountEquity () > MaxPeak)
{
MaxPeak = AccountEquity ();
}
if ( AccountEquity () < MaxPeak)
{
DD = NormalizeDouble (MaxPeak - AccountEquity (), 2 );
}
if (MaxDD< DD)
{
MaxDD = DD;
}
return (MaxDD);
}

최대 드로다운의 합은 테스터에서 1:1로 표시되며 상대적인 드로우다운의 백분율도 테스터에서와 같이 표시됩니다.

테스터 에서와 같이 최대 드로다운의 %를 얻는 방법은 무엇입니까?

사유: