內外盤資料交易語法問題

  •   251 
  • 最後發表   Zreedom  2023 七月 19
Zreedom 發文於   2023/07/16

想寫一個當沖交易腳本,計算Z分鐘內內外盤加總比例,若外盤比例持續XI分鐘都增長超過YI則市價買進,若內盤比例持續XD分鐘都跌幅超過YD則市價全部清倉賣出,但下列的語法回測後只有開盤成交一筆,想請小幫手協助確認是否有哪裡有錯。

 

input: Z(15,"計算內外盤量加總之時間範圍(分鐘)");

input: XI(2,"增幅持續增加時間(分鐘)"); //I for Increase

input: YI(1,"每分鐘增幅(%)");

input: XD(2,"跌幅持續增加時間(分鐘)"); //D for Decrease

input: YD(1,"每分鐘跌幅(%)");

input:DealingTime(60,"自開盤起之交易時間(分鐘)");

 

 

Vars: i(0);

 

 

for i = 0 to (Z-1)

Begin 

value1 += getfield("外盤量","1")[i]; //Z分鐘內的外盤量總和

End;

 

for i = 0 to (Z-1)

begin 

value2 += getfield("內盤量","1")[i]; //Z分鐘內的內盤量總和

end;

 

Value3=(value1/value1+value2)*100;  //Z分鐘內的外盤比例

value4=(value2/value1+value2)*100;  //Z分鐘內的內盤比例 

 

for i = 0 to XI-1

Begin

if (value3[i] - value3[i+1]) >= YI then  //若K棒的外盤比例 比前一根K棒高出YI 則執行以下運算

  value5 += (value3[i]-value3[i+1])  //計算出XI分鐘內外盤比例差額的總和

Else

  Break;

end;

 

for i = 0 to XD-1

Begin

if (value4[i] - value4[i+1]) >= YD then //若K棒的內盤比例 比前一根K棒高出YD 則執行以下運算

  value6 += (value4[i]-value4[i+1])  //計算出XD分鐘內外盤比例差額的總和

Else

  Break;

end;

if value5 > YI * XI then setposition(+1,market) ; //若XI分鐘內外盤比例差額的總和大於YI*XI 則市價買進

if value6 >= YD * XD then setposition(0, Market); //若XD分鐘內外盤比例差額的總和大於YD*XD 則市價全部清倉

XQ小幫手 發文於   2023/07/19

Hello Zreedom,

 

小幫手會建議您可以將相關數值印出檢查,會比較好理解。

 

value1 = 0;

for i = 0 to (Z-1) Begin 

    value1 += getfield("外盤量","1")[i]; //Z分鐘內的外盤量總和

    End;

您應該先將 value1 歸0,再讓其加總。

不然 value1 會隨著每次執行而持續增加,而不是 Z分鐘內的外盤量總和。

value2, value5, value6 也是相同道理。

 

if (value3[i] - value3[i+1]) >= YI then  

  value5 += (value3[i]-value3[i+1])

Else

  Break;

這種寫法只要 (value3[i] - value3[i+1]) >= YI 一不符合 for 迴圈就會中斷,所以若當下那根不符合的會立即中斷。

 

setposition(+1,market) 這種寫法並不是多買進一張,而是庫存只要一張。

如果您是要每次條件達成的就多買進一張的話,應該是要 setposition(position + 1, market)。

您可以參考 setposition 的說明。

 

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。

  • 按讚來自於
  • khs1107
發表回覆
Close