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

 
RomanRott :

내 칠면조/고문에 일부 코드를 작성하는 것을 의미합니다. 이 코드는 켜졌을 때 다른 표시기를 즉시 연결합니다.
무엇을 어떻게 추가합니까?

이것이 테스터에게 필요한 것 같습니다. 이것은 프로그래밍 없이 반 킥으로 해결됩니다. 필요한 모든 지표가 포함된 템플릿을 만들고 "테스터"라는 이름이나 전문가 고문의 이름을 지정합니다. 그런 다음 테스터에서 EA가 시작되면 이미 설치된 표시기가 있는 차트가 열립니다 .

 
RomanRott :

내 칠면조/고문에 일부 코드를 작성하는 것을 의미합니다. 이 코드는 켜졌을 때 다른 표시기를 즉시 연결합니다.
무엇을 어떻게 추가합니까?

많은 옵션이 있습니다. 예 1) ChartApplyTemplate - 지정된 템플릿을 차트에 적용합니다(지표는 템플릿에 지정됨). 2) 표시등에 켜질 표시등의 코드를 추가합니다. 3) Expert Advisor에서 지표를 그래픽 개체로 표시합니다. 4) ...
 

안녕하세요! Vinini_HMA 표시기를 Expert Advisor에 통합하는 것이 필요합니다. 리소스와 iCustom을 통해 연결하고 데이터를 얻을 수 있었지만 테스트가 매우 느려졌습니다. EA 자체에서 표시기 값을 계산하는 방법을 알려주십시오. 마지막 3개의 양초에 대해 하나의 매개변수만 필요합니다.

표시기 코드는 다음과 같습니다.

 #property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period= 15 ; 
