CTP期货接口python写多策略多品种多周期案例源码

"""
关注公众号: Ctp接口量化
​
"""

from API import *
class MACDStrategy(Strategy):
    def __init__(self):
        super().__init__()
        # self.symbol_lsit = ["UR301","rb2301","au2212","IF2211","IC2211","i2301","eb2211","MA301"]  #订阅合约
        self.symbol_lsit = ["i2301"]  #订阅合约
        self.BarType = BarType.Min5  #K线周期
        self.StrategyType = StrategyType.Bar  #策略类型  StrategyType.Renko   StrategyType.Bar   StrategyType.Tick
    def on_tick(self, tick=None):
        print(tick.InstrumentID,tick.LastPrice)  
    def on_bar(self, tick=None, Bar=None):
        symbol = tick.InstrumentID   #合约代码
        Bid = tick.BidPrice1    #买价
        Ask = tick.AskPrice1    #卖价
        LastPrice = tick.LastPrice  #最新价
        #print(symbol) #合约
        #print(tick.LastPrice) #合约tick.UpdateTime
        # print(tick.UpdateTime) #合约tick.UpdateTime
        # print(Bar[0]["symbol"]) #合约
        kline = Bar[0]["data"]    # K 线数据
        if len(kline) <= 35:   # 小于35 条 退出 
            return   
        # K,D,J  = self.KDJ(kline) # 取KDJ指标数组
        # UP,MB,DN  = self.BOLL(kline) # 取BOLL指标数组
        # EMA  = self.EMA(kline,60) # 取EMA指标数组
        # RSI  = self.RSI(kline) # 取RSI指标数组
        # MA1  = self.MA(kline,30) # 取MA指标数组Channels
        # MA2  = self.MA(kline,60) # 取MA指标数组Channels
        dif,dea,macd  = self.MACD(kline) # 取MACD指标数组
        close,High,low = self.tick(kline)      # 取收盘价数组 # 获取最新价格(卖价)
        # print(self.Get_Position(symbol))
        Pos = self.GetPosition(symbol)
        # print(Pos)
        # 开多单
        if Pos["Direction"]=="None" and dif[-1]>dea[-1] and dif[-2] < dea[-2] and dea[-1] > 0:
            print(symbol) #合约
            print("MACD策略开多")
            最低价 = min(low[-10:])
            止盈 = Ask + (Ask-最低价)*3
            # self.send(symbol, DirectionType.Buy, OffsetType.Open, Ask, 3, OrderType.Limit)  # # OrderType.FOK   OrderType.FAK   OrderType.Market
            self.send(symbol, DirectionType.Buy, OffsetType.Open, Ask, 3, OrderType.Limit,止损=最低价,止盈=止盈,移动止损=最低价)  # # OrderType.FOK   OrderType.FAK   OrderType.Market
        # # 开空单
        if Pos["Direction"]=="None" and dif[-1]<dea[-1] and dif[-2] > dea[-2] and dea[-1] < 0:
            print(symbol) #合约
            print("MACD策略开空")
            最高价 = max(High[-10:])
            止盈 = Bid - (最高价-Bid)*3
            # self.send(symbol, DirectionType.Sell, OffsetType.Open, Bid, 3, OrderType.Limit)   # # OffsetType.Open   OffsetType.Close   OffsetType.CloseToday  OffsetType.CloseYesterday
            self.send(symbol, DirectionType.Sell, OffsetType.Open, Bid, 3, OrderType.Limit,止损=最高价,止盈=止盈,移动止损=最高价)   # # OffsetType.Open   OffsetType.Close   OffsetType.CloseToday  OffsetType.CloseYesterday
        # # 平多单
        if Pos["Direction"]==DirectionType.Buy and dif[-1]<dea[-1] and dif[-2] > dea[-2]:
            print(symbol) #合约
            print("MACD策略平多单")
            self.send(symbol, DirectionType.Sell, OffsetType.Close, Bid, Pos['Volume'], OrderType.Limit)         
        # # 平空单        
        if Pos["Direction"]==DirectionType.Sell and dif[-1]>dea[-1] and dif[-2] < dea[-2]:
            print(symbol) #合约
            print("MACD策略平空单")
            self.send(symbol, DirectionType.Buy, OffsetType.Close, Ask, Pos['Volume'], OrderType.Limit)
        if 'kwargs' in Pos.keys():
            # print(Pos["kwargs"])
            if Pos["Direction"]==DirectionType.Buy and LastPrice<Pos["kwargs"]["止损"]:
                print(symbol) #合约
                print("MACD策略止损多单")
                self.send(symbol, DirectionType.Sell, OffsetType.Close, Bid, Pos['Volume'], OrderType.Limit)         
            # # 平空单        
            if Pos["Direction"]==DirectionType.Sell and LastPrice>Pos["kwargs"]["止损"]:
                print(symbol) #合约
                print("MACD策略止损空单")
                self.send(symbol, DirectionType.Buy, 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!对于CTP期货交易,您可以使用Python编程语言进行开发。CTP(中国金融期货交易所)是国内常用的期货交易接口之一,可以通过它来进行期货交易。 在Python中,您可以使用CTP官方提供的API接口进行开发。首先,您需要下载并安装CTP的API。然后,您可以使用Python代码调用API来连接到CTP服务器,并进行相关的交易操作。 以下是一个简单的示例代码,演示了如何使用Python进行CTP期货交易: ```python from time import sleep from ctypes import * from threading import Thread # 加载CTP动态链接库 ctp = cdll.LoadLibrary('thosttraderapi_se.dll') class MyTrader: def __init__(self): self.api = ctp.CThostFtdcTraderApi_CreateFtdcTraderApi() self.api.RegisterSpi(self) # 设置服务器信息等 self.api.RegisterFront("tcp://xxx.xxx.xxx.xxx:xxxx") self.api.Init() # 实现相关回调函数 def OnFrontConnected(self): print("已连接到服务器") # 登录账户 req = ctp.CThostFtdcReqUserLoginField() # 设置账户信息等 self.api.ReqUserLogin(req, 0) # 其他回调函数... # 实现具体的交易逻辑 def do_trade(self): # 下单逻辑... pass if __name__ == '__main__': trader = MyTrader() # 创建交易对象 Thread(target=ctp.CThostFtdcTraderApi_Init, args=(trader.api,)).start() # 在新线程中初始化API sleep(1) # 等待API初始化完成 trader.do_trade() # 执行交易逻辑 ``` 在上述代码中,您需要根据您自己的账户信息和服务器地址进行相应的设置。然后,您可以根据需要实现各种回调函数和交易逻辑。 请注意,上述代码仅为示例,实际使用时可能需要根据具体情况进行适当的修改和完善。同时,为了保证交易的稳定性和安全性,建议您在实际应用中进行充分的测试和验证。 希望以上信息能对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值