Source code for czsc.strategies

# -*- coding: utf-8 -*-
"""
author: zengbin93
email: zeng_bin8888@163.com
create_dt: 2022/5/6 13:24
describe: 提供一些策略的编写案例

以 trader_ 开头的是择时交易策略案例
"""
from czsc import signals
from czsc.objects import Freq, Operate, Signal, Factor, Event
from collections import OrderedDict
from czsc.traders import CzscAdvancedTrader
from czsc.objects import PositionLong, PositionShort, RawBar


[docs]def trader_standard(symbol, T0=False, min_interval=3600*4): """择时策略编写的一些标准说明 输入参数: 1. symbol 是必须要有的,且放在第一个位置,策略初始化过程指明交易哪个标的 2. 除此之外的一些策略层面的参数可选,比如 T0,min_interval 等 :param symbol: 择时策略初始化的必须参数,指明交易哪个标的 :param T0: :param min_interval: :return: """ pass
[docs]def trader_example1(symbol, T0=False, min_interval=3600*4): """A股市场择时策略样例,支持按交易标的独立设置参数 :param symbol: :param T0: 是否允许T0交易 :param min_interval: 最小开仓时间间隔,单位:秒 :return: """ def get_signals(cat: CzscAdvancedTrader) -> OrderedDict: s = OrderedDict({"symbol": cat.symbol, "dt": cat.end_dt, "close": cat.latest_price}) s.update(signals.pos.get_s_long01(cat, th=100)) s.update(signals.pos.get_s_long02(cat, th=100)) s.update(signals.pos.get_s_long05(cat, span='月', th=500)) for _, c in cat.kas.items(): s.update(signals.bxt.get_s_d0_bi(c)) if c.freq in [Freq.F1]: s.update(signals.other.get_s_zdt(c, di=1)) s.update(signals.other.get_s_op_time_span(c, op='开多', time_span=('13:00', '14:50'))) s.update(signals.other.get_s_op_time_span(c, op='平多', time_span=('09:35', '14:50'))) if c.freq in [Freq.F60, Freq.D, Freq.W]: s.update(signals.ta.get_s_macd(c, di=1)) return s # 定义多头持仓对象和交易事件 long_pos = PositionLong(symbol, hold_long_a=1, hold_long_b=1, hold_long_c=1, T0=T0, long_min_interval=min_interval) long_events = [ Event(name="开多", operate=Operate.LO, factors=[ Factor(name="低吸", signals_all=[ Signal("开多时间范围_13:00_14:50_是_任意_任意_0"), Signal("1分钟_倒1K_ZDT_非涨跌停_任意_任意_0"), Signal("60分钟_倒1K_MACD多空_多头_任意_任意_0"), Signal("15分钟_倒0笔_方向_向上_任意_任意_0"), Signal("15分钟_倒0笔_长度_5根K线以下_任意_任意_0"), ]), ]), Event(name="平多", operate=Operate.LE, factors=[ Factor(name="持有资金", signals_all=[ Signal("平多时间范围_09:35_14:50_是_任意_任意_0"), Signal("1分钟_倒1K_ZDT_非涨跌停_任意_任意_0"), ], signals_not=[ Signal("15分钟_倒0笔_方向_向上_任意_任意_0"), Signal("60分钟_倒1K_MACD多空_多头_任意_任意_0"), ]), ]), ] tactic = { "base_freq": '1分钟', "freqs": ['5分钟', '15分钟', '30分钟', '60分钟', '日线', '周线', '月线'], "get_signals": get_signals, "long_pos": long_pos, "long_events": long_events, # 空头策略不进行定义,也就是不做空头交易 "short_pos": None, "short_events": None, } return tactic
[docs]def trader_strategy_a(symbol): """A股市场择时策略A""" def get_signals(cat: CzscAdvancedTrader) -> OrderedDict: s = OrderedDict({"symbol": cat.symbol, "dt": cat.end_dt, "close": cat.latest_price}) s.update(signals.pos.get_s_long01(cat, th=100)) s.update(signals.pos.get_s_long02(cat, th=100)) s.update(signals.pos.get_s_long05(cat, span='月', th=500)) for _, c in cat.kas.items(): if c.freq in [Freq.F15]: s.update(signals.bxt.get_s_d0_bi(c)) s.update(signals.other.get_s_zdt(c, di=1)) s.update(signals.other.get_s_op_time_span(c, op='开多', time_span=('13:00', '14:50'))) s.update(signals.other.get_s_op_time_span(c, op='平多', time_span=('09:35', '14:50'))) if c.freq in [Freq.F60, Freq.D, Freq.W]: s.update(signals.ta.get_s_macd(c, di=1)) return s # 定义多头持仓对象和交易事件 long_pos = PositionLong(symbol, hold_long_a=1, hold_long_b=1, hold_long_c=1, T0=False, long_min_interval=3600*4) long_events = [ Event(name="开多", operate=Operate.LO, factors=[ Factor(name="低吸", signals_all=[ Signal("开多时间范围_13:00_14:50_是_任意_任意_0"), Signal("15分钟_倒1K_ZDT_非涨跌停_任意_任意_0"), Signal("60分钟_倒1K_MACD多空_多头_任意_任意_0"), Signal("15分钟_倒0笔_方向_向上_任意_任意_0"), Signal("15分钟_倒0笔_长度_5根K线以下_任意_任意_0"), ]), ]), Event(name="平多", operate=Operate.LE, factors=[ Factor(name="持有资金", signals_all=[ Signal("平多时间范围_09:35_14:50_是_任意_任意_0"), Signal("15分钟_倒1K_ZDT_非涨跌停_任意_任意_0"), ], signals_not=[ Signal("15分钟_倒0笔_方向_向上_任意_任意_0"), Signal("60分钟_倒1K_MACD多空_多头_任意_任意_0"), ]), ]), ] tactic = { "base_freq": '15分钟', "freqs": ['60分钟', '日线'], "get_signals": get_signals, "long_pos": long_pos, "long_events": long_events, # 空头策略不进行定义,也就是不做空头交易 "short_pos": None, "short_events": None, } return tactic