iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0

停損(Stop Loss)

停損(Stop Loss):

停損是一種風險管理策略,旨在限制投資者或交易者可能遭受的損失。這是一個事先設定的價格水平,當資產價格達到或跌破這個水平時,投資者或交易者將出售該資產。停損的主要目的是保護投資組合或交易帳戶免受大幅損失的衝擊。

停損點(Stop Loss Point):

停損點是停損策略中的具體價格水平,當市場價格達到或跌破這個點時,停損訂單將自動觸發,將資產出售。停損點通常是根據投資者的風險承受能力和交易策略而設定的。

停損價(Stop Loss Price):

停損價是指停損訂單中設定的特定價格,當市場價格達到或低於這個價格時,停損訂單將被觸發,並在市場上以最佳可用價格賣出資產。停損價通常以固定價格(例如,股價$50)或相對於進場價格的百分比或點數來表示。

  • ATR 停損:一種常見的方法是使用平均真實範圍(Average True Range,簡稱ATR)指標。
double atrValue = iATR(Symbol(), Period(), 14, 0); //獲取14期ATR值
  • 以固定價格設定停損價:
double stopLossPrice = 50.00; // 設定固定的停損價格

// 在交易操作中使用停損價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, stopLossPrice, clrNONE);
  • 以百分比設定停損價:
double stopLossPercentage = 2.0; // 設定停損百分比

// 計算停損價格
double stopLossPrice = MarketInfo(Symbol(), MODE_BID) * (1 - stopLossPercentage / 100);

// 在交易操作中使用停損價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, stopLossPrice, clrNONE);
  • 以點數設定停損價:
int stopLossPoints = 30; // 設定停損點數

// 計算停損價格
double stopLossPrice = MarketInfo(Symbol(), MODE_BID) - stopLossPoints * MarketInfo(Symbol(), MODE_POINT);

// 在交易操作中使用停損價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, stopLossPrice, clrNONE);

停利、停利價(Take Profit)

停利(Take Profit):

停利是一種交易策略,旨在確保當資產價格達到或超過預定水平時,投資者或交易者能夠出售該資產以實現獲利。停利的主要目的是確保投資者不會錯失有利的價格機會,並鎖定已實現的獲利。

停利點(Take Profit Point):

停利點是停利策略中的具體價格水平,當市場價格達到或超過這個點時,停利訂單將自動觸發,資產將被出售以實現獲利。停利點通常根據投資者的目標獲利水平和交易策略來設定。

停利價(Take Profit Price):

停利價是指停利訂單中設定的特定價格,當市場價格達到或超過這個價格時,停利訂單將被觸發,並在市場上以最佳可用價格出售資產。停利價通常以固定價格(例如,股價$60)或相對於進場價格的百分比或點數來表示。

  • 以固定價格設定停利價:
double takeProfitPrice = 60.00; // 設定固定的停利價格

// 在交易操作中使用停利價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, 0, takeProfitPrice, clrNONE);
  • 以百分比設定停利價:
double takeProfitPercentage = 2.0; // 設定停利百分比

// 計算停利價格
double takeProfitPrice = MarketInfo(Symbol(), MODE_BID) * (1 + takeProfitPercentage / 100);

// 在交易操作中使用停利價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, 0, takeProfitPrice, clrNONE);
  • 以點數設定停利價:
int takeProfitPoints = 30; // 設定停利點數

// 計算停利價格
double takeProfitPrice = MarketInfo(Symbol(), MODE_BID) + takeProfitPoints * MarketInfo(Symbol(), MODE_POINT);

// 在交易操作中使用停利價格
OrderSend(Symbol(), OP_BUY, 1, Ask, 2, 0, 0, "", 0, clrNONE, 0, takeProfitPrice, clrNONE);

停損水準

停損水準(Stop Loss Level)指的是一個預先設定的價格水平,當資產的市場價格下跌到或跌破這個水準時,投資者或交易者將出售該資產,以限制損失。停損水準的主要目的是控制風險,保護投資組合或交易帳戶免受不利價格變動的影響。

與停損價差異:

停損水準通常是一個相對於當前市場價格的價格水平,通常以固定點數、百分比或技術指標等方式來表示。
停損價則是具體的價格數值,它表示當市場價格達到或跌破該價格時,投資者或交易者將出售資產以限制損失。

  • 多重停損水準:投資者可以設定多個不同的停損水準,每個水準對應不同的價格水平,以便在不同的情況下採取不同的風險管理策略。
double stopLossLevel1 = 1.2000;
double stopLossLevel2 = 1.1950;

if (Bid <= stopLossLevel1) {
    // 執行第一個停損水準的操作
    OrderSend(Symbol(), OP_SELL, 1, Bid, 2, 0, 0, "", 0, clrNONE, stopLossLevel1, clrNONE);
} else if (Bid <= stopLossLevel2) {
    // 執行第二個停損水準的操作
    OrderSend(Symbol(), OP_SELL, 1, Bid, 2, 0, 0, "", 0, clrNONE, stopLossLevel2, clrNONE);
} 
  • 追蹤停損:追蹤停損是一種動態停損策略,當市場價格朝著有利方向移動時,停損價也相應地上升,以保護實現的利潤。這可以實現更大的獲利潛力,同時控制風險。這個部分之後會再寫篇文章分享,這邊就不舉例了。

  • 條件性停損:投資者可以設置條件性停損,這意味著停損價的設置取決於特定的市場條件或指標。例如,你可以設定當市場波動性增加到一定程度時,停損水準自動調整。

input double volatilityThreshold = 0.005; // 波動性閾值
input double stopLossDistance = 20.0; // 停損的點數距離

double previousLow = 0.0; // 上一根K線的最低價格
double currentLow = 0.0; // 當前K線的最低價格
double stopLossPrice = 0.0; // 停損價格

// 獲取上一根K線的最低價格
if (iLow(Symbol(), 0, 1) > 0) {
    previousLow = iLow(Symbol(), 0, 1);
}

// 獲取當前K線的最低價格
currentLow = iLow(Symbol(), 0, 0);

// 檢查市場波動性是否高於閾值
if (currentLow < previousLow - volatilityThreshold) {
    // 設定條件性停損價格
    stopLossPrice = currentLow - stopLossDistance * MarketInfo(Symbol(), MODE_POINT);

    // 執行停損訂單
    OrderSend(Symbol(), OP_SELL, 1, Bid, 2, 0, 0, "", 0, clrNONE, stopLossPrice, clrNONE);
}

動態止損

動態止損(Dynamic Stop Loss)是一種停損策略,其停損價格會隨著市場價格的變動而自動調整,以保護實現的利潤。這種策略通常根據市場的走勢和特定的條件來調整停損價格。

input int period = 14; // 移動平均線的週期
input double multiplier = 2.0; // 乘數,用於計算停損價格

double dynamicStopLoss = 0.0; // 動態止損價格

// 計算移動平均線
double ma = iMA(Symbol(), 0, period, 0, MODE_SMA, PRICE_CLOSE, 0);

// 計算動態止損價格
dynamicStopLoss = ma - multiplier * MarketInfo(Symbol(), MODE_POINT);

// 檢查是否需要調整止損價格
if (Bid < dynamicStopLoss) {
    // 執行停損訂單
    OrderSend(Symbol(), OP_SELL, 1, Bid, 2, 0, 0, "", 0, clrNONE, dynamicStopLoss, clrNONE);
}

上一篇
DAY19 建立下單類型與除錯(下)
下一篇
DAY21 修改與平倉
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言