請幫我看看腳本哪邊有問題

  •   206 
  • 最後發表   Elvon  2022 九月 15
Elvon 發文於   2022/08/30

想寫一個台指期日盤用的腳本

頻率5分K,9:30過後才進場,8:45-9:30的高低點作為區間,突破區間做多,移動停損設區間的1/2,如果沒碰到就在13:30將部位平倉

試跑6個月回測,結果我好像寫得完全不對XD,麻煩小幫手看看哪邊有錯

if date<>date[1] and currentTime=093001 then begin
value1=highest(h[1],9);
value2=lowest(L[1],9);

var:loss_point(0);
loss_point=0.5*(value1-value2);
end;

if c>value1 then setposition(1);


if Position = 1 and Filled = 1 then begin
var: intrabarpersist stoploss_point(0);   
{ 計算停損價格 }
    if stoploss_point = 0 then begin
        stoploss_point = FilledAvgPrice - loss_point;
    end;

    { 如果價格上漲的話, 則往上挪動停損價格. 停損價格只會越來越高 }
    if Close > FilledAvgPrice then begin
        if Close - loss_point > stoploss_point then begin
            stoploss_point = Close - loss_point;
        end;    
    end;    

    if Close <= stoploss_point then begin
        { 停損 }
        SetPosition(0);
        stoploss_point = 0;
    end;

    if currenttime=133000 then begin
    SetPosition(0);
    end;
end;

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/09/06

Hello Elvon,

 

currenttime = 093001 這點不一定達成,因為要剛好那秒有洗價條件才會達成。

小幫手會建議您可以直接用變數來記錄 8:45-9:30 的高低點。

且為了避免因為持續達成條件導致一直執行 setposition(1),會建議您用 position 和 filled 來限制。

舉例來說:

if time = 084500 then begin

   value1 = high;

   value2 = low;

   end;

 

if time < 093000 then begin

    if high > value1 then value1 = high;

    if low < value2 then value2 = low;

    end;

 

if time >= 093000 and close > value1 and position = 0 and filled = 0 then setposition(1);

這樣value1和value2就會是這段時間的高低點,在 9:30 以後、收盤價大於區間高點且部位庫存為0的狀況下才會進場。

出場的部分小幫手一樣會建議您使用 position 和 filled 來限制。

 

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

Elvon 發文於   2022/09/08

有些地方不是很了解,

1. currenttime我看函數說明是回傳電腦的時間,為何還要看洗價,照這講法底下您寫的time=084500 以及 time<093000當下沒洗價也無法成立嗎?

2.

if time = 084500 then begin

   value1 = high;

   value2 = low;

   end;

這段不懂的地方是,time = 084500 這是開盤時間點,XS頻率最短也只到1分K,這樣K棒沒完成會有最高和最低出現嗎?

3.

if time < 093000 then begin

    if high > value1 then value1 = high;

    if low < value2 then value2 = low;

    end;

 

這段我的理解是,時間小於9點半,若目前最高價大於先前的最高價(也就是上一段語法的value1),則value1更新為目前的最高價

最低價也是一樣邏輯,請問這樣解讀是否正確?

 

教學區也有看了,不過礙於本身沒程式基礎還是滿多疑問,再麻煩小幫手解惑

 

XQ小幫手 發文於   2022/09/15

Hello Elvon,

 

currenttime 是電腦當下的時間,所以只會是那瞬間。

time 是該根Bar對應的時間 (time 對應到Bar開始的時間),所以如果是084500的話,就會是期貨開盤的那根Bar。

舉例來說,您使用1分鐘頻率或是5分鐘頻率的話,time = 084500 就會是 08:45 ~ 08:46 和 08:45 ~ 08:50 這段時間都符合。

 

1.time = 084500  ==>  5分鐘頻率下就會是 08:45~08:50 這段時間洗價都會符合。

time < 093000  ==>  在09:30以前的Bar洗價都會符合。

 

2.就會是對應Bar ( 08:45~08:50) 的high和low。

 

3.是的,value1就會是紀錄到 09:30 前最高的價格,value2 則是最低的價格。

發表回覆
Close