教授您好:我想在60分週期內,引用到5分鐘所計算的數值例:value1,value1不是函數,這要如何引用呢?麻煩了

請問我要如何在60分鐘週期去抓取5分鐘我計算的數值呢?
- 317
- 最後發表 灰熊 3 週前
一般會建議,跨頻率時要小跨大。你現在要大跨小,是可以用value1=getField("收盤價","5")抓到5分鐘收盤價,但在運算時,要小心,很容易出現邏輯錯誤。
謝謝教授,我不是要收盤價,我是要買賣張數的差值,因為60分K,原始值去跑,要等1小時才能出訊,但買賣張數一直在變,可能在20分就變盤了,我就可以先出清部位,不用等到60分K線收定才動作,但我也不想逐筆洗價,會導致成交筆數暴增。
建議你主頻率用5分鐘。至於需要60分鐘判斷的訊號,用跨頻率處理。
非逐筆洗價時,每隔5分鐘抓外盤量與內盤量的差額:
value1=GetField("外盤量","D")-GetField("內盤量","D");
好的,謝謝教授
Hello 灰熊,
小編補充,即使您在60分鐘頻率上使用了5分鐘頻率的資料 (就以您這邊的案例,沒有用到前期值之類的資訊是可以的),若沒有勾選逐筆洗架或是自動洗價的話,一樣是要60分鐘 (換Bar) 時洗一次。
故應該是使用5分鐘當作執行頻率會比較適合。
好的,謝謝
教授您好:我跨頻改成小跨大,但60分KD一直不對,主頻是5分鐘,麻煩再幫我看看,謝謝
// 9,2,2
xfMin_Stochastic("60",Length, RSVt, Kt,rsv60,k60,d60); //60分鐘9,2,2
xfMin_Stochastic("5",Length, RSVt, Kt,rsv5,k5,d5);//5分鐘9,2,2
_upband = bollingerband(Close,_Length, UpperBand);
_midband = average(close,_Length);
_downband = bollingerband(Close, _Length, -1 * LowerBand);
_60MA=average(close,60);
//flag=1表60分KD為多方,多方則在布林下軌道站上作買進期貨,或買進價平選擇權的CALL或;flag=-1表60分KD為空方,空多方則在布林上軌道上作賣出或買進價平的PUT
if (k60[1]>d60[1]) and (k60[1]>20) then begin
flag1=1;
end;
if ((k60[1]<d60[1]) and (k60[1]<80)) then begin
flag1=-1;
end;
//買進訊號(9,2,2)[多,多],因為雙箭合一為強多,故不用考慮5分鐘低鈍的問題,高鈍以上不追高買進
condition9=close[1]<_downband[1] and close>_downband;
Condition10=((low<_downband)) or ((low-5)<_downband) and close>_downband;
Condition11=close>_downband;
//Condition86=not (((time>114500) and (time<212900)) or ((time>000001)and (time<051000)));
Condition86=(time>=84500 and time<=133000);// or (time>=213000 or time<=050000);
long_condition=Condition9 ;
if flag=0 and Condition86 then begin //flag為部位控制
// if flag1=1 and Condition86 then begin
if long_condition then begin
plot1(low,"buy");
print(file("d:\Print\print數據用.csv"),NumToStr(DATE,0),"多"+NumToStr(flag1,0),"K60[1]"+NumToStr(k60[1],0),"D60[1]"+NumToStr(d60[1],0));
flag=1;
//setposition(1);
long_cost=close;
//end;
end;
end;
//買單出場 9,3,3 高鈍時則要脫離高鈍再出場,不是向下交叉就出場
Condition21=_K cross below _d;
Condition22=close>_upband;
Condition23=_k<80;
condition24=_k<_k[1];
Condition25=_d<_d[1];
Condition26=close<average(close,4);
Condition27=high>=_upband;
Condition28=close<_upband;
Condition29=_60MA<_60MA[1];
Condition30=close[1]>_upband;
Condition31=_d>_k;
if flag=1 then begin
if (Condition21 and Condition23) or (Condition23 and Condition24 and Condition25 and Condition31 and (not Condition10)) then //or (not Condition10)
begin
plot21(high,"EXIT");
flag=0;
//setposition(0);
end;
//if close-long_cost>=profit then begin//多單停利出場
// plot26(high,"EXIT");
// flag=0; //多單停利出場
//end;
end;
一直沒出訊,我print才知60分KD一直不對,flag1一直為-1
20250925 多-1 K60[1]27 D60[1]36
20250926 多-1 K60[1]42 D60[1]56
20251001 多-1 K60[1]67 D60[1]76
20251001 多-1 K60[1]38 D60[1]57
60分K和60分D值跟技術指標的不一樣,技術指標為
第一個20251001為K60=84.23,D60=84.19
第二個20251001KD己交叉下來,數值也不對,應是K60=65,D60=76左右,因我是取前一個KD值,所以是取當下的前一節KD還是是取到前二節的KD,因當下5分鐘的情況下,60分是否為未確定,所以我才取前一節的60分KD來判斷
(1)flag要用intrabarpersist宣告。
(2)前一根60分K的KD,不可用k60[1],而應使用xfMin_getValue("60", k60, 1)。k60[1]是前5分鐘的60分KD。
謝謝許教授的解答,看樣子我學的還不夠透徹,感謝許教授
9 評論