extern int method= 3 ; // MODE_SMA 
extern int price= 0 ; // PRICE_CLOSE 
extern int sdvig= 0 ;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers ( 4 ); 
   SetIndexBuffer ( 0 , ExtMapBuffer); 
   SetIndexBuffer ( 1 , Uptrend); 
   SetIndexBuffer ( 2 , Dntrend); 
   SetIndexBuffer ( 3 , vect); 
   
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexStyle ( 2 , DRAW_LINE );

   SetIndexDrawBegin ( 0 , 1 *period);
   SetIndexDrawBegin ( 1 , 2 *period);
   SetIndexDrawBegin ( 2 , 3 *period);

   IndicatorShortName ( "Signal Line(" +period+ ")" ); 
   SetIndexLabel ( 1 , "UP" );
   SetIndexLabel ( 2 , "DN" );
   return ( 0 ); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return ( 0 ); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA( int x, int p) { return ( iMA ( NULL , 0 , p, 0 , method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted (); 

   if (counted_bars < 0 ) return (- 1 ); 
   if (counted_bars > 0 ) counted_bars--;
   
   int p = MathSqrt (period); 

   int i, limit0,limit1,limit2;
   
   limit2= Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars== 0 ){
      limit1-=(period);
      limit2-=( 2 *period);
   }

   for (i = limit0; i >= 0 ; i--)    vect[i]          = 2 *WMA(i, period/ 2 ) - WMA(i, period); 
   for (i = limit1; i >= 0 ; i--)    ExtMapBuffer[i]  = iMAOnArray (vect, 0 , p, 0 , method, i); 
   for (i = limit2; i >= 0 ; i--) { 
      Uptrend[i] = EMPTY_VALUE ; if (ExtMapBuffer[i]> ExtMapBuffer[i+ 1 ]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE ; if (ExtMapBuffer[i]< ExtMapBuffer[i+ 1 ]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return ( 0 ); 
} 

ExtMapBuffer[i] 버퍼에 있는 마지막 3개의 값을 계산해야 합니다. 나는 초보자입니다. 엄격하게 판단하지 마십시오. 이러한 코드 조각을 어드바이저에 삽입하려고 시도했지만 값이 잘못 계산되었습니다.

 extern int period1= 14 ;
extern int method1= 3 ;
extern int price1= 0 ;
extern int sdvig1= 0 ;

-----------------------------------------------------
.
int p = MathSqrt (period1);      
        
         int z = 3 ;
         double vect[];
         ArrayResize (vect,z);
        
for ( int i = 2 ; i >= 0 ; i--) vect[i] = 2 *WMA(i, period1/ 2 ) - WMA(i, period1);
                
         int y = 3 ;;
         double HMA[];
         ArrayResize (HMA,y);
        
for (i = 2 ; i >= 0 ; i--) HMA[i]  = iMAOnArray (vect, 0 , p, 0 , method, i);

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

double WMA( int x, int p) { return ( iMA ( NULL , 0 , p, 0 , method1, price1, x+sdvig1)); }

매우 필요합니다! 고맙습니다! 미리 감사드립니다! 그리고 긴 글 죄송합니다.

파일:
123.png  22 kb
 

결과적으로 vect[0], vect[1], vect[2] 3개의 값을 얻습니다. 하지만 HMA 값이 필요합니다. HMA[0]이 계산되었지만 정확하지 않습니다. HMA[1] 및 HMA[2]는 0입니다.

 
ilfat85 :

결과적으로 vect[0], vect[1], vect[2] 3개의 값을 얻습니다. 하지만 HMA 값이 필요합니다. HMA[0]이 계산되었지만 정확하지 않습니다. HMA[1] 및 HMA[2]는 0입니다.

이 페이지는 이미 논의가 된 것 같습니다... 작가님과 연락을 해보셨나요?
 
ilfat85 :

안녕하세요! 알려주십시오. Vinini_HMA 표시기를 어드바이저에 통합하는 것이 필요합니다. 리소스와 iCustom을 통해 연결하고 데이터를 얻을 수 있었지만 테스트가 매우 느려졌습니다. EA 자체에서 표시기 값을 계산하는 방법을 알려주십시오. 마지막 3개의 양초에 대해 하나의 매개변수만 필요합니다.

다음은 표시기 코드입니다.

ExtMapBuffer[i] 버퍼에 있는 마지막 3개의 값을 계산해야 합니다. 나는 초보자입니다. 엄격하게 판단하지 마십시오. 이러한 코드 조각을 어드바이저에 삽입하려고 시도했지만 값이 잘못 계산되었습니다.

매우 필요합니다! 고맙습니다! 미리 감사드립니다! 그리고 긴 글 죄송합니다.

테스터 의 경우 리소스에 연결하지 마십시오. 속도가 느려집니다(이 특정 지표에는 적용되지 않지만 일반적으로 모든 사람에게 - 테스터에서 리소스가 느려짐).

리소스가 아닌 폴더의 파일 위치에서 iCustom()을 통해 간단히 연결

 
STARIJ :
이 페이지는 이미 논의가 된 것 같습니다... 작가님과 연락을 해보셨나요?

Vitya는 여기에 거의 나타나지 않습니다.

 
STARIJ :
이 페이지는 이미 논의가 된 것 같습니다... 작가님과 연락을 해보셨나요?

지표에서 값을 얻는 약간 다른 질문이 있지만 EA에서 값을 직접 계산하기를 원했습니다. 공식은 간단해 보이지만 어딘가에서 실수를 합니다. 아니요, 작가에게 연락하지 않았습니다. 조언 감사합니다. 그에게 편지를 쓰도록 하겠습니다.

 
Artyom Trishkin :

테스터 의 경우 리소스에 연결하지 마십시오. 속도가 느려집니다(이 특정 지표에는 적용되지 않지만 일반적으로 모든 사람에게 - 테스터에서 리소스가 느려짐).

리소스가 아닌 폴더의 파일 위치에서 iCustom()을 통해 간단히 연결


고맙습니다! 그건 몰랐네요 한번 해보겠습니다.

 

안녕하세요. 양초의 크기로 히스토그램을 작성합니다. 첫 번째 양초의 크기가 마지막 열 개 양초 중 가장 크다는 것을 알도록 도와주세요. 히스토그램의 막대는 너비나 색상으로 어떻게든 표시해야 합니다. 아마도 더 많은 버퍼를 추가해야 할 것입니다.

 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[])
  {
   int i,limit = Bars - 1 ;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for (i = limit; i >= 0 ; i--)
     {
       if (hl) ExtATRBuffer[i] = ( iHigh ( Symbol (), Period (),i) - iLow ( Symbol (), Period (),i)); 
                        
       else     ExtATRBuffer[i] = MathAbs ( iOpen ( Symbol (), Period (),i) - iClose ( Symbol (), Period (),i));
      
       if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0 ;
    
     //
      
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }