3分K棒突破前K高點買入跌破前K低點賣出平倉如何寫

  •   12 
  • 最後發表   sho7123  21 小時前
sho7123 發文於   2026/07/29

初學XS想要先寫出3分K棒突破前K買進,跌破前K賣出(平倉)的簡易策略,下面的語法編譯時會出問題,能夠幫忙檢視修改嗎?謝謝

 

// 策略名稱:突破前K高自動下單策略

// 執行頻率:可自行設定(如:1分K、5分K、日線等)

 

input: K_Bars(5, "前K根數量");

input: OrderVolume(1, "下單張數/口數");

 

variable: MaxHigh(0);

 

// 1. 計算前 K 根 K 棒的最高價( 代表從前一根開始算,不含當前 K 棒)

MaxHigh = Highest(High, K_Bars);

 

// 2. 多方進場條件:當前價格「突破」前 K 根的最高價

// 使用價格穿過函數 (Cross Over) 或 直接大於 (>)

if Close Cross Over MaxHigh then begin

// 調整部位至指定張數/口數(做多買進)

SetPosition(OrderVolume, Market);

end;

 

// 3. 出場條件範例(可依需求修改,此處以跌破前 K 根最低價為例)

variable: MinLow(0);

MinLow = Lowest(Low, K_Bars);

 

if Close Cross Under MinLow then begin

// 部位歸零(平倉出場)

SetPosition(0, Market);

end;

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/07/29

MaxHigh = Highest(High[1], K_Bars);

MinLow = Lowest(Low[1], K_Bars);

sho7123 發文於   2026/07/30

感謝教授的回覆

爬文後已將語法簡化如下

 

// 策略名稱:突破前K高自動下單策略

// 執行頻率:可自行設定(如:1分K、5分K、日線等)

 

 

// 2. 多方進場條件:當前價格「突破」前 K 根的最高價

// 使用價格穿過函數 (Cross Over) 或 直接大於 (>)

if Position = 0 and High Cross Over High[1] then begin

// 調整部位至指定張數/口數(做多買進)

SetPosition(2, Market);

end;

 

// 3. 出場條件範例(可依需求修改,此處以跌破前 K 根最低價為例)

 

if Position > 0 and Low < Low[1] then begin

// 部位歸零(平倉出場)

SetPosition(0, Market);

 

 

end;

sho7123 發文於   2026/07/30

但若遇上若當根K棒過高又破低的情形,多單進場後必須等下一根K棒才會執行平倉停損,想請教語法如何修改?

虎科大許教授 發文於   2026/07/30

用K棒內單次觸發模式處理。不過,設定觸發模式只能在警示腳本使用。在自動交易中心,需要用變數控制觸發模式。

若要這樣做,你就必須限制使用者只能使用分鐘頻率,不能使用日頻率。

If barfreq <> "Min" then raiseRunTimeError("限用分鐘頻率");
If GetInfo("IsRealTime") = 0 then return;
Var: IntraBarPersist myTime(0);
If myTime <> Time then 
    begin
        if Position = 0 and High Cross Over High[1] then 
            begin
                SetPosition(2, Market);
                myTime = Time;
            end;
        if Position > 0 and Low < Low[1] then 
            begin
                SetPosition(0, Market);
                myTime = Time;
            end;
    end;

 

發表回覆
Close