Keltner Channel SE#
這個策略利用 Keltner Channel 來判斷市場的進場機會。Keltner Channel 位於市場價格的上方(上通道)和下方(下通道),通道內的價格被認為是正常的。當市場價格跌破下通道時觸發進場,送出突破K棒的最低價減 1 點的賣空停損單。
原始碼#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| [IntrabarOrderGeneration = false]
Inputs: Price(Close), Length(20), NumATRs(1.5);
Variables: var0(0), var1(0), var2(0), var3(false), var4(0);
var0 = AverageFC(Price, Length);
var1 = NumATRs * AvgTrueRange(Length);
var2 = var0 - var1;
Condition1 = CurrentBar > 1 and Price crosses under var2;
If Condition1 Then Begin
var3 = true;
var4 = Low;
End
Else Begin
Condition1 = var3 and (Price > var0 or Low <= var4 - 1 point);
If Condition1 Then
var3 = false;
End;
If var3 Then
Sell Short ("KltChSE") next bar at var4 - 1 point stop;
|
程式碼說明#
1
| [IntrabarOrderGeneration = false]
|
確保在同一根K棒內不會生成多個委託單,僅在K棒完成時才生成委託單。
1
| Inputs: Price(Close), Length(20), NumATRs(1.5);
|
Price: 用來計算的價格,預設使用收盤價。Length: 用於計算 Keltner Channel 的K棒數量,預設 20。NumATRs: ATR(平均真實範圍)的倍數,預設 1.5。
1
| Variables: var0(0), var1(0), var2(0), var3(false), var4(0);
|
var0: 儲存移動平均線的值。var1: ATR 值乘以 NumATRs 的結果。var2: 移動平均線(var0)減去 ATR 距離(var1),即 Keltner Channel 的下通道。var3: 布林變數,追蹤是否滿足進場條件。var4: 儲存滿足條件時的最低價,用於計算進場停損價格。
1
2
3
| var0 = AverageFC(Price, Length);
var1 = NumATRs * AvgTrueRange(Length);
var2 = var0 - var1;
|
計算移動平均線,並減去 ATR 的指定倍數,得到 Keltner Channel 的下通道(var2)。
1
2
3
4
5
| Condition1 = CurrentBar > 1 and Price crosses under var2;
If Condition1 Then Begin
var3 = true;
var4 = Low;
End
|
檢查價格是否向下穿越下通道(var2)。如果是,將 var3 設為 true 並將 var4 設為當前K棒的最低價。
1
2
3
4
5
| Else Begin
Condition1 = var3 and (Price > var0 or Low <= var4 - 1 point);
If Condition1 Then
var3 = false;
End;
|
如果不是突破K棒,檢查是否需要重置進場條件: 價格回漲破移動平均線,或最低價達到 var4 減 1 點(表示已成功賣空)。如果是,將 var3 重置為 false。
1
2
| If var3 Then
Sell Short ("KltChSE") next bar at var4 - 1 point stop;
|
如果 var3 為 true(滿足進場條件且未被重置),在下一根K棒以 var4(突破時的最低價)減 1 點的價格放置賣空停損單。