海风py
一款开源的策略开发平台.为用户提供方便易用的策略开发工具.
有问题反馈
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
- 邮件(hubert28@qq.com)
- QQ: 24918700
- Q群:65164336
海风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
Metadata
Release files for hfpy 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hfpy-0.2.2.tar.gz | 32.2 kB | Without provenance | Details for hfpy-0.2.2.tar.gz |
Release files / hfpy-0.2.2.tar.gz
| Download URL | hfpy-0.2.2.tar.gz |
|---|---|
| Size | 32.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83cb39ce1e3eaf68ce753a6bdbb7fd255bcd1f1d807e93a052ba404c7f4d9e39
|
|
BLAKE2b-256 checksum How to use checksums |
dab0f3a64b69fd9bf54bc64887e86339ecc81100fdc0fc927696ce21ea54df36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Security for hfpy 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.