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

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 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 ;

程式碼說明

[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 under var2;
if condition1 then
	begin
	var3 = true;
	var4 = Low;
	end

條件檢查價格是否向下穿越進場點(var2)。
如果是,則將var3設為true並將var4設為最高價。

else
begin 
	condition1 = var3 and ( Price > var0 or Low <= var4 - 1 point ) ;
	if condition1 then
		var3 = false ;
end;

這部分檢查在滿足初始條件後,價格是否回漲破移動平均線,或價格是否超過滿足條件時的最低價減1點(表示已賣空成功)。
如果是,則將var3重置為false

if var3 then 
	Sell Short ( "KltChSE" ) next bar at var4 - 1 point stop ;

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

發佈留言