Channel Trailing SX#
這個策略在空頭持倉獲利達到一定門檻時,利用過去一定時間內的最高價作為買入平倉的價格,以鎖定獲利並減少損失。透過調整 Length、FloorAmt 和 PositionBasis 等參數,交易者可以靈活適應市場條件,優化自己的交易策略。
原始碼#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [IntrabarOrderGeneration = false]
Inputs: Length(3), FloorAmt(1), PositionBasis(false);
Variables: var0(0), var1(0);
var0 = HighestFC(High, Length);
If PositionBasis = false Then
var1 = CurrentShares * FloorAmt
Else
var1 = FloorAmt;
Condition1 = MarketPosition = -1 and MaxPositionProfit >= var1;
If Condition1 Then
Buy To Cover ("ChTrSX") next bar at var0 stop;
|
程式碼說明#
1
| [IntrabarOrderGeneration = false]
|
確保在同一根K棒內不會生成多個委託單,僅在K棒完成時才生成委託單。
1
| Inputs: Length(3), FloorAmt(1), PositionBasis(false);
|
Length: 用於計算最高價的過去K棒數量。FloorAmt: 達到或超過此獲利金額後才會放置委託單。PositionBasis: 設定獲利的計算方式。false 表示以每股為單位計算,true 表示以整個倉位為單位計算。透過設定 FloorAmt 和 PositionBasis,可以選擇以每股獲利或每倉獲利作為獲利門檻。
1
| Variables: var0(0), var1(0);
|
var0: 儲存過去 Length 根K棒中的最高價。var1: 根據 PositionBasis 的設定,計算出場的獲利門檻。
1
| var0 = HighestFC(High, Length);
|
使用 HighestFC 計算過去 Length 根K棒的最高價。
1
2
3
4
| If PositionBasis = false Then
var1 = CurrentShares * FloorAmt
Else
var1 = FloorAmt;
|
如果 PositionBasis 為 false,var1 計算為當前持有數量乘以 FloorAmt。如果為 true,直接使用 FloorAmt。
1
2
3
| Condition1 = MarketPosition = -1 and MaxPositionProfit >= var1;
If Condition1 Then
Buy To Cover ("ChTrSX") next bar at var0 stop;
|
判斷是否處於空頭持倉(MarketPosition = -1)且最大持倉獲利達到或超過 var1 設定的門檻。如果滿足,在下一根K棒以 var0(即過去最高價)作為價格送出買入停損單。當市場漲到這個價格時,觸發買入平倉。