1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 期货实盘自动止损止盈策略 python 策略开发

期货实盘自动止损止盈策略 python 策略开发

时间:2024-02-01 09:49:02

相关推荐

期货实盘自动止损止盈策略 python 策略开发

郑重声明:使用本策略默认已清楚任何程序化自动交易都会带来不可控的风险,本人不承担任何责任。

本人自己用的实盘自动止损分享。

简单说明:

1、目前是单个交易标的的自动止盈止损。

2、可设定不同的止盈止损线。

3、首先检查是否触发止损如果是直接止损,然后检查是否有仓位且挂单止盈。

注意事项:

①不可用出有锁仓的标的。

更新:

0420 ①更新特殊情况下问题处理;②增加根据仓位数量放大止损倍数;

'''郑重声明:使用本策略默认已清楚任何程序化自动交易都会带来不可控的风险,本人不承担任何责任。@author: Leo'''import tqsdkimport timeimport sysapi = tqsdk.TqApi()account=api.get_account()symbol1="DCE.i"quote1=api.get_quote(symbol1)position1=api.get_position(symbol1)trade1=tqsdk.TargetPosTask(api,symbol1)##########local_time=0min_tick=0.5stop_lost=-300keep_profit=0.5################class# exitdef do_exit(close_time):time_str = time.strftime("%Y-%m-%d", time.localtime()) + ' ' + close_timetime_stamp = time.mktime(time.strptime(time_str, "%Y-%m-%d %H:%M:%S"))if 0 < int(time.time() - time_stamp) < 60 * 5:# file_open = open("ag_arbitrage.txt", 'a')# file_open.write(str(account.balance) + ",")# file_open.close()sys.exit()# 非交易时间def close_trade():# do_exit("11:25:00")do_exit("15:00:00")# do_exit("22:55:00")# get avlorderiddef get_avlorderid(code_list):avlorderid_list = []orders = api.get_order()for avloid in orders.keys():avlorderinfo = api.get_order(avloid)for code in code_list:if avlorderinfo.instrument_id == code.split(".")[1] and avlorderinfo.status == "ALIVE":avlorderid_list.append(avlorderinfo.order_id)return avlorderid_list# close the avlpositiondef close_avlposition(position, quote):symbol = position.exchange_id + "." + position.instrument_idif position.pos_short_today > 0:oid = api.insert_order(symbol=symbol, direction="BUY", offset="CLOSETODAY", volume=position.pos_short,limit_price=quote.ask_price1)# api.cancel_order(oid)print("BUY CLOSETODAY", local_time)if position.pos_short_his > 0:oid = api.insert_order(symbol=symbol, direction="BUY", offset="CLOSE", volume=position.pos_short_his,limit_price=quote.ask_price1)# api.cancel_order(oid)print("BUY CLOSE", local_time)if position.pos_long_today > 0:oid = api.insert_order(symbol=symbol, direction="SELL", offset="CLOSETODAY", volume=position.pos_long,limit_price=quote.bid_price1)# api.cancel_order(oid)print("SELL CLOSETODAY", local_time)if position.pos_long_his > 0:oid = api.insert_order(symbol=symbol, direction="SELL", offset="CLOSE", volume=position.pos_long_his,limit_price=quote.bid_price1)# api.cancel_order(oid)print("SELL CLOSE", local_time)# api.wait_update()# cancel orderdef cancel_order(code, quote):avloid_list = get_avlorderid([code])if len(avloid_list) > 0:for avloid in avloid_list:of = api.get_order(avloid)if abs(of.limit_price - quote.last_price) > 5 and of.instrument_id == code.split(".")[1]:api.cancel_order(avloid)# api.wait_update()print("cancel order", local_time)while True:close_trade()api.wait_update()# get some varslocal_time = time.asctime(time.localtime(time.time()))if api.is_changing(quote1,'datetime'):position_profit=position1.position_profitif position_profit>0 or position_profit<0:if position_profit <= stop_lost*abs(position1.pos):avlorder = get_avlorderid([symbol1])if len(avlorder) > 0:cancel_order(symbol1, quote1)if len(avlorder) == 0:trade1.set_target_volume(0)print("stop lost")else:avlorder = get_avlorderid([symbol1])if len(avlorder)==0:#position longif position1.position_price_long!=None and position1.position_price_long>0:api.insert_order(symbol=symbol1,direction="SELL",offset="CLOSE",volume=position1.pos_long,limit_price=position1.position_price_long+keep_profit)print("send close long")# position shortif position1.position_price_short != None and position1.position_price_short > 0:api.insert_order(symbol=symbol1, direction="BUY", offset="CLOSE",volume=position1.pos_short,limit_price=position1.position_price_short - keep_profit)print("send close short")

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