MultiCharts | PowerLanguage語法教學 | Source Code | 訊號: Channel Trailing LX

Channel Trailing LX

這個策略在多頭持倉獲利達到一定門檻時,利用過去一定時間內的最低價作為賣出平倉的價格,以期鎖定獲利並減少損失。
通過調整 LengthFloorAmt 和 PositionBasis 等參數,交易者可以靈活適應市場條件,優化自己的交易策略。

Source Code

[IntrabarOrderGeneration = false]
inputs: Length( 3 ), FloorAmt( 1 ), PositionBasis( false ) ;
variables: var0( 0 ), var1( 0 ) ;

var0 = LowestFC( Low, Length ) ;

if PositionBasis = false then
	var1 = CurrentShares * FloorAmt 
else
	var1 = FloorAmt ;

condition1 = MarketPosition = 1 and MaxPositionProfit >= var1 ;
if condition1 then
	Sell ( "ChTrLX" ) next bar at var0 stop ;

程式碼說明

[IntrabarOrderGeneration = false]

這行確保在同一K棒內不會生成多個委託單,僅在K棒完成時才生成委託單。

inputs: Length( 3 ), FloorAmt( 1 ), PositionBasis( false ) ;

Length:用於計算最低價的過去K棒數量。
FloorAmt:達到或超過此獲利金額後才會放置委託單。
PositionBasis:允許按持倉還是按股計算獲利。設置為false 表示以股為單位計算獲利,設置為 True 表示以倉為單位計算獲利。
透過設定FloorAmtPositionBasis,可以選擇要以每股獲利或每倉獲利來當作獲利門檻。

variables: var0( 0 ), var1( 0 ) ;

var0 用於儲存過去Length個K棒中的最低價。
var1 根據PositionBasis的設定,計算出場的獲利門檻。

var0 = LowestFC( Low, Length ) ;

使用 LowestFC 函數根據指定的 Length 計算過去一段時間內的最低價。

if PositionBasis = false then
	var1 = CurrentShares * FloorAmt 
else
	var1 = FloorAmt ;

如果 PositionBasis 為 false,則 var1 的值計算為當前持有股份數量乘以 FloorAmt
如果為 true,則直接使用 FloorAmt

condition1 = MarketPosition = 1 and MaxPositionProfit >= var1 ;
if condition1 then
	Sell ( "ChTrLX" ) next bar at var0 stop ;

條件判斷是否處於多頭持倉(MarketPosition = 1)並且最大持倉獲利達到或超過 var1 設定的獲利門檻。
如果滿足,則在下一K棒以 var0(即過去最低價)作為價格送出賣出停損單。
這意味著如果市場跌到這個價格,將會觸發賣出平倉。

發佈留言