0046-量化第十一天:PythonGo-第一个简单策略

本文介绍了使用PythonGo实现的首个简单交易策略,包括模型介绍、代码实现和拆解学习。通过策略模板进行划线交易,并理解系统运行、命名、下单逻辑等关键点。同时,文章还提及了软件的可视化参数设置和数据调用方法。

目录

一、模型介绍

二、代码实现及整体注释

三、拆解学习


一、模型介绍

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}")

输出就变成

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值