持倉資訊#

PowerLanguage 提供了一些內建函數,幫助獲取倉位狀態進場價格出場價格未實現和已實現獲利等持倉資訊。

利用持倉資訊開倉和平倉#

持倉資訊和均線(SMA)的交叉開倉或平倉。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Inputs: fastLength(10), slowLength(20);
Variables: fastSMA(0), slowSMA(0);

fastSMA = Average(Close, fastLength);
slowSMA = Average(Close, slowLength);

// 開倉條件
If MarketPosition = 0 and fastSMA crosses above slowSMA Then
  Buy ("Long Entry") next bar at market;

// 平倉條件
If MarketPosition = 1 and fastSMA crosses below slowSMA Then
  Sell ("Exit Long") next bar at market;

持倉資訊和獲利的盈虧平倉。

1
2
3
4
5
6
7
// 如果持倉盈利超過 500 點,則平倉
If MarketPosition = 1 and (Close - EntryPrice) * BigPointValue > 500 Then
  Sell ("Profit Exit") next bar at market;

// 如果持倉虧損超過 300 點,則平倉
If MarketPosition = 1 and (EntryPrice - Close) * BigPointValue > 300 Then
  Sell ("Stop Loss") next bar at market;

顯示持倉資訊在圖表上#

下面程式碼使用文字繪製,在圖表上產生上一次平倉的持倉資訊(獲利、入場價格、出場價格)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Variables: MP(0);

MP = MarketPosition * CurrentContracts;

If MP = 0 and MP[1] <> 0 Then Begin
  Value1 = Text_New(Date, Time, High, "");
  Text_SetString(Value1,
    "+$" + NumToStr(PositionProfit(1), 3) + NewLine
    + "EntryPrice: " + NumToStr(EntryPrice(1), 3) + NewLine
    + "ExitPrice: " + NumToStr(ExitPrice(1), 3) + NewLine
    + "PositionProfit: " + NumToStr(PositionProfit(1), 3) + NewLine
    + "OpenPositionProfit: " + NumToStr(OpenPositionProfit, 3)
  );
  Text_SetStyle(Value1, 2, 1);
  Text_SetColor(Value1, RGB(232, 232, 0));
  Text_SetFontName(Value1, "Showcard Gothic");
  Text_SetSize(Value1, 14);
  Text_SetAttribute(Value1, 1, true);
  Text_SetBorder(Value1, true);
  Text_SetLocation(Value1, Date, Time, High + 200);
End;

上面的程式碼將產生類似下面的輸出:

常用的持倉函數#

倉位狀態#

MarketPosition(PosBack)#

回傳指定持倉的狀態。只能在訊號腳本中使用,在指標中應使用 i_MarketPosition。如果要獲取持倉的大小,要使用 CurrentContractsCurrentShares

項目說明
PosBack0 或未指定: 當前持倉。1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
回傳值1: 多頭持倉。-1: 空頭持倉。0: 無持倉

CurrentContracts#

回傳當前持倉的合約數量,為絕對值,沒有正負號。如果想要獲取帶正負號的持倉數量,將 CurrentContractsMarketPosition 的值相乘。只能在訊號腳本中使用,在指標中應使用 i_CurrentContracts

1
2
3
// 回傳 -9,如果策略持有 9 個空頭合約
// 回傳 4,如果策略持有 4 個多頭合約
MarketPosition(0) * CurrentContracts;

進場價格#

EntryPrice(PosBack)#

回傳指定持倉的進場(開倉)價格。只能在訊號腳本中使用。

項目說明
PosBack0 或未指定: 當前持倉。1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
回傳值指定持倉的進場(開倉)價格

PosTradeEntryPrice(PosAgo, TradeNumber)#

回傳指定交易的入場價格。只能在訊號腳本中使用。

項目說明
PosAgo0 或未指定: 當前持倉。1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
TradeNumber持倉的第 TradeNumber 筆交易,0 為第一筆(開倉),依此類推
回傳值指定交易的入場價格
1
2
// 回傳當前持倉,第二次交易的入場價格
PosTradeEntryPrice(0, 1);

出場價格#

ExitPrice(PosBack)#

回傳指定持倉的出場(平倉)價格。只能在訊號腳本中使用。

項目說明
PosBack1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
回傳值指定持倉的出場(平倉)價格

PosTradeExitPrice(PosAgo, TradeNumber)#

回傳指定交易的出場價格。只能在訊號腳本中使用。

項目說明
PosAgo0 或未指定: 當前持倉。1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
TradeNumber持倉的第 TradeNumber 筆交易,0 為第一筆(開倉),依此類推
回傳值指定交易的出場價格
1
2
// 回傳當前持倉,第二次交易的出場價格
PosTradeExitPrice(0, 1);

未實現和已實現獲利#

OpenPositionProfit#

回傳當前持倉的未實現損益。只能在訊號腳本中使用。

PositionProfit(PosBack)#

回傳指定持倉的已實現損益。如果持倉只有部分平倉,回傳已實現的部分損益。只能在訊號腳本中使用。

項目說明
PosBack0 或未指定: 當前持倉。1: 上一次平倉的持倉。2: 再上一次平倉的持倉,依此類推
回傳值指定持倉的已實現損益
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 獲取上一次平倉持倉的損益,如果虧損 $5 則回傳 -5
Value1 = PositionProfit(1);

// 如果持倉還在開放中且沒有部分平倉,回傳 0
Value2 = PositionProfit(0);

// 如果持倉部分平倉並實現了 $5 的利潤,回傳 5
Value3 = PositionProfit(0);

// 如果沒有開倉,回傳 0
Value4 = PositionProfit(0);

Reference#

https://www.multicharts.com/trading-software/index.php?title=Category:Strategy_Position

https://www.multicharts.com/trading-software/index.php?title=Category:Strategy_Position_Trades

© 2026 CodeReindeer. All rights reserved.