Keltner Channel LE#
這個策略利用 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 over var2;
If Condition1 Then Begin
var3 = true;
var4 = High;
End
Else Begin
Condition1 = var3 and (Price < var0 or High >= var4 + 1 point);
If Condition1 Then
var3 = false;
End;
If var3 Then
Buy ("KltChLE") 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 over var2;
If Condition1 Then Begin
var3 = true;
var4 = High;
End
|
檢查價格是否向上穿越上通道(var2)。如果是,將 var3 設為 true 並將 var4 設為當前K棒的最高價。
1
2
3
4
5
| Else Begin
Condition1 = var3 and (Price < var0 or High >= var4 + 1 point);
If Condition1 Then
var3 = false;
End;
|
如果不是突破K棒,檢查是否需要重置進場條件: 價格回跌破移動平均線,或最高價達到 var4 加 1 點(表示已成功買入)。如果是,將 var3 重置為 false。
1
2
| If var3 Then
Buy ("KltChLE") next bar at var4 + 1 point stop;
|
如果 var3 為 true(滿足進場條件且未被重置),在下一根K棒以 var4(突破時的最高價)加 1 點的價格放置買入停損單。