返回列表 发布新帖

量化研究--QMT开发漂亮的界面策略

34 1
发表于 昨天 16:48 | 显示全部楼层 阅读模式

风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎

我们在做QMT策略开发中,经常看见,其他人开发的漂亮的参数面板,不需要再源代码里面修改参数分别方便,还有提示,这样的话可以加密策略,再外输入参数,可以保护自己的策略,比如我写的简单例子

589e374922bbf0f5152cf759e54698ef.png

第一步我们需要建立一个xml文件和策略的名称保持一样,这样系统才能读取到界面的xml,先做一下界面文件xml的配置,复制和策略名字一样的xml文件到qmt下面,

c6ec0eeee3c5514bb9e5d1a047ad2cf9.png

点击qmt安装路径

02042c3229e3059253849bf4e7b27759.png

选择python文件夹

212ae8bbc0f770092b5b24820ba738c1.png

打开formulaLayout文件夹,把xml文件夹放在这个文件下面就可以

3d33f631813095989ce344ea31b02264.png

这样就完成了界面的配置,现在开始开发一个完整的xml,xml框架参考

<?xml version="1.0" encoding="UTF-8"?>    <!-- 1. XML声明(必须) -->
<TCStageLayout>                           <!-- 2. 根节点(必须) -->
    <control note="...">                  <!-- 3. control节点(必须) -->
        <variable note="...">             <!-- 4. variable节点(必须) -->
            <item .../>                   <!-- 5. item节点(至少一个) -->
            <item .../>
        </variable>
    </control>
</TCStageLayout>

我们主要需要编写的部分是item这个部分,其他的部分基本是固定的

<?xml version="1.0" encoding="UTF-8"?>
<TCStageLayout>
    <control note="控件组说明">
        <variable note="变量说明">
            <item bind="字段ID" name="显示名称" note="提示说明" value="默认值" type="控件类型"/>
        </variable>
    </control>
</TCStageLayout>

5f22700a19b907779b823bcf5ac657cf.png

bind,在qmt中绑定的参数名称,name,参数名称可以随便取,只需要绑定的参数bind唯一就可以,value默认的参数值,type是参数的类型,note,参数的说明提示,鼠标放在qmt的界面上会显示的提示

4709b2e1bd01e719f8589e3a2b5d75d1.png

下面看一下type类型,包含了我们常见的输入,单选,下拉,多选框等

1bb0d6f140b33c6b21eb02bee1f14153.png

简单的不同类型的参考

Input 输入框

<item bind="字段名" name="显示名" note="提示" value="默认值" type="input"/>

Combo 下拉框

<item list="选项1,选项2,选项3" bind="字段名" name="显示名" note="提示" value="默认值" type="combo"/>
<!-- 可选:comboType="类型标识" -->

Radio 单选框

<item list="选项1,选项2,选项3" bind="字段名" name="显示名" note="提示" value="默认值" type="radio"/>

CheckBox 复选框

<item bind="字段名" name="显示名" note="提示" value="True/False" type="checkBox"/>

66a6f22f4ea5d6c1311bca858f67bc69.png

在外面写完xml界面,需要怎么样在qmt文件读取这个参数,只需要外面使用的参数和 xml界面里面的bind绑定的参数一样就可以,账户,账户类型是qmt界面自带的参数

e5a8e3cad6ec0c22e5824e7f8b2e11c4.png

来自界面的这个部分,每一个qmt策略都有

c33dafdd4647925a150b466fc7de562a.png

只需要参数名称和界面xml里面的bind一样就会自动加载

5a4e1f1e637a3fb7ff0d280094c64974.png

a3cacc44b639b7d932b9d96b5833f3b9.png

界面类型的策略参数来自外部,直接在编辑里面点击运行是加载不了参数的,需要点击模型交易,弹出界面才会读取到界面的全部内容

9ded8e78ac74c295659a84747651d22f.png

系统读取的界面参数的和内容

330eb115e54b91baf045f15eb89b91b6.png

不懂的内容问我就可以,加我备注入群可以加入量化研究群

8ef8f1d641c7d71cd4f3dd85e877deb7.jpg

xml界面内容的参考,包含了常见的全部内容,策略的名称必须和xml文件的名称保持一样

