代码拉取完成,页面将自动刷新
同步操作将从 海风/hfpy 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
一款开源的策略开发平台.为用户提供方便易用的策略开发工具.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
pip install hfpy
docker pull haifengat/hfpy
pip install -r requirements.txt
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__title__ = '主程序'
__author__ = 'HaiFeng'
__mtime__ = '20180822'
from hfpy.atp import ATP
if __name__ == '__main__':
ATP().Run()
while input().lower() != 'q':
continue
---
ctp_config:
# 为空时不登录
ctp_front: ''
investor: '008105'
password: '1'
product_info: ''
app_id: ''
auth_code: ''
# 追单设置
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'
ebf:
trade: tcp://192.168.52.4:41205
quote: tcp://192.168.52.4:41213
broker: '6000'
# 数据源 - zmq配置
zmq_config: tcp://broadcast.eicp.net:55881
# 开关
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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'HaiFeng'
__mtime__ = '2016/8/16'
- talib 安装
- windows [http://user.qzone.qq.com/24918700/blog/1486954718](http://user.qzone.qq.com/24918700/blog/1486954718)
- linux [http://user.qzone.qq.com/24918700/blog/1483279805](http://user.qzone.qq.com/24918700/blog/1483279805)
"""
import talib
from hfpy.data import Data
from hfpy.bar import Bar
from hfpy.strategy import Strategy
import numpy as np
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
# print('{0}-{1}'.format(self.D[-1], self.C[-1]))
ma1 = talib.SMA(np.array(self.C, dtype=float), self.p_ma1)
ma2 = talib.SMA(np.array(self.C, dtype=float), self.p_ma2)
self.IndexDict['ma5'] = ma1
self.IndexDict['ma10'] = ma2
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, '卖开')
---
# ID用于区分不同策略实例的委托
-
ID: 119
BeginDate: 20180901
TickTest: false
# 可通过增加Data实现多合约多周期引用
Datas:
-
Instrument: j1901
IntervalType: Minute
Interval: 5
Params:
Lots: 1
MA1: 10
MA2: 20
-
ID: 120
BeginDate: 20180901
Datas:
-
Instrument: rb1901
IntervalType: Minute
Interval: 5
Params:
Lots: 1
MA1: 5
MA2: 60
# !/usr/bin/python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'HaiFeng'
__mtime__ = '2017/11/16'
"""
from hfpy.strategy import Strategy
from hfpy.data import Data
from hfpy.bar import Bar
class Test(Strategy):
''''''
def __init__(self, jsonfile=''):
super().__init__(jsonfile)
self.ordered = False
self.closed = False
self.oid = 0
def OnBarUpdate(self, data=Data, bar=Bar):
if self.Tick.Instrument == '':
return
# print(self.Datas[0].Tick.UpdateTime[-2:])
if self.Tick.UpdateTime[-2:] == '00' or self.Tick.UpdateTime[-2:] == '30':
if self.ordered:
self.ordered = False
else:
self.ordered = True
# self.ReqOrder(self.Instrument, DirectType.Buy, OffsetType.Open, self.Tick.AskPrice, 1)
# self.ReqOrder(self.Tick.Instrument, DirectType.Buy, OffsetType.Open, self.Tick.BidPrice, 1)
self.Sell(self.Tick.BidPrice, 1, 'close long')
print('1 last order == ', self.GetLastOrder())
print('1 order id == ', self.oid)
'''
if self.Tick.UpdateTime[-2:] == '05' or self.Tick.UpdateTime[-2:] == '35':
if self.closed:
self.closed = False
else:
self.closed = True
self.Sell(self.O[0], 1, '')
print(self.PositionLong)
print('all:{0},last:{1},notfill:{2}'.format(len(self.GetOrders()), self.GetLastOrder(), len(self.GetNotFillOrders())))
'''
# def OnOrder(self, order=OrderField()):
# """委托响应"""
# print('委托反应')
# self.oid = self.GetLastOrder().OrderID
# print('last order == ', self.GetLastOrder())
# print('order id == ', self.oid)
# print('cancel orderid == ', order.OrderID)
# self.ReqCancel(self.oid)
# #print('strategy order')
# # print(order)
# def OnTrade(self, trade=TradeField()):
# """成交响应"""
# print('成交反应')
# print('strategy trade')
# print(trade)
# def OnCancel(self, order):
# """撤单响应"""
# print('扯淡反应')
# print('所撤单资料 :', order)
# #print('strategy cancel')
# # print(order)
# def OnErrOrder(self, order=OrderField(), info=InfoField()):
# """委托错误"""
# print('委托错误')
# print('strategy err order')
# print(order)
# def OnErrCancel(self, order=OrderField(), info=InfoField()):
# """撤单错误"""
# print('撤单错误')
# print('strategy err cancel')
# print(order)
---
-
ID: 100
BeginDate: 20181010
Datas:
-
Instrument: rb1901
IntervalType: Minute
Interval: 1
Params:
Fast: 10
Slow: 20
lots: 1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。