Keltner Channel LE
這個策略利用Keltner Channel來判斷市場的進場機會。
Keltner Channel會位於市場價格的上方(上通道)和下方(下通道),通道內的價格被認為是“正常”的。
當市場價格突破上通道時,則觸發進場,送出突破K棒的最高價再加一點的價格的買進停損單。
Source Code
[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 ;
程式碼說明
[IntrabarOrderGeneration = false]
這行確保在同一K棒內不會生成多個委託單,僅在K棒完成時才生成委託單。
inputs: Price( Close ), Length( 20 ), NumATRs( 1.5 );
Price
:被用來計算的價格,預設使用收盤價。Length
:用於計算Keltner Channel的K棒數量,預設20。NumATRs
:用於Keltner Channel計算的平均真實範圍的倍數,預設1.5。
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( false ), var4( 0 );
var0
儲存移動平均線的值。var1
計算ATR值乘以NumATRs
。var2
是移動平均線(var0
)和ATR距離(var1
)的和,確定了設定在移動平均線上方的進場點。var3
是一個布爾變數,用於跟踪是否滿足進場條件。var4
儲存滿足條件時的價格,用於進場止損價格。
var0 = AverageFC( Price, Length );
var1 = NumATRs * AvgTrueRange( Length );
var2 = var0 + var1;
這幾行計算移動平均線並從中加上ATR的指定倍數,以確定Keltner Channel的上帶(var2
)。
condition1 = CurrentBar > 1 and Price crosses over var2;
if condition1 then
begin
var3 = true;
var4 = High;
end
條件檢查價格是否向上穿越進場點(var2
)。
如果是,則將var3
設為true
並將var4
設為最高價。
else
begin
condition1 = var3 and (Price < var0 or High >= var4 + 1 point);
if condition1 then
var3 = false;
end;
這部分檢查在滿足初始條件後,價格是否回跌破移動平均線,或價格是否超過滿足條件時的最高價加1點(表示已買入成功)。
如果是,則將var3
重置為false
。
if var3 then
Buy ( "KltChLE" ) next bar at var4 + 1 point stop;
如果var3
為true
,表示滿足初始進場條件且未被重置,在下一K棒以var4
(即滿足條件時的最高價)加1點的價格放置買進停損單。