<?xml version="1.0" encoding="UTF-8"?>
<TCStageLayout>
    <control note="第一个界面策略例子 - 策略参数配置">
        <variable note="策略参数">
            
            <!-- ==================== 1. 输入类型 (Input) ==================== -->
            <item bind="strategy_name" name="策略名称" note="自定义策略名称" value="我的第一个策略" type="input"/>
            <item bind="initial_capital" name="初始资金" note="策略启动时的初始资金(万元)" value="100" type="input"/>
            <item bind="max_position" name="最大持仓比例" note="单品种最大持仓占总资金比例" value="0.3" type="input"/>
            <item bind="stop_loss_rate" name="止损比例" note="触发止损的亏损比例" value="0.05" type="input"/>
            <item bind="take_profit_rate" name="止盈比例" note="触发止盈的盈利比例" value="0.10" type="input"/>
            <item bind="trade_interval" name="交易间隔" note="两次交易之间的最小间隔(秒)" value="5" type="input"/>
            <item bind="max_daily_trades" name="每日最大交易次数" note="单日允许的最大交易笔数" value="20" type="input"/>
            <item bind="slippage" name="滑点" note="预期成交滑点" value="0.01" type="input"/>
            
            <!-- ==================== 2. 下拉类型 (Combo) ==================== -->
            <item list="上证50,沪深300,中证500,创业板指" bind="index_code" name="跟踪指数" note="策略跟踪的标的指数" value="沪深300" type="combo"/>
            
            <item list="日线,4小时,1小时,30分钟,15分钟,5分钟" bind="timeframe" name="K线周期" note="策略使用的K线时间周期" value="30分钟" type="combo"/>
            
            <item list="MACD,RSI,布林带,均线,KDJ" bind="indicator_type" name="主图指标" note="策略使用的主要技术指标" value="均线" type="combo"/>
            
            <item list="收盘价,开盘价,最高价,最低价,加权价" bind="price_type" name="价格类型" note="计算指标使用的价格类型" value="收盘价" type="combo"/>
            
            <!-- ==================== 3. 单选框类型 (Radio) ==================== -->
            <item list="多头,空头,多空双向" bind="direction" name="交易方向" note="策略允许的交易方向" value="多空双向" type="radio"/>
            
            <item list="日内,隔夜,混合" bind="holding_type" name="持仓方式" note="策略的持仓周期类型" value="日内" type="radio"/>
            
            <item list="激进,稳健,保守" bind="risk_level" name="风险等级" note="策略的风险偏好程度" value="稳健" type="radio"/>
            
            <item list="趋势跟踪,均值回归,突破交易" bind="strategy_style" name="策略风格" note="策略的核心交易逻辑" value="趋势跟踪" type="radio"/>
            
            <!-- ==================== 4. 复选框类型 (CheckBox) ==================== -->
            <item bind="enable_stop_loss" name="启用止损" note="是否启用止损功能" value="True" type="checkBox"/>
            
            <item bind="enable_take_profit" name="启用止盈" note="是否启用止盈功能" value="True" type="checkBox"/>
            
            <item bind="enable_trailing_stop" name="启用移动止损" note="是否启用动态跟踪止损" value="False" type="checkBox"/>
            
            <item bind="auto_restart" name="自动重启" note="策略异常时是否自动重启" value="True" type="checkBox"/>
            
            <item bind="send_email_alert" name="邮件预警" note="交易信号触发时是否发送邮件通知" value="False" type="checkBox"/>
            
            <item bind="enable_backtest" name="回测模式" note="是否以回测模式运行(不真实下单)" value="False" type="checkBox"/>
            
            <item bind="show_chart" name="显示图表" note="是否实时显示K线图表" value="True" type="checkBox"/>
            
        </variable>
    </control>
</TCStageLayout>

qmt文件内容代码参考

#encoding:gbk
'''
第一个界面策略例子
'''
import pandas as pd
import numpy as np
import talib
def init(c):
    c.text = {
        #系统自带参数****************
        "账户":str(account),
        "账户类型":str(accountType),
        ##########################
        "策略名称": strategy_name,
        "初始资金": initial_capital,
        "最大持仓比例": max_position,
        "止损比例": stop_loss_rate,
        "止盈比例": take_profit_rate,
        "交易间隔": trade_interval,
        "每日最大交易次数": max_daily_trades,
        "滑点": slippage,
        "跟踪指数": index_code,
        "K线周期": timeframe,
        "主图指标": indicator_type,
        "价格类型": price_type,
        "交易方向": direction,
        "持仓方式": holding_type,
        "风险等级": risk_level,
        "策略风格": strategy_style,
        "启用止损": enable_stop_loss,
        "启用止盈": enable_take_profit,
        "启用移动止损": enable_trailing_stop,
        "自动重启": auto_restart,
        "邮件预警": send_email_alert,
        "回测模式": enable_backtest,
        "显示图表": show_chart
    }
    print(c.text)

评论1

落花忆流年楼主
发表于 昨天 17:06 | 显示全部楼层
不懂的问我就可以作者微信xg_quant

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表