2.81K 浏览
0

#双均线金叉买入,死叉卖出
import tqsdk,datetime
from tqsdk import TqApi,TqAuth,TqSim,TqBacktest,BacktestFinished,tafunc,TargetPosTask,TqReplay
from datetime import date
from tqsdk.ta import MA
from tqsdk.tafunc import *
import time

api = TqApi(web_gui=True,auth=TqAuth(“181********”, “********”))
合约品种=”CZCE.FG109″
实时行情 = api.get_quote(合约品种)
K线行情=api.get_kline_serial(合约品种, 300,100)
调整仓位=tqsdk.lib.TargetPosTask(api,合约品种)
下单手数=1 #1代表开多,-1代表开空,0代表空仓
print(“最新价格:”,实时行情.datetime, 实时行情.last_price)
#print(datetime.datetime.fromtimestamp(K线行情.iloc[-1][“datetime”] / 1e9))

五日均线 =ma(K线行情.close,5)
十日均线 =ma(K线行情.close,10)
二十日均线 =ma(K线行情.close,20)
print(“MA5:”,五日均线)
print(“MA10=”,十日均线)
print(“MA20=”,二十日均线)
当前多仓 = api.get_position()
当前空仓 = api.get_position()
当前委托= api.get_order()
# MA5上穿MA10,进多单, MA5下穿MA10,进空单

def 开多仓条件(K线行情):
if tqsdk.tafunc.crossup(五日均线,十日均线).iloc[-2]:
return 1
return 0
def 平多仓条件(K线行情):
if (K线行情.close.iloc[-1]<五日均线.iloc[-1]):
return 1
return 0
def 开空仓条件(K线行情):
if tqsdk.tafunc.crossdown(五日均线,十日均线).iloc[-2]:
return 1
return 0
def 平空仓条件(K线行情):
if (K线行情.close.iloc[-1]>五日均线.iloc[-1]):
return 1
return 0

try:
回测=TqApi(api,backtest=TqBacktest(start_dt=date(2021,4,28),end_dt=date(2021,4,29)))

# api = TqApi(backtest=TqReplay(date(2020, 5, 26)), web_gui=True, auth=TqAuth(“信易账户”, “账户密码”))
K线行情=api.get_kline_serial(合约品种,300,100) #获取行情,300s,也就是5分钟的行情,获取100根

print(“当前可用资金:”,api.get_account())
while True: #等待行情数据更新

api.wait_update(1)

if tqsdk.tafunc.crossup(五日均线,十日均线).iloc[-2]:

order = api.insert_order(symbol=合约品种, direction=”BUY”, offset=”OPEN”, volume=下单手数)
调整仓位.set_target_volume(下单手数)
print(“我开仓了,多单持仓:”,当前多仓)

当前多仓 = api.get_position(合约品种)

if (K线行情.close.iloc[-1]<五日均线.iloc[-1]):
order = api.insert_order(symbol=合约品种, direction=”SELL”, offset=”CLOSE”, volume=下单手数)
print(“我平多仓了,当前仓位:”,当前多仓)
#print(“当前可用资金:”,api.get_account())
当前空仓 = api.get_position(合约品种)

if (K线行情.close.iloc[-1]<五日均线.iloc[-1]):

order = api.insert_order(symbol=合约品种, direction=”SELL”, offset=”OPEN”, volume=下单手数)
调整仓位.set_target_volume(-下单手数)
print(“我开仓了,空单持仓:”,当前空仓)

当前空仓 = api.get_position(合约品种)

if (K线行情.close.iloc[-1]>五日均线.iloc[-1]):
order = api.insert_order(symbol=合约品种, direction=”BUY”, offset=”CLOSE”, volume=下单手数)
调整仓位.set_target_volume(0)
print(“我平空仓了,当前仓位:”,当前空仓)

#print(“当前可用资金:”,api.get_account())
except BacktestFinished as e:
print(api.trade.log)
pass
api.close

wujing91 已回答的问题 2021年5月17日