hikyuu2/docs/source/trade_sys/system.rst

257 lines
9.0 KiB
ReStructuredText
Raw Normal View History

2019-02-17 16:10:03 +08:00
.. py:currentmodule:: hikyuu.trade_sys
2021-02-07 22:29:53 +08:00
.. highlight:: python
2019-02-17 16:10:03 +08:00
2024-09-24 17:37:31 +08:00
系统策略
2019-02-17 16:10:03 +08:00
=============
2022-01-19 00:22:40 +08:00
系统是指针对单个交易对象的完整策略,包括环境判断、系统有效条件、资金管理、止损、止盈、盈利目标、移滑价差的完整策略,用于模拟回测。
2019-02-17 16:10:03 +08:00
2024-09-24 16:45:27 +08:00
对于多目标,在 Hikyuu 中需要使用投资组合,参见::ref:`portfolio`
2019-02-17 16:10:03 +08:00
公共参数:
* **buy_delay=True** *(bool)* : 买入操作是否延迟到下一个bar开盘时进行交易
* **sell_delay=True** *(bool)* : 卖出操作是否延迟到下一个bar开盘时进行交易
2019-02-17 16:10:03 +08:00
* **delay_use_current_price=True** *(bool)* : 延迟操作的情况下是使用当前交易时bar的价格计算新的止损价/止赢价/目标价还是使用上次计算的结果
* **max_delay_count=3** *(int)* : 连续延迟交易请求的限制次数应大于等于00表示只允许延迟1次
* **tp_monotonic=True** *(bool)* : 止赢单调递增
* **tp_delay_n=3** *(int)* : 止盈延迟开始的天数,即止盈策略判断从实际交易几天后开始生效
* **ignore_sell_sg=False** *(bool)* : 忽略卖出信号,只使用止损/止赢等其他方式卖出
* **ev_open_position=False** *(bool)*: 是否使用市场环境判定进行初始建仓
* **cn_open_position=False** *(bool)*: 是否使用系统有效性条件进行初始建仓
* **shared_tm=False** *(bool)*: tm 部件是否为共享部件
* **shared_ev=True** *(bool)*: ev 部件是否为共享部件
* **shared_cn=False** *(bool)*: cv 部件是否为共享部件
* **shared_mm=False** *(bool)*: mm 部件是否为共享部件
* **shared_sg=False** *(bool)*: sg 部件是否为共享部件
* **shared_st=False** *(bool)*: st 部件是否为共享部件
* **shared_tp=False** *(bool)*: tp 部件是否为共享部件
* **shared_pg=False** *(bool)*: pg 部件是否为共享部件
* **shared_sp=False** *(bool)*: sp 部件是否为共享部件
2019-02-17 16:10:03 +08:00
创建系统并执行回测
-----------------------
.. py:function:: SYS_Simple([tm=None, mm=None, ev=None, cn=None, sg=None, st=None, tp=None, pg=None, sp=None])
创建简单系统实例(每次交易不进行多次加仓或减仓,即每次买入后在卖出时全部卖出), 系统实例在运行时(调用run方法至少需要一个配套的交易管理实例、一个资金管理策略
和一个信号指示器可以在创建系统实例后进行指定。如果出现调用run时没有任何输出
且没有正确结果的时候可能是未设置tm、sg、mm。进行回测时使用 run 方法,如::
#创建模拟交易账户进行回测初始资金30万
2021-11-18 22:44:01 +08:00
my_tm = crtTM(init_cash = 300000)
2019-02-17 16:10:03 +08:00
2022-01-17 22:51:34 +08:00
#创建信号指示器以5日EMA为快线5日EMA自身的10日EMA作为慢线快线向上穿越慢线时买入反之卖出
my_sg = SG_Flex(EMA(CLOSE(), n=5), slow_n=10)
2019-02-17 16:10:03 +08:00
#固定每次买入1000股
my_mm = MM_FixedCount(1000)
#创建交易系统并运行
sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm)
sys.run(sm['sz000001'], Query(-150))
:param TradeManager tm: 交易管理实例
:param MoneyManager mm: 资金管理策略
:param EnvironmentBase ev: 市场环境判断策略
:param ConditionBase cn: 系统有效条件
:param SignalBase sg: 信号指示器
:param StoplossBase st: 止损策略
:param StoplossBase tp: 止盈策略
:param ProfitGoalBase pg: 盈利目标策略
:param SlippageBase sp: 移滑价差算法
:return: system实例
系统部件枚举定义
------------------
.. py:class:: System.Part
系统部件枚举值,系统的买入/卖出等操作可由这些部件触发,用于标识实际交易指令的来源,参见::py:class:`TradeRecord`
实际使用中,可使用 System.ENVIRONMENT 的简化方式 代替 System.Part.ENVIRONMENT其他与此类似。
- System.Part.ENVIRONMENT - 市场环境判断策略
- System.Part.CONDITION - 系统有效条件
- System.Part.SIGNAL - 信号指示器
- System.Part.STOPLOSS - 止损策略
- System.Part.TAKEPROFIT - 止盈策略
- System.Part.MONEYMANAGER - 资金管理策略
- System.Part.PROFITGOAL - 盈利目标策略
- System.Part.SLIPPAGE - 移滑价差算法
- System.Part.INVALID - 无效值边界,大于等于该值时为无效部件
2020-07-17 00:26:03 +08:00
.. py:function:: get_system_part_name(part)
2019-02-17 16:10:03 +08:00
获取部件的字符串名称
- System.Part.ENVIRONMENT - "EV"
- System.Part.CONDITION - "CN"
- System.Part.SIGNAL - "SG"
- System.Part.STOPLOSS - "ST"
- System.Part.TAKEPROFIT - "TP"
- System.Part.MONEYMANAGER - "MM"
- System.Part.PROFITGOAL - "PG"
- System.Part.SLIPPAGE - "SP"
- System.Part.INVALID - "--"
:param int part: System.Part 枚举值
:rtype: str
2020-07-17 00:26:03 +08:00
.. py:function:: get_system_part_enum(part_name)
2019-02-17 16:10:03 +08:00
根据系统部件的字符串名称获取相应的枚举值
:param str part_name: 系统部件的字符串名称,参见::py:func:`getSystemPartName`
:rtype: System.Part
系统基类定义
-------------
.. py:class:: System
系统基类。需要扩展或实现更复杂的系统交易行为,可从此类继承。
.. py:attribute:: name
系统名称
.. py:attribute:: tm
关联的交易管理实例
.. py:attribute:: mm
资金管理策略
.. py:attribute:: ev
市场环境判断策略
.. py:attribute:: cn
系统有效条件
.. py:attribute:: sg
信号指示器
.. py:attribute:: st
止损策略
.. py:attribute:: tp
止盈策略
.. py:attribute:: pg
盈利目标策略
.. py:attribute:: sp
移滑价差算法
2020-07-15 00:23:48 +08:00
.. py:method:: get_param(self, name)
2019-02-17 16:10:03 +08:00
获取指定的参数
:param str name: 参数名称
:return: 参数值
:raises out_of_range: 无此参数
2020-07-15 00:23:48 +08:00
.. py:method:: set_param(self, name, value)
2019-02-17 16:10:03 +08:00
设置参数
:param str name: 参数名称
:param value: 参数值
:type value: int | bool | float | string
:raises logic_error: Unsupported type! 不支持的参数类型
2020-07-15 00:23:48 +08:00
.. py:method:: get_stock(self)
2019-02-17 16:10:03 +08:00
获取关联的证券
:rtype: Stock
2020-07-15 00:23:48 +08:00
.. py:method:: get_trade_record_list(self)
2019-02-17 16:10:03 +08:00
获取实际执行的交易记录,和 TM 的区别是不包含权息调整带来的交易记录
2019-02-17 16:10:03 +08:00
:rtype: TradeRecordList
2020-07-15 00:23:48 +08:00
.. py:method:: get_buy_trade_request(self)
2019-02-17 16:10:03 +08:00
获取买入请求“delay”模式下查看下一时刻是否存在买入操作
:rtype: TradeRequest
2020-07-15 00:23:48 +08:00
.. py:method:: get_sell_trade_request(self)
2019-02-17 16:10:03 +08:00
获取卖出请求“delay”模式下查看下一时刻是否存在卖出操作
:rtype: TradeRequest
.. py:function:: run(self, stock, query[, reset=True])
运行系统,执行回测
:param Stock stock: 交易的证券
:param Query query: K线数据查询条件
2024-03-12 01:12:06 +08:00
:param bool reset: 执行前是否依据系统部件共享属性复位
:param bool reset_all: 强制复位所有部件
.. py:method:: reset(self)
2019-02-17 16:10:03 +08:00
2024-03-12 01:12:06 +08:00
复位,但不包括已有的交易对象,以及共享的部件
2019-02-17 16:10:03 +08:00
2024-04-18 02:13:08 +08:00
.. py:method:: force_reset_all(self)
2024-03-12 01:12:06 +08:00
强制复位所有组件以及清空已有的交易对象,忽略组件的共享属性
.. py:method:: clone(self)
2019-02-17 16:10:03 +08:00
克隆操作,会依据部件的共享特性进行克隆,共享部件不进行实际的克隆操作,保持共享
2019-02-17 16:10:03 +08:00
交易请求记录
--------------
.. py:class:: TradeRequest
交易请求记录。系统内部在实现延迟操作时登记的交易请求信息。暴露该结构的主要目的是用于在“delay”模式延迟到下一个bar开盘时进行交易的情况下系统实际已知下一个Bar将要进行交易此时可通过 :py:meth:`System.getBuyTradeRequest`:py:meth:`System.getSellTradeRequest` 来获知下一个BAR是否需要买入/卖出。主要用于提醒或打印下一个Bar需要进行操作。对于系统本身的运行没有影响。
.. py:attribute:: valid
该交易请求记录是否有效True | False
.. py:attribute:: business
交易业务类型,参见::py:class:`hikyuu.trade_manage.BUSINESS`
.. py:attribute:: datetime
发出交易请求的时刻
.. py:attribute:: stoploss
发出交易请求时刻的止损价
.. py:attribute:: part
发出交易请求的来源,参见::py:class:`System.Part`
.. py:attribute:: count
因操作失败,连续延迟的次数