#property indicator_separate_window
//--- 지표 창의 최대값 및 최소값 설정
#property indicator_minimum 0
#property indicator_maximum 100
//--- 별도의 지표 창에 3개의 수평 레벨을 표시
#property indicator_level1 25
#property indicator_level2 50
#property indicator_level3 75
//--- 수평 레벨의 굵기 설정
#property indicator_levelwidth 1
//--- 수평 레벨의 스타일 설정
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| 사용자 지정 지표 초기화 함수 |
//+------------------------------------------------------------------+
int OnInit()
{
//--- 수평 레벨의 설명 설정
IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- 지표를 약칭을 설정
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- 각 레벨별로 색을 설정
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 사용자 지정 지표 반복 함수 |
//+------------------------------------------------------------------+
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[])
{
static int tick_counter=0;
static double level1=25,level2=50,level3=75;
static double max=100,min=0, shift=100;
//--- 틱 계산
tick_counter++;
//--- 열 번째 틱마다 레벨을 뒤집기
if(tick_counter%10==0)
{
//--- 수준 값에 대한 반전 기호
level1=-level1;
level2=-level2;
level3=-level3;
//--- 최대값 및 최소값에 대한 반전 기호
max-=shift;
min-=shift;
//--- 시프트 값을 반전
shift=-shift;
//--- 새 레벨 값을 설정
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3);
//--- 지표 창에서 최대값과 최소값의 새 값을 설정
Print("Set up max = ",max,", min = ",min);
IndicatorSetDouble(INDICATOR_MAXIMUM,max);
IndicatorSetDouble(INDICATOR_MINIMUM,min);
}
//--- 다음 호출을 위한 prev_calculated의 반환 값
return(rates_total);
}
|