You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写代码:以上一根K线的SMA DOT价格作为平仓触发价

实现前一根K线SMA DOT价格实时平仓的代码方案

核心思路

  1. 计算每根K线闭合时的SMA值,固定保存前一根K线的SMA值(当前K线运行期间该值不会变化)
  2. 实时监控最新成交价格,一旦价格触及前一根K线的SMA值,立即触发平仓指令(无需等待当前K线结束)

TradingView Pine Script 示例代码

//@version=5
strategy("前K线SMA实时平仓策略", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=10000)

// 自定义SMA参数
sma_period = input.int(20, title="SMA周期")
// 计算当前K线的SMA
sma_current = ta.sma(close, sma_period)

// 保存前一根K线的SMA值:用var变量确保仅初始化一次,新K线启动时更新
var float prev_kline_sma = na
if barstate.islast
    prev_kline_sma := sma_current[1]

// 绘制前一根K线的SMA DOT(可视化验证)
plotshape(prev_kline_sma, title="前K线SMA标记", location=location.belowbar, color=color.new(color.blue, 0), style=shape.circle, size=size.small)

// ===== 示例开仓条件(可替换为你的策略逻辑)=====
long_entry = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
if (long_entry)
    strategy.entry("多单", strategy.long)

// ===== 实时平仓逻辑 =====
// 多单平仓:当前价格跌破前一根K线的SMA(触发立即平仓)
if (strategy.position_size > 0 and ta.crossunder(close, prev_kline_sma))
    strategy.close("多单")

// 空单平仓示例(若需要)
// short_entry = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if (short_entry)
//     strategy.entry("空单", strategy.short)
// if (strategy.position_size < 0 and ta.crossover(close, prev_kline_sma))
//     strategy.close("空单")

代码关键点说明

  • var float prev_kline_sma = na:通过var声明变量,确保在脚本运行期间仅初始化一次,每根新K线启动时更新为前一根K线的SMA值
  • barstate.islast:仅在新K线开始时更新前K线SMA,保证当前K线运行期间该值固定不变
  • ta.crossunder/ta.crossover:用交叉判断代替简单的价格相等,避免价格反复触发平仓指令(可根据需求调整为直接判断close <= prev_kline_sma)

MetaTrader MQL5 示例逻辑

#property strict
input int SMA_Period = 20;
double prev_kline_sma;
datetime last_bar_time = 0;

int OnInit() {
    // 初始化时获取前一根K线的SMA值
    prev_kline_sma = iMA(_Symbol, _Period, SMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
    return(INIT_SUCCEEDED);
}

void OnTick() {
    datetime current_bar_time = iTime(_Symbol, _Period, 0);
    // 新K线启动时更新前K线SMA值
    if(current_bar_time != last_bar_time) {
        prev_kline_sma = iMA(_Symbol, _Period, SMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
        last_bar_time = current_bar_time;
    }

    double current_price = Close[0];
    // 多单平仓:价格跌破前K线SMA
    if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && current_price <= prev_kline_sma) {
        PositionClose(PositionGetString(POSITION_SYMBOL));
    }
}

注意事项

  • 滑点处理:实盘交易中建议设置微小的价格偏移(比如prev_kline_sma - 2*Point),避免因滑点导致无法触发平仓
  • 多空区分:多单平仓用跌破前K线SMA,空单平仓用突破前K线SMA,需根据策略方向调整判断逻辑
  • 重复触发:若价格在SMA附近反复波动,可添加过滤条件(比如连续N个tick触及SMA再平仓)

内容的提问来源于stack exchange,提问作者MAG Fortunate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:32:35