寫了一個數列函數 f_accumulated_volume_per_minute,用以計算每分鐘的累積成交量。
數列函數: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 begin
f_accumulated_volume_per_minute
= Summation(volume, v_minute_bar_local_number_in_a_day);
end
else
f_accumulated_volume_per_minute =0;
我寫了一個警示,要測試這個數列函數。
警示腳本:Test.accumulated_volume_1
//Test.accumulated_volume_1
settotalbar(2*4.5*60);
if f_accumulated_volume_per_minute[2*4.5*60] > getfield("成交量","D")[1]
then ret=1;
回測這個警示腳本 Test.accumulated_volume_1,會出現 "不合法的欄位資料"。
回測結果如下圖一:
.jpg?width=690&upscale=false)
.jpg?width=690&upscale=false)
可是,如果把自訂數列函數直接寫到警示腳本內,卻不會出現 "不合法的欄位資料"。
警示腳本:Test.accumulated_volume_2
//Test.accumulated_volume_2
settotalbar(2*4.5*60);
{
if f_accumulated_volume_per_minute[2*4.5*60] > getfield("成交量","D")[1]
then ret=1;
}
variable:v_minute_bar_local_number_in_a_day(0);
variable:v_accumulated_volume_per_minute(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 begin
v_accumulated_volume_per_minute
= Summation(volume, v_minute_bar_local_number_in_a_day);
end
else
v_accumulated_volume_per_minute =0;
if v_accumulated_volume_per_minute[2*4.5*60] > getfield("成交量","D")[1]
then ret=1;
回測結果如下圖二:
.jpg?width=690&upscale=false)
請問小幫手,我的數列函數是不是有沒注意到的邏輯錯誤?

.jpg?width=690&upscale=false)
.jpg?width=690&upscale=false)

10 評論