等级: 管理员
- 注册:
- 2021-5-18
- 曾用名:
|
楼主 |
发表于 2024-5-16 15:37
|
显示全部楼层
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
#海龟策略,跟踪期货标的,单边多头方向
from PythonApi import *
import numpy as np
import talib
import math
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
#入场周期
context.X = 20
#出场周期
context.Y = 10
#记录建仓的atr
context.entry = 0
#记录交易次数
context.num = 0
#交易标的
context.s = context.run_info.base_book_id
#记录上次开仓价
context.enterprice = 0
# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
close = history_bars(context.s,context.X+2,'self','close',include_now=True)
high = history_bars(context.s,context.X+2,'self','high',include_now=True)
low = history_bars(context.s,context.X+2,'self','low',include_now=True)
if len(close) == context.X+2:
#atr的计算参考这个帖子http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=173300
tr = talib.TRANGE(high,low,close)
atr = talib.SMA(tr[1:],context.X)
unit = int((get_account(6)*0.01) / (atr[-2] * get_dynainf(context.s,209)))
#X天的高低点(不包含当天)
X周期高点 = high[:-1].max()
X周期低点 = low[:-1].min()
#建立头寸,根据唐奇安通道创新高入场,关键点就是利用波动atr计算仓位数量,portfolio用来进行仓位的控制
portfolio=get_portfolio (context.s, 2)
if high[-1]>=X周期高点 and portfolio.buy_quantity==0 and portfolio.sell_quantity==0:
buy_open(context.s, "Market",0 ,unit,serial_id = 1)
context.entry = atr[-2]
context.num = 1
context.enterprice = close[-1]
if low[-1]<=X周期低点 and portfolio.sell_quantity==0 and portfolio.buy_quantity==0:
sell_open(context.s, "Market",0 ,unit,serial_id = 2)
context.entry = atr[-2]
context.num = 1
context.enterprice = close[-1]
#加仓,最高价比上次开仓价多0.5个atr(盈利加仓)
if portfolio.sell_quantity ==0 and portfolio.buy_quantity>0 and high[-1]>context.enterprice + 0.5*context.entry and context.num<4:
buy_open(context.s, "Market",0 ,unit,serial_id = 3)
|
|