請問程式編輯關於KD的問題

  •   56 
  • 最後發表   XQ小菜鳥  3 週前
XQ小菜鳥 發文於   2024/11/25

input:day1(5,"MA5");

input:day2(10,"MA10");

input:day3(20,"MA20");

settotalBar(500);

var:rsv1(0),k1(0),d1(0);

var:rsvd(0),kd(0),dd(0);

stochastic(9,3,3,rsv1,k1,d1);

xf_Stochastic("D",9,3,3,rsvd,kd,dd);

var:intraBarPersist Buy(0);

 

 

//多單再度進場

if position <= 0 and filled <= 0 and Buy = 1 then

begin

if condition1 and condition2 and condition7 and condition5 and condition6 and k1 > k1[1] then setposition(1,market);

Buy = 2;

end;

 

---------------------------------------以上為程式-----------------------------------------------------------

請問

大部分的程式都很順利可以執行

但發現問題就出在 k1 > k1[1] 

只要輸入該段程式就無法做買進的動作

請問如果要加入K值大於上一根K值做買進的動作

我該如何修改呢?謝謝

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/11/26

(1)Buy是系統函數,不可當作變數名稱。

(2)k1 > k1[1]是主頻率的K值向上條件。若要用跨頻率的日K向上,要用kd>xfMin_getValue(kd,1)。

虎科大許教授 發文於   2024/11/26

(1)Buy是系統函數,不可當作變數名稱。

(2)k1 > k1[1]是主頻率的K值向上條件。若要用跨頻率的日K向上,要用kd>xfMin_getValue(kd,1)。

XQ小菜鳥 發文於   2024/11/26

謝謝許教授

 

input:day1(5,"MA5");

input:day2(10,"MA10");

input:day3(20,"MA20");

settotalBar(500);

var:rsv1(0),k1(0),d1(0);

var:rsvd(0),kd(0),dd(0);

stochastic(9,3,3,rsv1,k1,d1);

xf_Stochastic("D",9,3,3,rsvd,kd,dd);

var:intraBarPersist BC(0);

 

Input: Length(20, "期數"), UpperBand(2, "通道上緣"), LowerBand(2, "通道下緣");

variable: mid(0), up(0), down(0);

up = bollingerband(Close, Length, UpperBand);

down = bollingerband(Close, Length, -1 * LowerBand);

mid = (up + down) / 2;

 

condition1 = k1 > d1 and kd - dd > 0;

condition2 = v >66;

condition3 = c cross over average(c,day3);

condition6 = c > average(c,day1);

condition7 = c > average(c,day3);

condition9 = k1 > k1[1];//此條件似乎無法成立

 

if position = 0  then

begin

if condition1 and condition2 and condition3 and condition6 then

setposition(1,market);

end;

if position = 0  and BC = 1 then

begin

if condition1 and condition2 and condition7  and condition6 and condition9 then

setposition(1,market);

BC = 2;

end;

if position = 1 then

begin

if c cross under up and c > filledAvgPrice + 150

then setposition(0,market);

BC= 1;

 

end;

 

照理來說此程式使用在期指上面

昨天09:00會停利出場(實際上有)

09:10因為condition9 = k1 > k1[1];會再度進場

但是一直到12:00才因為第一個條件進場

代表著condition9是有問題的

所以不能寫 k1 > K1[1];嗎?

虎科大許教授 發文於   2024/11/26

不一定是condition9有問題。

if condition1 and condition2 and condition7  and condition6 and condition9 then

用print看看以上這幾個條件是否都是True,說不定1、2、6、7有一個條件是false。

XQ小菜鳥 發文於   2024/11/26

condition1 = k1 > d1 and kd - dd > 0;true(11/25 09:05)

condition2 = v >66;true(11/25 09:05)

condition6 = c > average(c,day1);true(11/25 09:05)

condition7 = c > average(c,day3);true(11/25 09:05)

condition9 = k1 > k1[1];true(11/25 09:05)

print出來全都是true

不過把condition9拿掉就會進場....加入就不會進場 太難懂問題在哪了^^"

虎科大許教授 發文於   2024/11/26

那只剩一種可能,就是第二個setposition不被執行。

第一個setposition被執行。

if condition1 and condition2 and condition3 and condition6 then

setposition(1,market);

end;

同一次洗價,

if condition1 and condition2 and condition7  and condition6 and condition9 then

第二個setposition不會被執行。

XQ小菜鳥 發文於   2024/11/26

感謝許教授

測試把k1 > k1[1];

換成c > c[1];

09:10依然是不會進場,但回測結果有不一樣

我再細細比對問題到底在哪?

 

把這個condition拿掉09:05馬上進場(上次09:00出場)

若是同一次洗價,第一個setposition要等到12:00才會進場

真的想不到問題在哪^^"

虎科大許教授 發文於   2024/11/26

另外一個問題,之前曾經出場,BC=1,但if position = 0  and BC = 1 then,BC馬上設為2,這造成條件符合仍然進不了IF裡面去下單。改成下面的寫法看看:

if position = 0  and BC = 1 then

      if condition1 and condition2 and condition7  and condition6 and condition9 then

            begin 

                  setposition(1,market);

                  BC = 2;

            end;

XQ小菜鳥 發文於   2024/11/27

感謝許教授

整個回測結果完全不同了(進出場)

但我看跟原來差異的部分

應該是這樣比較正確,謝謝!!

XS小編 發文於   2024/11/29

Hello XQ小菜鳥,

 

小編補充,當同一次腳本運算時有複數個交易指令觸發時,腳本只會執行第一個觸發的指令。

可參考 SetPosition 的說明。

 

另外建議可以使用 position 和 filled 來控管,請參考 自動交易語法介紹 裡的說明。

顯示更多回應 發表回覆
Close