Chatgpt帮助你写几个python策略(vn.py)

松鼠Quant
2024-06-24
图片
量化策略开发,高质量社群,交易思路分享等相关内容



『正文』

ˇ

图片

我试了一下,chatgpt能快速帮你写几个vn.py的策略,策略写的还不错。是一个不错的效率工作哦,我让它写了几个策略大家试一下吧。


策略示例一:均线策略

这是一个简单的均线交叉策略,当短期均线(如5日均线)上穿长期均线(如20日均线)时,买入;当短期均线下穿长期均线时,卖出。


































































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classMovingAverageCrossStrategy(CtaTemplate):""""""
    fast_window = 5    slow_window = 20    lot = 1
    parameters = ["fast_window", "slow_window", "lot"]    variables = ["fast_ma", "slow_ma"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, self.slow_window)ifnot am.inited:return
        self.fast_ma = am.sma(self.fast_window)        self.slow_ma = am.sma(self.slow_window)
if self.fast_ma > self.slow_ma:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)elif self.pos < 0:                self.cover(bar.close_price + 5, self.lot)                self.buy(bar.close_price + 5, self.lot)
elif self.fast_ma < self.slow_ma:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)elif self.pos > 0:                self.sell(bar.close_price - 5, self.lot)                self.short(bar.close_price - 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """        pass

策略示例二:布林带策略

布林带策略利用价格在布林带通道中的位置进行交易决策。当价格触及布林带的下轨时做多,触及上轨时做空。


































































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classBollingerBandsStrategy(CtaTemplate):""""""
    boll_window = 20    boll_dev = 2.0    lot = 1
    parameters = ["boll_window", "boll_dev", "lot"]    variables = ["boll_up", "boll_down", "boll_mid"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, self.boll_window)ifnot am.inited:return
        self.boll_up, self.boll_mid, self.boll_down = am.boll(self.boll_window, self.boll_dev)
if bar.close_price > self.boll_up:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)elif self.pos > 0:                self.sell(bar.close_price - 5, self.lot)                self.short(bar.close_price - 5, self.lot)
elif bar.close_price < self.boll_down:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)elif self.pos < 0:                self.cover(bar.close_price + 5, self.lot)                self.buy(bar.close_price + 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例三:动量策略

动量策略基于价格在一段时间内的变化率进行交易,如过去N天的收益率高于一定阈值则做多,低于阈值则做空。




























































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classMomentumStrategy(CtaTemplate):""""""
    momentum_window = 5    threshold = 0.02    lot = 1
    parameters = ["momentum_window", "threshold", "lot"]    variables = []
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, self.momentum_window)ifnot am.inited:return
        returns = am.close[-1] / am.close[0] - 1
if returns > self.threshold:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
elif returns < -self.threshold:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例四:RSI策略

RSI(相对强弱指数)策略基于价格的超买和超卖情况进行交易决策。当RSI超过70时卖出(做空),低于30时买入(做多)。





























































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classRsiStrategy(CtaTemplate):""""""
    rsi_window = 14    rsi_buy = 30    rsi_sell = 70    lot = 1
    parameters = ["rsi_window", "rsi_buy", "rsi_sell", "lot"]    variables = ["rsi_value"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, self.rsi_window)ifnot am.inited:return
        self.rsi_value = am.rsi(self.rsi_window)
if self.rsi_value >= self.rsi_sell:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
elif self.rsi_value <= self.rsi_buy:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例五:MACD策略

MACD(移动平均收敛差异)策略基于MACD线和信号线的交叉情况进行交易决策。当MACD线上穿信号线时买入,下穿信号线时卖出。





























































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classMacdStrategy(CtaTemplate):""""""
    fast_length = 12    slow_length = 26    signal_smoothing = 9    lot = 1
    parameters = ["fast_length", "slow_length", "signal_smoothing", "lot"]    variables = ["macd", "signal", "hist"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, max(self.fast_length, self.slow_length, self.signal_smoothing))ifnot am.inited:return
        self.macd, self.signal, self.hist = am.macd(self.fast_length, self.slow_length, self.signal_smoothing)
if self.macd[-1] > self.signal[-1] and self.macd[-2] <= self.signal[-2]:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
elif self.macd[-1] < self.signal[-1] and self.macd[-2] >= self.signal[-2]:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例六:均值回归策略

均值回归策略尝试利用价格的波动在一定范围内的回归特性进行交易,假设价格趋向于某个均值水平。





























































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classMeanReversionStrategy(CtaTemplate):""""""
    mean_window = 20    std_threshold = 2.0    lot = 1
    parameters = ["mean_window", "std_threshold", "lot"]    variables = ["mean", "std"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, self.mean_window)ifnot am.inited:return
        self.mean = am.close[-self.mean_window:].mean()        self.std = am.close[-self.mean_window:].std()
if bar.close_price > self.mean + self.std_threshold * self.std:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
elif bar.close_price < self.mean - self.std_threshold * self.std:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例七:综合技术指标策略

这个策略结合了移动平均线、布林带和相对强弱指数(RSI),根据这些指标的交叉和超买超卖情况进行交易决策。















































































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classComplexStrategy(CtaTemplate):""""""
    fast_ma_period = 20    slow_ma_period = 50    bollinger_window = 20    bollinger_dev = 2.0    rsi_period = 14    rsi_buy = 30    rsi_sell = 70    lot = 1
    parameters = ["fast_ma_period", "slow_ma_period","bollinger_window", "bollinger_dev","rsi_period", "rsi_buy", "rsi_sell","lot"    ]    variables = ["fast_ma", "slow_ma", "rsi_value", "boll_up", "boll_down"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, max(self.fast_ma_period, self.slow_ma_period, self.bollinger_window, self.rsi_period))ifnot am.inited:return
# 计算移动平均线        self.fast_ma = am.sma(self.fast_ma_period)        self.slow_ma = am.sma(self.slow_ma_period)
# 计算布林带        self.boll_up, _, self.boll_down = am.boll(self.bollinger_window, self.bollinger_dev)
# 计算RSI        self.rsi_value = am.rsi(self.rsi_period)
# 策略逻辑if self.fast_ma > self.slow_ma and bar.close_price > self.boll_up and self.rsi_value > self.rsi_sell:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
elif self.fast_ma < self.slow_ma and bar.close_price < self.boll_down and self.rsi_value < self.rsi_buy:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


策略示例八:结合跟踪止盈止损的趋势反转策略

这个策略结合了EMA(指数移动平均)、ATR(平均真实波动范围)和动态调整的止盈止损功能,以捕捉市场趋势反转并有效管理风险。





















































































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classComplexWithTrailingStopStrategy(CtaTemplate):""""""
    fast_ema_period = 10    slow_ema_period = 50    atr_period = 14    atr_multiplier = 2.0    trailing_stop = 2.0    lot = 1
    parameters = ["fast_ema_period", "slow_ema_period","atr_period", "atr_multiplier", "trailing_stop","lot"    ]    variables = ["fast_ema", "slow_ema", "atr_value", "atr_stop"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """        am = self.cta_engine.get_ama(self.vt_symbol, Interval.MINUTE, max(self.fast_ema_period, self.slow_ema_period, self.atr_period))ifnot am.inited:return
# 计算EMA        self.fast_ema = am.ema(self.fast_ema_period)        self.slow_ema = am.ema(self.slow_ema_period)
# 计算ATR        self.atr_value = am.atr(self.atr_period)        self.atr_stop = self.atr_value * self.atr_multiplier
# 策略逻辑if self.fast_ema[-1] > self.slow_ema[-1] and bar.close_price > self.fast_ema[-1]:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)                self.atr_long = bar.close_price - self.atr_stop
elif self.fast_ema[-1] < self.slow_ema[-1] and bar.close_price < self.fast_ema[-1]:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)                self.atr_short = bar.close_price + self.atr_stop
# 跟踪止盈止损if self.pos > 0:            self.atr_long = max(self.atr_long, bar.high_price - self.atr_stop)            self.sell(self.atr_long, abs(self.pos), stop=True)
elif self.pos < 0:            self.atr_short = min(self.atr_short, bar.low_price + self.atr_stop)            self.cover(self.atr_short, abs(self.pos), stop=True)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


