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

 
모든 그림을 초 위가 아닌 표시기의 배경으로 설정하는 방법을 알려주실 수 있습니까?
 
Roman Sharanov :
모든 그림을 초 위가 아닌 표시기의 배경으로 설정하는 방법을 알려주실 수 있습니까?

차트 속성 설정 사용: ChartSetInteger(chart_id, CHART_FOREGROUND ,value);

지표에만 해당되는 것은 아닙니다.

 

안녕하세요! 펄스 플랫 히스토그램 표시기가 있는데 히스토그램에서 선형으로 변환하고 싶습니다. 어디서부터 시작해야 할까요?!

 //+------------------------------------------------------------------+
//|                                             FM Signal Filter.mq4 |
//|                                                 Copyright © 2008 |
//|                                                 enhanced version |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Arney Derick"
#property link        "http://metatrader.com/"

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 DarkBlue
#property indicator_color4 Maroon
#property indicator_color5 Lime
#property indicator_color6 Yellow

//---- input parameters
extern int        bolPrd= 20 ;
extern double     bolDev= 2.0 ;
extern int        keltPrd= 20 ;
extern double     keltFactor= 1.5 ;
extern int        momPrd= 12 ;
//---- buffers
double upB[];
double upB2[];
double loB[];
double loB2[];
double upK[];
double loK[];

int i,j,slippage= 3 ;
double breakpoint= 0.0 ;
double ema= 0.0 ;
int peakf= 0 ;
int peaks= 0 ;
int valleyf= 0 ;
int valleys= 0 , limit= 0 ;
double ccis[ 61 ],ccif[ 61 ];
double delta= 0 ;
double ugol= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle ( 0 , DRAW_HISTOGRAM , EMPTY , 3 );
   SetIndexBuffer ( 0 ,upB);
   SetIndexEmptyValue ( 0 , EMPTY_VALUE );

   SetIndexStyle ( 1 , DRAW_HISTOGRAM , EMPTY , 3 );
   SetIndexBuffer ( 1 ,loB);
   SetIndexEmptyValue ( 1 , EMPTY_VALUE );

   SetIndexStyle ( 4 , DRAW_ARROW , EMPTY , 3 );
   SetIndexBuffer ( 4 ,upK);
   SetIndexEmptyValue ( 4 , EMPTY_VALUE );
   SetIndexArrow ( 4 , 159 );
   SetIndexStyle ( 5 , DRAW_ARROW , EMPTY , 1 );
   SetIndexBuffer ( 5 ,loK);
   SetIndexEmptyValue ( 5 , EMPTY_VALUE );
   SetIndexArrow ( 5 , 159 );

   SetIndexStyle ( 2 , DRAW_HISTOGRAM , EMPTY , 3 );
   SetIndexEmptyValue ( 2 , EMPTY_VALUE );
   SetIndexBuffer ( 2 ,upB2);

   SetIndexStyle ( 3 , DRAW_HISTOGRAM , EMPTY , 3 );
   SetIndexEmptyValue ( 3 , EMPTY_VALUE );
   SetIndexBuffer ( 3 ,loB2);

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

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars= IndicatorCounted ();
   int shift,limit;
   double diff,d,dPrev,std,bbs;

   if (counted_bars< 0 ) return (- 1 );
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars - 31 ;
   if (counted_bars>= 31 ) limit= Bars -counted_bars- 1 ;

   for (shift=limit;shift>= 0 ;shift--) 
     {
       //d=iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift);
      d=LinearRegressionValue(bolPrd,shift);
      dPrev=LinearRegressionValue(bolPrd,shift+ 1 );
       if (d> 0 ) 
        {
         if ((dPrev> 0 ) && (dPrev>d)){ upB2[shift]=d; upB[shift]= 0 ; } else { upB[shift]=d; upB2[shift]= 0 ; }
         //upB[shift]=0;
         loB[shift]= 0 ;
         loB2[shift]= 0 ;
           } else {
         if ((dPrev< 0 ) && (dPrev<d)){ loB2[shift]=d; loB[shift]= 0 ; } else { loB[shift]=d; loB2[shift]= 0 ; }
         upB[shift]= 0 ;
         upB2[shift]= 0 ;
         //loB[shift]=d;
        }
      diff= iATR ( NULL , 0 ,keltPrd,shift)*keltFactor;
      std = iStdDev ( NULL , 0 ,bolPrd, MODE_SMA , 0 , PRICE_CLOSE ,shift);
      bbs = bolDev * std / diff;
       if (bbs< 1 ) 
        {
         upK[shift]= 0 ;
         loK[shift]= EMPTY_VALUE ;
           } else {
         loK[shift]= 0 ;
         upK[shift]= EMPTY_VALUE ;
        }
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+

double LinearRegressionValue( int Len, int shift) 
  {
   double SumBars= 0 ;
   double SumSqrBars= 0 ;
   double SumY = 0 ;
   double Sum1 = 0 ;
   double Sum2 = 0 ;
   double Slope= 0 ;

   SumBars=Len *(Len- 1 )* 0.5 ;
   SumSqrBars=(Len- 1 )*Len *( 2 *Len- 1 )/ 6 ;

   for ( int x= 0 ; x<=Len- 1 ;x++) 
     {
       double HH = Low [x+shift];
       double LL = High [x+shift];
       for ( int y=x; y<=(x+Len)- 1 ; y++) 
        {
         HH = MathMax (HH, High [y+shift]);
         LL = MathMin (LL, Low [y+shift]);
        }
      Sum1 += x* ( Close [x+shift]-((HH+LL)/ 2 + iMA ( NULL , 0 ,Len, 0 , MODE_EMA , PRICE_CLOSE ,x+shift))/ 2 );
      SumY += ( Close [x+shift]-((HH+LL)/ 2 + iMA ( NULL , 0 ,Len, 0 , MODE_EMA , PRICE_CLOSE ,x+shift))/ 2 );
     }
   Sum2=SumBars*SumY;
   double Num1 = Len * Sum1 - Sum2;
   double Num2 = SumBars * SumBars-Len * SumSqrBars;

   if (Num2!= 0.0 ) 
     {
      Slope=Num1/Num2;
        } else {
      Slope= 0 ;
     }

   double Intercept=(SumY-Slope*SumBars)/Len;
   double LinearRegValue=Intercept+Slope *(Len- 1 );

   return (LinearRegValue);

  }
//+------------------------------------------------------------------+

 

DRAW-HISTOGRAM을 DRAW_LINE으로 교체하고 레벨 0에서 라인을 그리는 마지막 2개의 버퍼를 삭제했는데 이것이 일어난 일입니다.


~되었다

파일:
26.png  27 kb
27.png  29 kb
 
Kos Mos :

DRAW-HISTOGRAM을 DRAW_LINE으로 교체하고 레벨 0에서 라인을 그리는 마지막 2개의 버퍼를 삭제했는데 이것이 일어난 일입니다.


~되었다

알아 냈습니다 :)

 
Artyom Trishkin :

