Skip to main content

海风

海风py

一款开源的策略开发平台.为用户提供方便易用的策略开发工具.

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

海风AT的功能

  • 策略编写
    • 提供常用指标
    • 采用HLOC调用K线数据
  • 历史数据
    • 提供每日数据
    • 提供实时数据分钟级服务
    • 提供分笔数据(内网)

运行环境

talab 指标库

https://www.ta-lib.org/function.html

docker运行

docker-compose.yml

version: "3.7"

services:
    hfpy:
        image: haifengat/hfpy
        container_name: hfpy
        restart: always
        environment:
            # config.yml所在目录
            config_path: /home/config/
        volumes: 
            # 个人策略文件夹
            - ./strategies:/home/strategies
            # hfpy配置文件
            - ./config.yml:/home/config/config.yml

运行

docker-compose up -d

配置docker-compose.yml

  • 修改config.yml
  • 修改zmq_config,配置对应的数据源
  • 修改stra_path,配置自己的策略

本地部署

hfpy 安装

pip install hfpy

使用

  • 安装python组件 pip install -r requirements.txt
  • 新建目录
  • 创建main.py并复制粘贴下面示例中main的内容
  • 创建strategies子目录
  • 在strategies目录下,创建SMACross.py和SMACross.yml文件【注意大小写】,并复制粘贴示例中对应的代码.
  • 执行 python main.py

测试报告

因报告使用了pandas所以被注释掉了,如需要则可以自行安装pandas并注释掉atp.py的5行和252行。

配置说明

  • 项目配置 config.yml
    • 当前工作目录下无此文件时, 会产生默认配置
    • stra_path 策略路径[],可多个
      • 按此配置读取相应策略,按ID加载对应的参数
  • 策略配置
    • 与策略文件名同名的.yml文件
    • 配置参数组
      • 必须有ID标识(int)
    • TickTest: true
      • 分笔数据回测,需处理数据源及格式
  • 执行
    • 配置 config.yml 中的登录信息,数据源
    • python main.py

策略编写

  • 策略文件名与文件内的类名要一致(区分大小写)
  • 示例
    • strategies/SMACross.py
    • strategies/Test.py
      • 接口调用示例

示例

main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__title__ = '主程序'
__author__ = 'HaiFeng'
__mtime__ = '20180822'

from hfpy.atp import ATP
from time import sleep

if __name__ == '__main__':
    ATP().Run()
    while True:
        sleep(60*10)

config.yml

---
ctp_config:
    # 为空时不登录接口
    ctp_front: 'sim_now'
    investor: '008107'
    password: '1'
    product_info: ''
    app_id: 'simnow_client_test'
    auth_code: '0000000000000000'
    # 追单设置
    chasing:
        # n秒后不成交则撤单重发[0-不追单]
        wait_seconds: 3
        # 超价重发n个pricetick
        offset_ticks: 2
        # 重发次数,n次重发后仍未成交则[板价发单]
        resend_times: 3
    # ctp前置配置
    fronts:
        sim_now:
            trade: tcp://180.168.146.187:10000
            quote: tcp://180.168.146.187:10010
            broker: '9999'
# 数据源 - zmq配置
zmq_config: tcp://私有化部署数据服务:15555
# 开关
onoff:
    # 是否7*24
    running_as_server: true
    # 是否发送委托
    real_order_enable: false
    # 一根K线只发送一次指令
    single_order_one_bar: true
    # 是否打印行情时间
    show_tick_time: true
# 策略路径配置
stra_path:
    # 路径
    strategies:
        # 策略文件名
        SMACross:
        # 策略配置参数ID
        - 119

SMACross.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'HaiFeng'
__mtime__ = '2016/8/16'
"""
# import talib._ta_lib as talib
from hfpy.data import Data
from hfpy.bar import Bar
from hfpy.strategy import Strategy
import numpy as np
import talib as ta

class SMACross(Strategy):

    def __init__(self, jsonfile):
        super().__init__(jsonfile)
        self.p_ma1 = self.Params['MA1']
        self.p_ma2 = self.Params['MA2']
        self.p_lots = self.Params['Lots']

    def OnBarUpdate(self, data=Data, bar=Bar):
        if len(self.C) < self.p_ma2:
            return
        # if len(data.Instrument) > 0:
        #     print(f'{data.Tick.Instrument},{data.Tick.Volume}')

        # print('{0}-{1}'.format(self.D[-1], self.C[-1]))
        ma1 = ta.SMA(np.array(self.C, dtype=float), self.p_ma1)
        ma2 = ta.SMA(np.array(self.C, dtype=float), self.p_ma2)

        self.IndexDict['ma5'] = ma1
        self.IndexDict['ma10'] = ma2

        if len(ma2) < 2 or len(ma1) < 2:
            return
        if self.PositionLong == 0:
            if ma1[-1] >= ma2[-1] and ma1[-2] < ma2[-2]:
                if self.PositionShort > 0:
                    self.BuyToCover(self.O[-1], self.p_lots, '买平')
                self.Buy(self.O[-1], self.p_lots, '买开')
        elif self.PositionShort == 0:
            if ma1[-1] <= ma2[-1] and ma1[-2] > ma2[-2]:
                if self.PositionLong > 0:
                    self.Sell(self.O[-1], self.p_lots, '卖平')
                self.SellShort(self.O[-1], self.p_lots, '卖开')

SMACross.yml

---
# ID用于区分不同策略实例的委托
- 
    ID: 119
    BeginDate: 20191101
    TickTest: false
    # 可通过增加Data实现多合约多周期引用
    Datas:
    -
        Instrument: p2105
        IntervalType: Minute
        Interval: 5
    -
        Instrument: rb2105
        IntervalType: Minute
        Interval: 5
    Params:
        Lots: 1
        MA1: 10
        MA2: 20
- 
    ID: 120
    BeginDate: 20180901
    Datas:
    - 
        Instrument: rb2105
        IntervalType: Minute
        Interval: 5
    Params:
        Lots: 1
        MA1: 5
        MA2: 60

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hfpy-0.2.2.tar.gz (32.2 kB view details)

Uploaded Source

File details

Details for the file hfpy-0.2.2.tar.gz.

File metadata

  • Download URL: hfpy-0.2.2.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.6.8

File hashes

Hashes for hfpy-0.2.2.tar.gz
Algorithm Hash digest
SHA256 83cb39ce1e3eaf68ce753a6bdbb7fd255bcd1f1d807e93a052ba404c7f4d9e39
MD5 c358586e38c0f85c3db6490c39802f72
BLAKE2b-256 dab0f3a64b69fd9bf54bc64887e86339ecc81100fdc0fc927696ce21ea54df36

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.2 This release

1 file

0.2.1

1 file

0.1.8

1 file

0.1.7.2

1 file

0.1.7.1

1 file

0.1.7

1 file

0.1.6.8

1 file

0.1.6.7

1 file

0.1.6.6

1 file

0.1.6.5

1 file

0.1.6.4

1 file

0.1.6.3

1 file

0.1.6.2

1 file

0.1.6.1

1 file

0.1.6.0

1 file

0.1.5.6

1 file

0.1.5.5

1 file

0.1.5.4

1 file

0.1.5.3

1 file

0.1.5.2

1 file

0.1.5.1

1 file

0.1.5

1 file

0.1.4.2

1 file

0.1.4.1

1 file

0.1.4

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0.1

1 file

0.1.0

1 file

0.0.9

1 file

0.0.7

1 file

0.0.6

1 file

0.0.5

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page