目录

一、模型介绍

二、代码实现及整体注释

三、拆解学习


一、模型介绍

1.使用pythonGO的策略模板实现最简单的划线交易

2.对系统中的基本运行和常见问题如命名,下单标志,下单方向有明确的认识

二、代码实现及整体注释

import datetime
from ctaBase import *
from ctaTemplate import *   #引用pythonGo中给出的相应策略模板


class Test1(CtaTemplate):  #让我们的类继承模板,名字Test1要和文件名保持一致,不然会报错
    """测试策略"""
    className = "Test1"
    varList = []
    # 参数映射表
    paramMap = {
        'exchange': '交易所',
        'vtSymbol': '合约',
        'volume': '委托数量',
        'price': '触发价格'
        'direction': '下单方向'
    }
    paramList = list(paramMap.keys())
    # 变量映射表
    varMap = {
        'trading': "交易中",
        'pos': "持仓"
    }                          #如果有指标的话,这里可以显示实时的指标运行情况,这里只看策略运行情况和持仓
       
    
    def __init__(self, ctaEngine=None, setting={}):
        """Constructor"""
        super().__init__(ctaEngine, setting)   #调用父类的方法,写在下面是保留自己设置的参数
        self.exchange = ''
        self.vtSymbol = ''
        self.volume = 1
        self.price = 0
        self.orderFlag = True   #很重要!控制只下一次单
        self.direction = 'buy'

    def output(self, s):  #做啥操作的时候把时间附上
        super().output(f"[{datetime.datetime.now().replace(microsecond=0)}] {s}")
        
    def onTick(self, tick):
        super().onTick(tick)
        self.output(f"{tick.vtSymbol} {tick.lastPrice}") # 输出接收到行情的最新价(两个合约)

        if tick.lastPrice == self.price and self.orderFlag: #触发设定价格且没下过单
            getattr(self,self.direction)(self.price, self.volume) #安装设定手和价格下单
            #self.buy(self.price, self.volume)
            self.orderFlag = False

    def onStart(self):
        super().onStart()
        self.orderFlag = True
        self.output(f'交易所:{self.exchange} 合约:{self.vtSymbol}') #pythonGO里面输出不能用print

    def onTrade(self, trade):
        super().onTrade(trade, log=True)

    def onStop(self):
        super().onStop()

        

三、拆解学习

面板设置参考0040-量化第八天:PythonGo-如何在软件上创建可视化参数设置_九九九九为功的博客-CSDN博客

    def onStart(self):
        super().onStart()
        self.orderFlag = True
        self.output(f'交易所:{self.exchange} 合约:{self.vtSymbol}') #pythonGO里面输出不能用print


    def onStop(self):
        super().onStop()

分别是加载,暂停

    def onTick(self, tick):
        super().onTick(tick)
        self.output(f"{tick.vtSymbol} {tick.lastPrice}") # 输出接收到行情的最新价(两个合约)

        if tick.lastPrice == self.price and self.orderFlag: #触发设定价格且没下过单
            getattr(self,self.direction)(self.price, self.volume) #安装设定手和价格下单
            #self.buy(self.price, self.volume)
            self.orderFlag = False

每秒2次调用tick几倍数据,运行不断输出最新价

在达到设定价格且交易过时下单,下单后标记已交易

    def output(self, s):  #做啥操作的时候把时间附上
        super().output(f"[{datetime.datetime.now().replace(microsecond=0)}] {s}")

输出就变成

 

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