python 期货程序化_期货程序化交易

python 期货程序化_期货程序化交易在这里给大家一个 Python 期货模型参考 作为入门参考应该还可以 这个我曾经写的第一个完整的 python 期货交易模型源码 历史数据来源于自己的数据库 交易接口也是基于 CTP 的自己的交易接口 相当一部分函数是基于其他的 python 自定义类 太多了放不下 只放策略主题部分作为参考 高手们请忽略 importmath sys os NMathimportN

在这里给大家一个Python期货模型参考,作为入门参考应该还可以,这个我曾经写的第一个完整的python期货交易模型源码,历史数据来源于自己的数据库,交易接口也是基于CTP的自己的交易接口。

相当一部分函数是基于其他的python自定义类,太多了放不下,只放策略主题部分作为参考,高手们请忽略!

import math, sys, os, NMath

import NLog as lg

import NDateTime as dt

import Future as ft

import TradeQuery as tq

import time

# import numpy as np

_investorid = ”

_instrument = ‘rb1805’

#模型名称,默认为文件名称

_s_model_name = ‘Python:%s’ % os.path.basename(sys.argv[0])[:os.path.basename(sys.argv[0]).find(“.”)]

#模型参数

param_ma = 20

param_loss = 30

param_hl = 10

#信号记录

_signals = []

_math = NMath.NMath()

sf = ft.SingleFutureFast()

_dc_orginal_data = sf._get_data(‘rb’, sort = ‘asc’)#, startdate=”, enddate = ”, cycle=’d1′, ideliverydate=’1801′)

if _dc_orginal_data == None:

print(‘获取数据错误:要获取的合约数据量为0!’)

j = param_ma

while j < (len(_dc_orginal_data['index'])):

#动态止损SP;

if len(_signals) > 0 and (_signals[-1].sig == ‘BK’ or _signals[-1].sig == ‘BPK’) and _signals[-1].index < j:

if _signals[-1].price – _dc_orginal_data[‘dMinPrice’][j] > param_loss:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _signals[-1].index < j:

max1 = _math.max_series(_dc_orginal_data[‘dClosePrice’][_signals[-1].index : j])

max2 = _math.max_series(_dc_orginal_data[‘dOpenPrice’][_signals[-1].index : j])

max3 = _math.Nmax(max1, max2)

if max3 – _signals[-1].price >= 50 and max3 – _signals[-1].price < 100 and max3 - _dc_orginal_data['dClosePrice'][j] > 40:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if max3 – _signals[-1].price >= 100 and max3 – _signals[-1].price < 200 and max3 - _dc_orginal_data['dClosePrice'][j] > 80:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if max3 – _signals[-1].price >= 200 and max3 – _signals[-1].price < 400 and max3 - _dc_orginal_data['dClosePrice'][j] > 120:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if max3 – _signals[-1].price >= 400 and max3 – _dc_orginal_data[‘dClosePrice’][j] > 200:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

# 动态止损BP

if len(_signals) > 0 and (_signals[-1].sig == ‘SK’ or _signals[-1].sig == ‘SPK’) and _signals[-1].index < j:

if _dc_orginal_data[‘dMaxPrice’][j] – _signals[-1].price > param_loss:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _signals[-1].index < j:

min1 = _math.min_series(_dc_orginal_data[‘dClosePrice’][_signals[-1].index : j])

min2 = _math.min_series(_dc_orginal_data[‘dOpenPrice’][_signals[-1].index : j])

min3 = _math.Nmin(max1, max2)

if _signals[-1].price – min3 >= 50 and _signals[-1].price – min3 < 100 and _dc_orginal_data['dClosePrice'][j] - min3 > 40:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _signals[-1].price – min3 >= 100 and _signals[-1].price – min3 < 200 and _dc_orginal_data['dClosePrice'][j] - min3 > 80:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _signals[-1].price – min3 >= 200 and _signals[-1].price – min3 < 400 and _dc_orginal_data['dClosePrice'][j] - min3 > 120:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _signals[-1].price – min3 >= 400 and _dc_orginal_data[‘dClosePrice’][j] – min3 > 200:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

mh = _math.ma_series(_dc_orginal_data[‘dMaxPrice’][j – param_ma : j – 1])

ml = _math.ma_series(_dc_orginal_data[‘dMinPrice’][j – param_ma : j – 1])

mc = _math.ma_series(_dc_orginal_data[‘dClosePrice’][j – param_ma : j – 1])

mo = _math.ma_series(_dc_orginal_data[‘dOpenPrice’][j – param_ma : j – 1])

mc = (mh + ml + mc + mo) / 4

if _dc_orginal_data[‘dMinPrice’][j] > mc and _dc_orginal_data[‘dOpenPrice’][j] < _dc_orginal_data['dClosePrice'][j]:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _dc_orginal_data[‘dMaxPrice’][j] < mc and _dc_orginal_data['dOpenPrice'][j] > _dc_orginal_data[‘dClosePrice’][j]:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SP’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