跨周期交易策略示例:日线和小时线结合策略

这个策略将同时分析日线和小时线数据,通过日线确定长期趋势,通过小时线确认进入点位和时机。


















































































from vnpy.app.cta_strategy import CtaTemplatefrom vnpy.trader.constant import Interval
classCrossPeriodStrategy(CtaTemplate):""""""
    daily_ma_period = 50    hourly_ma_period = 20    lot = 1
    parameters = ["daily_ma_period", "hourly_ma_period", "lot"]    variables = ["daily_ma", "hourly_ma"]
def__init__(self, cta_engine, strategy_name, vt_symbol, setting):""""""        super().__init__(cta_engine, strategy_name, vt_symbol, setting)
defon_init(self):"""        初始化策略        """        self.cta_engine.init_strategy(self)
defon_bar(self, bar):"""        K线数据更新        """if bar.interval == Interval.DAILY:            self.on_daily_bar(bar)elif bar.interval == Interval.HOUR:            self.on_hourly_bar(bar)
defon_daily_bar(self, bar):"""        日线数据更新        """        am_daily = self.cta_engine.get_ama(self.vt_symbol, Interval.DAILY, self.daily_ma_period)ifnot am_daily.inited:return
        self.daily_ma = am_daily.sma(self.daily_ma_period)
defon_hourly_bar(self, bar):"""        小时线数据更新        """        am_hourly = self.cta_engine.get_ama(self.vt_symbol, Interval.HOUR, self.hourly_ma_period)ifnot am_hourly.inited:return
        self.hourly_ma = am_hourly.sma(self.hourly_ma_period)
# 策略逻辑if self.daily_ma[-1] > self.daily_ma[-2] and self.hourly_ma[-1] > self.hourly_ma[-2]:ifnot self.pos:                self.buy(bar.close_price + 5, self.lot)
elif self.daily_ma[-1] < self.daily_ma[-2] and self.hourly_ma[-1] < self.hourly_ma[-2]:ifnot self.pos:                self.short(bar.close_price - 5, self.lot)
defon_order(self, order):"""        报单状态更新        """pass
defon_trade(self, trade):"""        成交信息更新        """pass
defon_stop_order(self, stop_order):"""        止损单状态更新        """pass


欢迎加入2024松鼠俱乐部,获得量化需要的策略源码,培训视频,行情数据。

1.原创策略源码,每月至少1期新策略源码。

2.专属数据库(国内商品数据每日更新)

3.个性化工具类-波动率跟踪

4.松鼠分享会(培训视频每月1期)

图片

本策略仅作学习交流使用,实盘交易盈亏投资者个人负责,内容受原创保护,未经授权禁止转发、倒卖策略源码。


分享