封装SL/TP价格计算函数
为了将 SL/TP 的计算逻辑与验证逻辑分离,并提高代码复用性,我们可以创建专门的函数来根据开仓价和用户指定的点数 (pips) 计算出目标的 SL 或 TP 价格。
函数设计要点:
- 输入: 函数接收交易品种 (argSymbol,用于调用PipPoint)、SL 或 TP 的点数 (argStopLossPips或argTakeProfitPips) 以及计算的基准价格 (argOpenPrice)。
- 输出: 函数返回计算出的 SL 或 TP 的价格 (double类型)。如果输入的点数为 0 或无效,则返回 0。
- 职责: 这些函数只负责计算价格,不包含任何对 MODE_STOPLEVEL(最小停止级别)的验证。价格验证应在调用完计算函数之后,由另一组专门的验证函数或逻辑来完成。
计算买单止损价格 (CalcBuyStopLoss)
/**
 * @brief 根据开仓价和止损点数计算买单的止损价格。
 * @param argSymbol         交易品种 (用于 PipPoint 计算)
 * @param argStopLossPips   止损距离 (单位: pips)
 * @param argOpenPrice      计算基准的开仓价格 (市价单用 Ask, 挂单用挂单价)
 * @return double           计算出的止损价格;如果 argStopLossPips <= 0,返回 0.0
 */
double CalcBuyStopLoss(string argSymbol, int argStopLossPips, double argOpenPrice)
{
    // 如果用户未设置止损点数 (<=0),则直接返回 0
    if (argStopLossPips <= 0) return(0.0);
    // 计算 1 pip 的价格值 (需要 PipPoint 函数,假设已定义)
    double onePipValue = PipPoint(argSymbol);
    if (onePipValue <= 0) return(0.0); // PipPoint 计算失败则返回 0
    // 计算止损价格 = 开仓价 - (止损点数 * 每 pip 的价值)
    double stopLossPrice = argOpenPrice - (argStopLossPips * onePipValue);
    // 注意:本函数不进行价格规范化和 StopLevel 验证
    return(stopLossPrice);
}
- 解释: 函数首先检查传入的止损点数 argStopLossPips是否有效(>0)。如果无效,返回 0 表示不设止损。否则,它调用PipPoint()获取 1 pip 的价值,然后从开仓价argOpenPrice中减去argStopLossPips个 pips 对应的价格距离,得到初步的止损价格并返回。
计算买单止盈价格 (CalcBuyTakeProfit)
/**
 * @brief 根据开仓价和止盈点数计算买单的止盈价格。
 * @param argSymbol         交易品种 (用于 PipPoint 计算)
 * @param argTakeProfitPips 止盈距离 (单位: pips)
 * @param argOpenPrice      计算基准的开仓价格 (市价单用 Ask, 挂单用挂单价)
 * @return double           计算出的止盈价格;如果 argTakeProfitPips <= 0,返回 0.0
 */
double CalcBuyTakeProfit(string argSymbol, int argTakeProfitPips, double argOpenPrice)
{
    // 如果用户未设置止盈点数 (<=0),则直接返回 0
    if (argTakeProfitPips <= 0) return(0.0);
    // 计算 1 pip 的价格值 (需要 PipPoint 函数)
    double onePipValue = PipPoint(argSymbol);
    if (onePipValue <= 0) return(0.0); // PipPoint 计算失败
    // 计算止盈价格 = 开仓价 + (止盈点数 * 每 pip 的价值)
    double takeProfitPrice = argOpenPrice + (argTakeProfitPips * onePipValue);
    // 注意:本函数不进行价格规范化和 StopLevel 验证
    return(takeProfitPrice);
}
- 解释: 逻辑与 CalcBuyStopLoss非常相似,只是将减法改为了加法来计算止盈价格。
卖单的 SL/TP 计算函数: 计算卖单止损 (CalcSellStopLoss) 和卖单止盈 (CalcSellTakeProfit) 的函数与上述类似,只是加减方向相反:
- CalcSellStopLoss类似于- CalcBuyTakeProfit(开仓价 加 pips 距离)。
- CalcSellTakeProfit类似于- CalcBuyStopLoss(开仓价 减 pips 距离)。 这些函数的具体代码可以在原文的附录 D 中找到。
通过将纯粹的价格计算逻辑封装起来,使得代码更加清晰,并且可以在计算之后、下单之前,插入独立的、更复杂的价格验证和调整逻辑。
 
			


