MultiCharts | PowerLanguage語法教學 | Source Code | 訊號: Keltner Channel LE

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;

如果var3true,表示滿足初始進場條件且未被重置,在下一K棒以var4(即滿足條件時的最高價)加1點的價格放置買進停損單。

發佈留言