請問我要如何在60分鐘週期去抓取5分鐘我計算的數值呢?

  •   317 
  • 最後發表   灰熊  3 週前
灰熊 發文於   2025/04/16

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

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/04/16

一般會建議,跨頻率時要小跨大。你現在要大跨小,是可以用value1=getField("收盤價","5")抓到5分鐘收盤價,但在運算時,要小心,很容易出現邏輯錯誤。

灰熊 發文於   2025/04/16

謝謝教授,我不是要收盤價,我是要買賣張數的差值,因為60分K,原始值去跑,要等1小時才能出訊,但買賣張數一直在變,可能在20分就變盤了,我就可以先出清部位,不用等到60分K線收定才動作,但我也不想逐筆洗價,會導致成交筆數暴增。

虎科大許教授 發文於   2025/04/16

建議你主頻率用5分鐘。至於需要60分鐘判斷的訊號,用跨頻率處理。

非逐筆洗價時,每隔5分鐘抓外盤量與內盤量的差額:

value1=GetField("外盤量","D")-GetField("內盤量","D");

 

灰熊 發文於   2025/04/17

好的,謝謝教授

 

XS小編 發文於   2025/04/18

Hello 灰熊,

 

小編補充,即使您在60分鐘頻率上使用了5分鐘頻率的資料 (就以您這邊的案例,沒有用到前期值之類的資訊是可以的),若沒有勾選逐筆洗架或是自動洗價的話,一樣是要60分鐘 (換Bar) 時洗一次。

故應該是使用5分鐘當作執行頻率會比較適合。

灰熊 發文於   2025/04/18

好的,謝謝

灰熊 發文於   2025/10/01

教授您好:我跨頻改成小跨大,但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來判斷

 

虎科大許教授 發文於   2025/10/01

(1)flag要用intrabarpersist宣告。

(2)前一根60分K的KD,不可用k60[1],而應使用xfMin_getValue("60", k60, 1)。k60[1]是前5分鐘的60分KD。

灰熊 發文於   2025/10/01

謝謝許教授的解答,看樣子我學的還不夠透徹,感謝許教授

發表回覆
Close