min1 = _math.min_series(_dc_orginal_data[‘dClosePrice’][j – param_hl : j – 1])

min2 = _math.min_series(_dc_orginal_data[‘dOpenPrice’][j – param_hl : j – 1])

min3 = _math.Nmin(min1, min2)

max1 = _math.max_series(_dc_orginal_data[‘dClosePrice’][j – param_hl : j – 1])

max2 = _math.max_series(_dc_orginal_data[‘dOpenPrice’][j – param_hl : j – 1])

max3 = _math.Nmax(max1, max2)

if _dc_orginal_data[‘dClosePrice’][j] > mh and _dc_orginal_data[‘dMaxPrice’][j] > max3 and _dc_orginal_data[‘dClosePrice’][j] > _dc_orginal_data[‘dOpenPrice’][j]:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘BPK’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

if _dc_orginal_data[‘dClosePrice’][j] < ml and _dc_orginal_data['dMinPrice'][j] < min3 and _dc_orginal_data['dClosePrice'][j] < _dc_orginal_data['dOpenPrice'][j]:

_signals = ft.FilterAddWH(_signals, ft.whSignal(_dc_orginal_data[‘iReceiveDate’][j], ‘SPK’, _dc_orginal_data[‘dClosePrice’][j], _dc_orginal_data[‘index’][j]))

j += 1

k = 0

for _s in _signals:

print(_s.date, _s.sig, _s.price, _s.index)

k += 1

print(‘总盈利:’, ft.Signals_SUM(_signals))

#当日交易

_tq = tq.TradeQuery()

cur_date = dt.get_now_date_int()

_s_log = ‘_signals[-1].date=%s,_signals[-1].sig=%s,cur_date=%s’ % (_signals[-1].date, _signals[-1].sig, cur_date)

lg.NFileLog(_s_log)

if int(_signals[-1].date) == int(cur_date):

if _signals[-1].sig ==’BP’:

lg.NFileLog(‘进入BP信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘BUY’, ‘CLOSE’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

if _signals[-1].sig ==’BK’:

lg.NFileLog(‘进入BK信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘BUY’, ‘OPEN’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

if _signals[-1].sig ==’SP’:

lg.NFileLog(‘进入SP信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘SELL’, ‘CLOSE’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

if _signals[-1].sig ==’SK’:

lg.NFileLog(‘进入SK信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘SELL’, ‘OPEN’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

if _signals[-1].sig ==’BPK’:

lg.NFileLog(‘进入BPK信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘BUY’, ‘OPEN’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

if _signals[-1].sig ==’SPK’:

lg.NFileLog(‘进入SPK信号处理’)

_list = _tq.QuerySignals(_s_model_name, ‘SELL’, ‘OPEN’, ft.OpenVolume)

time.sleep(1)

if len(_list) == 0 or _list[7] < cur_date:

ft.ExecwhSignal(_signals[-1], _s_model_name, _investorid, _instrument)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204552.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:03
下一篇 2026年3月19日 下午8:03


相关推荐

  • 华为裁员34岁以上程序员?90后的中年危机,即将到来!

    华为裁员34岁以上程序员?90后的中年危机,即将到来!原创: 小七 AI商学院 前天新的职场潜规则!去年,一条职场潜规则走红网络:不要大声责骂年轻人,他们会立刻辞职的,但是你可以往死里骂那些中年人,尤其是有车有房有娃的那

    2022年7月1日
    33
  • [ IDEA ] 安装activate-power-mode

    [ IDEA ] 安装activate-power-mode一款很酷炫的代码编辑特效插件先来看看效果和平常的插件方式一样:1、官网插件社区https://plugins.jetbrains.com/plugin/8251-power-mode-ii安装和配置都可以在File>Setting中完成2、githubhttps://github.com/codeinthedark/aw

    2022年7月15日
    39
  • clang忽略警告

    clang忽略警告使用 clang 的时候 出现这样的警告 warningLNK42 本地定义的符号 std terminate 在函数 int public staticunsign int64 cdeclstd char traitschar length charconst const 1 dtor 2 dtor 2 0 length char

    2026年3月19日
    2
  • shell训练营 Day6「建议收藏」

    shell训练营 Day6「建议收藏」shell训练营 Day6

    2022年4月21日
    48
  • RestFul风格「建议收藏」

    RestFul风格「建议收藏」RestFul风格概念Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。功能资源:互联网所有的事物都可以被抽象为资源资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post和get​ http://127.0.0.1/item/queryItem.actio

    2022年6月15日
    29
  • ios—-protocol, optional ,delegate

    ios—-protocol, optional ,delegate

    2021年7月10日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号