自訂函數 f_estimated_accumulated_volume_per_minute 如下:
//函數功能:計算估計成交量
//關鍵:該分鐘累積成交量/過去N日該分鐘的累績成交量平均占比
//輸入參數:回頭觀察的天數
//宣告
setbarmode(2);
inputs:number_of_observing_days(NumericSimple); //預設回頭觀察2天
variable:number_of_bars_per_day(270);
Array:array_volume_of_observing_day_per_minute[](0);
Array:array_volume_of_observing_day_per_day[](0);
Array:array_volume_percentage_of_observing_day_per_minute[](0);
Array_SetMaxIndex(array_volume_of_observing_day_per_minute, number_of_observing_days);
Array_SetMaxIndex(array_volume_of_observing_day_per_day, number_of_observing_days);
Array_SetMaxIndex(array_volume_percentage_of_observing_day_per_minute, number_of_observing_days);
//計算過去N日該分鐘的成交量占比
variable:i(0);
for i = 1 to number_of_observing_days
begin
//取得該分鐘的累計成交量
array_volume_of_observing_day_per_minute[i]
= f_accumulated_volume_per_minute[number_of_bars_per_day*i];
//取得該日的累計成交量
array_volume_of_observing_day_per_day[i]
= getfield("成交量","D")[i];
//取得成交量占比:該日該分鐘的累計成交量/該日的累計成交量
if array_volume_of_observing_day_per_day[i] = 0 //檢查除數不為0
then array_volume_percentage_of_observing_day_per_minute[i] = 0
else
array_volume_percentage_of_observing_day_per_minute[i]
= array_volume_of_observing_day_per_minute[i]
/ array_volume_of_observing_day_per_day[i];
end;
//計算過去N日該分鐘的成交量平均占比
variable:accumulated_volume_per_minute_percentage(0);
if number_of_observing_days = 0 //檢查除數不為0
then accumulated_volume_per_minute_percentage = 0
else accumulated_volume_per_minute_percentage //該分鐘過去N天的成交量平均占比
= Array_Sum(array_volume_percentage_of_observing_day_per_minute, 1, number_of_observing_days)
/ number_of_observing_days;
//計算該分鐘的估計成交量
if accumulated_volume_per_minute_percentage = 0 //檢查除數不為0
then f_estimated_accumulated_volume_per_minute = 0
else f_estimated_accumulated_volume_per_minute //用成交量佔比,去反推該分鐘的估計成交量
= f_accumulated_volume_per_minute
/ accumulated_volume_per_minute_percentage;
//依照不同時間,對估計成交量,給予不同的低估權重,因為預估成交量在前期會過度高估
if time < 93000
then f_estimated_accumulated_volume_per_minute
= f_estimated_accumulated_volume_per_minute * 0.8
else if time < 100000
then f_estimated_accumulated_volume_per_minute
= f_estimated_accumulated_volume_per_minute * 0.85
else if time < 110000
then f_estimated_accumulated_volume_per_minute
= f_estimated_accumulated_volume_per_minute * 0.9;
自訂函數 f_accumulated_volume_per_minute 如下:
//函數功能:計算該日每分鐘的累積成交量,功能與getfield("成交量","D") 類似
//但getfield("成交量","D") 無法取得前一天的每分鐘累積成交量,而這個函數可以
//宣告
SetBarMode(2);
variable:v_minute_bar_local_number_in_a_day(0);
//如果09:00:00是當日編號1號的分K棒,計算現在這根分K棒的當日編號,也就現在距離09:00:00幾分鐘
v_minute_bar_local_number_in_a_day
= 1 + timediff(time,90000,"M");
//計算該日每分鐘的累積成交量
if v_minute_bar_local_number_in_a_day > 0
then f_accumulated_volume_per_minute
= Summation(volume, v_minute_bar_local_number_in_a_day)
else
f_accumulated_volume_per_minute =0;
1 評論