settleOrderPnl.mjs

/**
 * 計算單筆訂單之淨盈虧金額(USDT)
 *
 * 結算公式與calcOrders逐字對齊(bit-exact): long為uTrade*(priceEnd/priceStart)-uTrade-2*uFee,short為(priceStart-priceEnd)*(uTrade/priceStart)-2*uFee
 * 供loadKLinesTpSl之ordersFromBars與buildStrategyFastSession共用,避免套件內出現第三份手抄公式
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-trade-backtest/blob/master/test/unit-WTradeBacktest.test.mjs Github}
 * @function
 * @param {String} mode 輸入交易方向字串,'long'或'short'
 * @param {Number} uTrade 輸入下單金額(USDT)
 * @param {Number} priceStart 輸入進場價格
 * @param {Number} priceEnd 輸入出場價格
 * @param {Number} uFee 輸入單邊手續費(USDT),結算扣2*uFee
 * @returns {Number} 回傳淨盈虧金額(USDT),含手續費
 * @example
 *
 * console.log(settleOrderPnl('long', 100, 100, 105, 0.05))
 * // => 4.9
 *
 */
let settleOrderPnl = (mode, uTrade, priceStart, priceEnd, uFee) => {
    return mode === 'long'
        ? uTrade * (priceEnd / priceStart) - uTrade - 2 * uFee
        : (priceStart - priceEnd) * (uTrade / priceStart) - 2 * uFee
}


export default settleOrderPnl