python 期货策略_Python版商品期货多品种均线策略

'''backteststart: 2019-07-01 09:00:00end: 2020-03-25 15:00:00period: 1dexchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]'''

import json

import re

import time

_bot = ext.NewPositionManager()

class Manager:

'策略逻辑控制类'

ACT_IDLE = 0

ACT_LONG = 1

ACT_SHORT = 2

ACT_COVER = 3

ERR_SUCCESS = 0

ERR_SET_SYMBOL = 1

ERR_GET_ORDERS = 2

ERR_GET_POS = 3

ERR_TRADE = 4

ERR_GET_DEPTH = 5

ERR_NOT_TRADING = 6

errMsg = ["成功", "切换合约失败", "获取订单失败", "获取持仓失败", "交易下单失败", "获取深度失败", "不在交易时间"]

def __init__(self, needRestore, symbol, keepBalance, fastPeriod, slowPeriod):

# 获取symbolDetail

symbolDetail = _C(exchange.SetContractType, symbol)

if symbolDetail["VolumeMultiple"] == 0 or symbolDetail["MaxLimitOrderVolume"] == 0 or symbolDetail["MinLimitOrderVolume"] == 0 or symbolDetail["LongMarginRatio"] == 0 or symbolDetail["ShortMarginRatio"] == 0:

Log(symbolDetail)

raise Exception("合约信息异常")

else :

Log("合约", symbolDetail["InstrumentName"], "一手", symbolDetail["VolumeMultiple"], "份,最大下单量", symbolDetail["MaxLimitOrderVolume"], "保证金率:", _N(symbolDetail["LongMarginRatio"]), _N(symbolDetail["ShortMarginRatio"]), "交割日期", symbolDetail["StartDelivDate"])

# 初始化

self.symbol = symbol

self.keepBalance = keepBalance

self.fastPeriod = fastPeriod

self.slowPeriod = slowPeriod

self.marketPosition = None

self.holdPrice = None

self.holdAmount = None

self.holdProfit = None

self.task = {

"action" : Manager.ACT_IDLE,

"amount" : 0,

"dealAmount" : 0,

"avgPrice" : 0,

"preCost" : 0,

"preAmount" : 0,

"init" : False,

"retry" : 0,

"desc" : "空闲",

"onFinish" : None

}

self.lastPrice = 0

self.symbolDetail = symbolDetail

# 持仓状态信息

self.status = {

"symbol" : symbol,

"recordsLen" : 0,

"vm" : [],

"open" : 0,

"cover" : 0,

"st" : 0,

"marketPosition" : 0,

"lastPrice" : 0,

"holdPrice" : 0,

"holdAmount" : 0,

"holdProfit" : 0,

"symbolDetail" : symbolDetail,

"lastErr" : "",

"lastErrTime" : "",

"isTrading" : False

}

# 对象构造时其他处理工作

vm = None

if RMode == 0:

vm = _G(self.symbol)

else:

vm = json.loads(VMStatus)[self.symbol]

if vm:

Log("准备恢复进度,当前合约状态为", vm)

self.reset(vm[0])

else:

if needRestore:

Log("没有找到" + self.symbol + "的进度恢复信息")

self.reset()

def setLastError(self, err=None):

if err is None:

self.status["lastErr"] = ""

self.status["lastErrTime"] = ""

return

t = _D()

self.status["lastErr"] = err

self.status["lastErrTime"] = t

def reset(self, marketPosition=None):

if marketPosition is not None:

self.marketPosition = marketPosition

pos = _bot.GetPosition(self.symbol, PD_LONG if marketPosition > 0 else PD_SHORT)

if pos is not None:

self.holdPrice = pos["Price"]

self.holdAmount = pos["Amount"]

Log(self.symbol, "仓位", pos)

else :

raise Exception(&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值