請幫忙debug

  •   207 
  • 最後發表   小李刀刀  2023 十一月 17
小李刀刀 發文於   2023/11/12

下為自己寫的一個簡單自動交易策略

主要想說每天最高價出現時,做放空

但跑回測始終都是無交易,不確定邏輯對不對

希望小幫手幫忙debug

 

input:start(1,"開啟交易"), out(2,"開啟平倉");  

var: _stocktype(true), barcount(0), hc(0);

 

if IsSessionFirstBar then begin

barcount = 0;

hc=0;

end;

 

if Date<>Date[1] then begin

barcount+=1;

end; 

 

if barcount<> 0 then 

begin

 

  if (barcount=1 and v=0) then //開盤緩搓

    begin

   if barcount>=2 then 

begin

hc=Fasthighestbar(H,barcount-2);//當天最高價的k棒

end

  else                    //一般狀況

begin

    hc=Fasthighestbar(H,barcount);//當天最高價的k棒

end;

  end;

end;

 

condition1 = time > 090000 and time < 093000  

and getField("收盤價", "D")[1] = getField("漲停價", "D")[1]

and hc = 0 and barcount>=2 

and _stocktype = GetSymbolInfo("買賣現沖")

and close>10  

and close<200;  

//十字  

if start=1 then begin  

if barfreq<> "Min" or barinterval <> 1 then return;  

if condition1 then setposition(-1, market);

end;  

  

if out=2 then begin  

input: exit_period(15, "收盤前N分鐘平倉");  

var: market_close_condition(true); { 是否已經進入收盤階段 }  

market_close_condition = EnterMarketCloseTime(exit_period);  

condition2 = close>GetField("收盤價", "D")[1]*1.075;

  

if filled <> 0 and position <> 0 then begin  

  

    if (market_close_condition or condition2 or close = GetField("跌停價", "D")) then begin  

  

    setposition(0, GetField("漲停價", "D"));  

  

end;  

end;  

end;

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/11/15

 Hello 小李刀刀,

 

小幫手建議您使用Print函數將相關數值印出,會比較容易找出問題。

Fasthighestbar 是使用節省效能的寫法,不能夠在腳本運算期間有時運算有時不運算,也不適合在運算中改變計算的長度。

這種時候應該用 SimpleHighestBar,但會比較耗效能。

 

另外您的 barcount 計算也是錯誤的,只有換日的時候 barcount 才會增加,這樣每日盤中運算都只會是1 。

小幫手的話會建議您直接用變數保存最高價的數值,來判斷當下是否突破最高價。

 

舉例來說:

 

if issessionfirstbar then beign

    value1 = high;

    value2 = 0;

    end

else if value1 < high then begin

    value1 = high;

    value2 = 0;

    end

else value2 += 1;

 

這樣 value2 就會是和當日最高的相對距離,value1 則是當日最高值,且這樣比較節省效能。

小李刀刀 發文於   2023/11/15

那請問一下,怎樣才能取得從9:00開盤後到目前1分K的相對barcount?

XQ小幫手 發文於   2023/11/17

Hello 小李刀刀,

 

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

 

如果您希望計算當日目前經過了幾根Bar,可以這樣寫:

if issessionfirstbar then value1 = 1 else value1 += 1;

或是

if issessionfirstbar then value1 = 0;

value1 += 1;

這樣value1就會是今日經過的Bar數量。

發表回覆
Close