請問這個程式碼怎麼改成等比網格

  •   105 
  • 最後發表   yuyu2  2023 六月 28
yuyu2 發文於   2023/06/22


您好,下面程式碼是看網路上XQ網格交易範例來的,如果要弄成上圖的等比網格怎麼寫,謝謝

//參數定義

input:P_LS(1,"多空啟動",inputkind:=dict(["多方啟動",1],["空方啟動",-1]));

input:P_UpLimit(15000,"區間上緣");

input:P_DnLimit(12000,"區間下緣");

input:P_Grid(30,"網格數");

input:P_GridV(1,"每筆張數");

//變數定義

var:V_LS(0);//多空方向

var:V_Grid(0);//網格點數

var:intrabarpersist V_GridNo(0);//網格編號

var:intrabarpersist V_GridPosition(0);//網格目標部位

//多空方向,預設做多

if P_LS=-1 then V_LS=-1 else V_LS=1;

//計算每格點數

once V_Grid = intPortion((P_UpLimit-P_DnLimit)/P_Grid);

if V_LS=1 then value1=MaxList((close-P_DnLimit)/V_Grid,0)

 else value1=MaxList((P_UpLimit-close)/V_Grid,0);

//計算目前所處網格編號,最低網格為0號

V_GridNo = intPortion(value1);

//計算網格應有部位

if V_LS=1 then begin

 V_GridPosition = P_GridV * maxList(P_Grid - V_GridNo,0);

  //啟動策略或價格下跌造成部位不足,以網格下價買齊

 if filled < V_GridPosition then begin

  setposition(V_GridPosition, P_DnLimit + V_Grid*V_GridNo);

 end else begin

  //價格上漲造成部位太多,以網格上價賣出

  setposition(V_GridPosition, P_DnLimit + (V_Grid+1)*V_GridNo); 

 end;

end else begin

 V_GridPosition = - P_GridV * maxList(P_Grid - V_GridNo,0);

  //啟動策略或價格上漲造成部位不足,以網格上價放空

 if filled > V_GridPosition then setposition(V_GridPosition, P_UpLimit - V_Grid*V_GridNo);

 //價格下跌造成部位太多,以網格下價回補

 setposition(V_GridPosition, P_UpLimit - (V_Grid+1)*V_GridNo);//依網格價位將委託設定至目標部位

end;

 

XQ小幫手 發文於   2023/06/28

Hello yuyu2,

 

XQ的網格是以等差網格為範例所撰寫,所以沒辦法簡單修改。

小幫手會建議您將網格的區間上緣/下緣參數刪除其中一個,改為等比參數。

然後計算每格點數時改用陣列來儲存,並以此來判斷目前的價格在哪個格子,該買幾張。

 

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

發表回覆
Close