900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 天勤python_天勤量化策略库:菲阿里四价策略

天勤python_天勤量化策略库:菲阿里四价策略

时间:2020-12-07 11:12:05

相关推荐

天勤python_天勤量化策略库:菲阿里四价策略

文章策略均基于开源免费,简单强大的Python量化开发包——天勤量化(TqSdk)实现

菲阿里四价策略故事

在2000年7月,日本举办了首次“ROBBINS-TAICOM期货冠军比赛”,总共比赛历时半年。从第一周起,一位名叫Fairy(菲阿里)的先生便位居首位,其后也进展顺利,不断增加收益率,结果位居首位的他一次也未将首位让于他人,从而创造了1089%的惊人战绩,荣获了比赛的冠军,此后菲阿里和本次比赛的亚军亚军炭谷道孝合著了一本书——《1000%的男人——期货冠军奇迹的买卖方法》,由于这本书是以日记的形式写作,所以你很难看到菲阿里总结的交易理论和交易方法。除非你研究他每笔交易和所配的图形,再根据他的文字提炼出他的方法。但由于日本人的写作风格和一些翻译问题,这也很难做的到。

至于菲阿里四价,则是后人总结的菲阿里交易方法。

策略原理(策略源码在最后)

上轨=昨日最高点;

下轨=昨日最低点;

昨日收盘价(不在策略中使用,作为参考指标)

今日开盘价

from tqsdk import TqApi, TargetPosTask

symbol = "SHFE.au1912" # 合约代码

api = TqApi() # 使用模拟帐号直连行情和交易服务器

klines = api.get_kline_serial(symbol, 24 * 60 * 60) # 获取日线

top_rail = klines.high.iloc[-2] # 上轨: 昨日高点

bottom_rail = klines.low.iloc[-2] # 下轨: 昨日低点

print("上轨:", top_rail, ",下轨:", bottom_rail, ",昨日收盘价:", klines.close.iloc[-2], ",今日开盘价:", klines.open.iloc[-1])

开仓策略

价格向上突破上轨做多

价格向下突破下轨做空

# 开仓突破

if quote.last_price > top_rail and position.pos_long == 0: # 如果价格突破上轨: 买入开仓

print("最新价:", quote.last_price, ", 价格突破上轨,买入开仓")

target_pos.set_target_volume(3) # 设置目标持仓手数,将指定合约调整到目标头寸

elif quote.last_price < bottom_rail and position.pos_short == 0: # 如果价格跌破下轨: 卖出开仓

print("最新价:", quote.last_price, ", 价格跌破下轨, 卖出开仓")

target_pos.set_target_volume(-3)

平仓策略

1.止损平仓: 当价格 向上突破上轨 或 向下突破下轨 后, 再次回破当日开盘价

2.收盘定时平仓

if api.is_changing(quote, "last_price"): # 如果行情最新价发生变化

# 平仓止损: 当价格 向上突破上轨 或 向下突破下轨 后, 再次回破当日开盘价

if (quote.highest > top_rail and quote.last_price <= quote.open) or (

quote.lowest < bottom_rail and quote.last_price >= quote.open):

print("平仓止损")

target_pos.set_target_volume(0)

if api.is_changing(quote, "datetime"):

now_time = datetime.strptime(quote.datetime, "%Y-%m-%d %H:%M:%S.%f") # 获取当前的行情时间

if now_time.hour == close_hour and now_time.minute >= close_minute: # 到达平仓时间: 平仓

print("临近本交易日收盘: 平仓")

target_pos.set_target_volume(0)

deadline = time.time() + 60 # 设置截止时间为当前时间的60秒以后

while api.wait_update(deadline=deadline): # 等待60秒

pass

api.close() # 关闭api

break # 退出while循环

回测

初始账户资金:1000万

回测日期:.07.17-.09.18

多、空头开仓手数:60手

合约: SHFE.au1912

天勤内策略源码

#!/usr/bin/env python

# -*- coding: utf-8 -*-

__author__ = 'limin'

'''

菲阿里四价(日内突破策略, 在每日收盘前对所持合约进行平仓)

注: 该示例策略仅用于功能示范, 实盘时请根据自己的策略/经验进行修改

'''

from tqsdk import TqApi, TargetPosTask

from datetime import datetime

import time

symbol = "SHFE.au1912" # 合约代码

close_hour, close_minute = 14, 50 # 平仓时间

api = TqApi() # 使用模拟帐号直连行情和交易服务器

quote = api.get_quote(symbol) # 获取指定合约的盘口行情

klines = api.get_kline_serial(symbol, 24 * 60 * 60) # 获取日线

position = api.get_position(symbol) # 持仓信息

target_pos = TargetPosTask(api, symbol) # 目标持仓

top_rail = klines.high.iloc[-2] # 上轨: 昨日高点

bottom_rail = klines.low.iloc[-2] # 下轨: 昨日低点

print("上轨:", top_rail, ",下轨:", bottom_rail, ",昨日收盘价:", klines.close.iloc[-2], ",今日开盘价:", klines.open.iloc[-1])

while True:

api.wait_update()

if api.is_changing(klines.iloc[-1], "datetime"): # 如果产生一根新日线 (即到达下一个交易日): 重新获取上下轨

top_rail = klines.high.iloc[-2]

bottom_rail = klines.low.iloc[-2]

print("上轨:", top_rail, ",下轨:", bottom_rail, ",昨日收盘价:", klines.close.iloc[-2], ",今日开盘价:", klines.open.iloc[-1])

if api.is_changing(quote, "last_price"): # 如果行情最新价发生变化

print("当前最新价", quote.last_price)

# 开仓突破

if quote.last_price > top_rail and position.pos_long == 0: # 如果价格突破上轨: 买入开仓

print("最新价:", quote.last_price, ", 价格突破上轨,买入开仓")

target_pos.set_target_volume(3) # 设置目标持仓手数,将指定合约调整到目标头寸

elif quote.last_price < bottom_rail and position.pos_short == 0: # 如果价格跌破下轨: 卖出开仓

print("最新价:", quote.last_price, ", 价格跌破下轨, 卖出开仓")

target_pos.set_target_volume(-3)

# 平仓止损: 当价格 向上突破上轨 或 向下突破下轨 后, 再次回破当日开盘价

if (quote.highest > top_rail and quote.last_price <= quote.open) or (

quote.lowest < bottom_rail and quote.last_price >= quote.open):

print("平仓止损")

target_pos.set_target_volume(0)

if api.is_changing(quote, "datetime"):

now_time = datetime.strptime(quote.datetime, "%Y-%m-%d %H:%M:%S.%f") # 获取当前的行情时间

if now_time.hour == close_hour and now_time.minute >= close_minute: # 到达平仓时间: 平仓

print("临近本交易日收盘: 平仓")

target_pos.set_target_volume(0)

deadline = time.time() + 60 # 设置截止时间为当前时间的60秒以后

while api.wait_update(deadline=deadline): # 等待60秒

pass

api.close() # 关闭api

break # 退出while循环

点击访问天勤量化,开源免费,简单强大的Python量化开发包!天勤量化 - 信易科技​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。