#property description "이 지표는 값을 계산하지 않습니다. 단 한번 시도합니다"
#property description "ArrayFree() 기능을 호출은 3개의 배열(동적 배열 하나, 정적 배열 하나)에 적용합니다"
#property description "지표 버퍼. 결과는 엑스퍼트 저널에 표시됩니다."
//--- 지표 설정
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
//--- 글로벌 변수
double ExtDynamic[]; // 동적 배열
double ExtStatic[100]; // 정적 배열
bool ExtFlag=true; // 플래그
double ExtBuff[]; // 지표 버퍼
//+------------------------------------------------------------------+
//| 사용자 지정 지표 초기화 함수 |
//+------------------------------------------------------------------+
int OnInit()
{
//--- 배열에 메모리 할당
ArrayResize(ExtDynamic,100);
//--- 지표 버퍼 맵핑
SetIndexBuffer(0,ExtBuff);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 사용자 지정 지표 반복 함수 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//--- 단일 분석을 실시
if(ExtFlag)
{
//--- 배열에 여유 메모리 시도
//--- 1. 동적 배열
Print("+============================+");
Print("1. 동적 배열 확인:");
Print("메모리를 확보하기 전의 크기 = ",ArraySize(ExtDynamic));
Print("동적 배열인지 확인 = ",ArrayIsDynamic(ExtDynamic) ? "예" : "아니오");
//--- 배열 메모리 사용 시도
ArrayFree(ExtDynamic);
Print("메모리 확보한 후의 크기 = ",ArraySize(ExtDynamic));
//--- 2. 정적 배열
Print("2. 정적 배열 확인:");
Print("메모리를 확보하기 전의 크기 = ",ArraySize(ExtStatic));
Print("동적 배열인지 확인 = ",ArrayIsDynamic(ExtStatic) ? "예" : "아니오");
//--- 배열 메모리 사용 시도
ArrayFree(ExtStatic);
Print("메모리를 확보한 후의 크기 = ",ArraySize(ExtStatic));
//--- 3. 지표 버퍼
Print("3. 지표 버퍼 확인:");
Print("메모리 확보 전의 크기 = ",ArraySize(ExtBuff));
Print("동적 배열인지 확인 = ",ArrayIsDynamic(ExtBuff) ? "예" : "아니오");
//--- 배열 메모리 사용 시도
ArrayFree(ExtBuff);
Print("메모리 확보한 후의 크기 = ",ArraySize(ExtBuff));
//--- 플래그 값 변경
ExtFlag=false;
}
//--- 다음 호출을 위한 prev_calculated의 반환 값
return(rates_total);
}
|