알아 냈습니다 :)

예))) 버퍼가 4개 남아 있기 때문에 끔찍해 보입니다. 제가 이해한 대로 버퍼는 2 또는 1이어야 합니다. 제 생각이 맞습니까?!

 

예를 들어 마지막 날이 아닌 촛불을 켜고 하루 전 등으로 최소한 이전 7일 동안 코드를 작성하는 방법을 알려주거나 포럼이나 함수에서 여기에서 찾을 수 있는 곳 가이드. 다음은 지난 날의 예입니다.

#속성 표시기_차트_창

extern bool Show_LABELS=true;

외부 정수 Shift_Prev_LABEL=10; // 숫자는 수평 오프셋을 의미합니다.

더블 DHi, DLo;

//---- 이전의

DHi =iHigh(NULL, PERIOD_D1,1 );

DLo =iLow(NULL,PERIOD_D1,1);

if (Show_LABELS==true)

{

if(ObjectFind("Pre_Day_Max")!=0)

{

ObjectCreate("Prev_day_max", OBJ_TEXT, 0, 시간[Shift_Prev_LABEL+196], DHi);

ObjectSetText("Prev_Day_Max", "Prev_D1"+DoubleToStr(DHi,Digits)+" ", 9, "Arial", 마젠타색);

}

또 다른

{

ObjectMove("Prev_day_max", 0, 시간[Shift_Prev_LABEL+196], DHi);

}

if(ObjectFind("Pre_Day_Min")!=0)

{

ObjectCreate("Pre_Day_Min", OBJ_TEXT, 0, 시간[Shift_Prev_LABEL+196], DLo);

ObjectSetText("Prev_Day_Min", "Prev_D1"+DoubleToStr(DLo,Digits)+" ", 9, "Arial", LawnGreen);

}

또 다른

{

ObjectMove("Prev_Day_Min", 0, 시간[Shift_Prev_LABEL+196], DLo);

}

}

init, deinite 및 start에 코드를 작성하지 않았습니다.

이중 DHi, DLo; //   분명히 여기에서 시작해야하지만 정확히 무엇인지 모르겠고 모든 것을 직접 작성합니다.

 
Artyom Trishkin :

알아 냈습니다 :)

여기요 ! 선이 단단해지도록 하는 방법을 알려주세요.

 
koctja :

DHi =iHigh(NULL, PERIOD_D1,1 );

DLo =iLow(NULL,PERIOD_D1,1);


더블 DHi, DLo; // //   분명히 여기에서 시작해야하지만 정확히 무엇인지 모르겠고 모든 것을 직접 작성합니다.

도움을 받아 시작하세요! 필요한 bar shift iHigh(NULL, PERIOD_D1 , 1 );

 
Kos Mos :

여기요 ! 선이 단단해지도록 하는 방법을 알려주세요.

"indicator_style"에 대한 도움말 읽기

Indicator_styleN

정수

그래픽 시리즈 의 선 스타일로, ENUM_LINE_STYLE 의 값을 사용하여 지정됩니다. N - 1부터 시작하는 그래픽 시리즈의 수