等级: 新手上路
- 注册:
- 2022-7-7
- 曾用名:
|
楼主 |
发表于 2023-10-31 11:55
|
显示全部楼层
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
from PythonApi import *
# 参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现)
#def parameter():
# input_par("myvalues1",5,1,20,1)
# input_par("myvalues2",10,1,20,1)
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
context.account_stock = "218255" # 账户
# 在context中保存全局变量
context.s1 = 1
context.z1 = 0
context.z2 = 0
x4 = str(int(get_account(1,))) # 账户
context.account_stock = x4 # 账户
context.position_size = 0 # 当前持仓的仓位
# print("策略启动") #调试打印输出
write_logging ('策略1初始化工作已经完成!')
# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
pass
# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
for s in context.universe:
count0 = get_indicator(s, 'S01_04', 'GK1', '0', 'self',3500,True,False,True)
count1 = get_indicator(s, 'S01_04', 'GK2', '0', 'self',3500,True,False,True)
count2 = get_indicator(s, 'S01_04', 'HOLDIN1', '0', '15m',3500,True,False,True)
portfolio = get_portfolio(s,0,context.account_stock)
context.s3 = get_dynainf(s, 208)*10#交易单位
context.s4 = get_dynainf(s, 207)##时间
context.s5 = round(get_dynainf(s, 211),2)##时间
context.s6 = get_dynainf(s, 213)##时间
context.s7 = get_dynainf(s, 214)##时间
context.s8 = round (portfolio.buy_margin)
context.s9 = get_dynainf(s, 212)
close1 = history_bars(s, 1, 'self', 'close',True)
bar_clos1=get_dynainf(s,3)
bar_clos2=get_dynainf(s,209)
bar_clos3=int(bar_clos1*bar_clos2*(0.15))
bar_clos4=(round(50000/bar_clos3))
if bar_clos4>0:
context.s2 = bar_clos4
else:
context.s2 = 1
#######################################################################################################################
lst=count2.tolist()
index = 16
if index < len(lst):
value = lst[index]
# 更新当前持仓的仓位
context.position_size = context.s2
countp0 = lst[-1]>0 and lst[-2]>0 and lst[-3] == 0 and portfolio.buy_quantity<context.s2
countp1 = lst[-1]>0 and lst[-2] == 0 #开多
countp2 = lst[-1]==0 and lst[-2] > 0 #平多
countp3 = lst[-1]<0 and lst[-2] == 0 #开空
countp4 = lst[-1]==0 and lst[-2] < 0 #平空
if istradertime(s) == 1:
if countp1 == 1 :
buy_open (s,"fok",close1+context.s3, volume=context.s2,account=context.account_stock)
if countp3 == 1 :
sell_open (s,"fok",close1-context.s3, volume=context.s2 ,account=context.account_stock)
if countp2 == 1 :
sell_close(s,"fok",close1-context.s3, volume=context.position_size ,account=context.account_stock,serial_id = 1)
if countp4 == 1 :
buy_close(s,"fok",close1+context.s3, volume=context.position_size,account=context.account_stock,serial_id = 2)
if lst[-1]!=0:
print("商品持仓 "+s+" "+str(count2[-1:])+"商品仓位 "+str(context.s2)+" 开仓价位 "+str(context.s5)+" 成交时间 "+str(context.s6)+" 成交日期 "+str(context.s7)+" 保证金 "+str(context.s8*context.s2))
else:
print("商品持仓 "+s+" "+str(count2[-1:])+"商品仓位 "+str(context.s2))
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现)
def after_trading(context):
pass
补充内容 (2023-10-31 11:56):
全部下单代码 |
|