請問如何再出場XSCRPIT 寫持倉20天賣出股票?

  •   242 
  • 最後發表   老灰仔  2025 六月 17
老灰仔 發文於   2025/06/08

{

多單停損(%)

}

 

input: profit_percent(20, "停利(%)");

input: loss_percent(10, "停損(%)");

input: max_holding_days(20, "持倉天數上限");  // ?? 新增由使用者填入持倉天數

 

var: long_condition(false); { 進場買進作多 }

Vars: holding_days(0);

 

// 計算持倉天數

if Filled > 0 then

holding_days = DateDiff(FilledRecordDate(1), CurrentDate) + 1;

//holding_days = BarsSinceEntry();

//holding_days = DateDiff(FilledRecordDate(FilledRecordCount), CurrentDate) + 1;

{

範例:

均線穿越時以市價買進1張

以成交價為基礎, 設定固定的停損/停利價格, 觸及時出場

}

 

if Position = 0 then begin

SetPosition(1, MARKET); { 以市價買進 }

end;

 

if Position >= 1 and Filled >= 1 then begin

// 依照成本價格設定停損/停利 或 持倉超過天數出場

if holding_days >= max_holding_days then begin

SetPosition(0, label:="持倉滿使用者指定日數出場");

end else

if profit_percent > 0 and Close >= FilledAvgPrice * (1 + 0.01 * profit_percent) then begin

SetPosition(0);  // 停利

end else if loss_percent > 0 and Close <= FilledAvgPrice * (1 - 0.01 * loss_percent) then begin

SetPosition(0);  // 停損

end;

end;

我這麼寫回測也不會賣.可否幫改一下謝謝!!

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/06/08

(1)你需要使用延續前次執行的策略部位。

(2)從策略的記錄檔抓此商品建立部位的日期。

holding_days = DateDiff(currentDate,FilledEntryDate) + 1;

(3)要注意的是,這裡用DateDiff,抓的日期差,會包含週末及假日。

老灰仔 發文於   2025/06/08

謝謝您的解答..再請教一下.不用Datediff用哪一個能算出工作日?感激不盡

 

 

虎科大許教授 發文於   2025/06/08

需要自訂函數。

老灰仔 發文於   2025/06/08

好的謝謝

XS小編 發文於   2025/06/17

Hello 老灰仔,

 

小編補充,由於K棒只會有工作日的日期,所以回測的狀況下您也可以用變數紀錄進場後經過幾天的邏輯來取代用DateDiff計算日期差。

發表回覆
Close