当前位置: 首页 > article >正文

[QMT量化交易小白入门]-二十二、deepseek+cline+vscode,让小白使用miniQMT量化交易成为可能

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。
QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

文章目录

      • 相关阅读
      • DeepSeek新用户注册
      • cline 集成
      • 指令测试

相关阅读

小白也能做量化:零门槛QMT、Ptrade免费送
量化交易入门:如何在QMT中配置Python环境,安装第三方依赖包
量化交易策略:多因子选股结合布林带择时


DeepSeek凭借低廉地训练成本火爆出圈,引发的美股科技股狂跌,英伟达下跌16.86%,创历史上最大单日个股蒸发规模,市值蒸发5888.62亿美元(约合人民币4.27万亿元)。甚至由于太过火爆,开始限制海外用户注册,国内用户暂时不受影响。DeepSeek新用户可以通过官网注册。

DeepSeek新用户注册

在这里插入图片描述
在这里插入图片描述
目前新用户免费赠送500万tokens,即使用超了,续费价格也极低:

在这里插入图片描述
创建自己的API key,记录下来,(最新访问人数过多,又新推了app,API 平台可能暂时不开放)
在这里插入图片描述

cline 集成

cline 是一款集成在 IDE 中的自主编码代理,专注于自动化软件开发任务,它为软件开发者和编程人员提供了高效的代码编写、调试和项目管理方案,显著提升开发效率。VSCode,作为一款功能强大且高度可定制的代码编辑器,其简洁直观的界面、丰富的插件生态以及强大的代码编辑功能,为编写量化策略代码提供了绝佳的平台。当将 VSCode、Cline 和 DeepSeek 这三大利器巧妙组合在一起,就如同为量化小白打造了一艘坚固而快速的战舰。
在VScode中搜索插件cline,点击安装:
在这里插入图片描述
配置cline的api提供方,选择deepseek,输入刚才保存的api key:
在这里插入图片描述
测试下"你是谁“,发现他有很清晰的自我定位,”我是一个高度熟练的软件工程师,拥有多种编程语言、框架、设计模式和最佳实践的广泛知识。我可以帮助你完成编程相关的任务,比如编写代码、调试程序、优化算法等。“

sk-b2f0134e51ce48fab065cf4111fce243
此外,还可以读取本地的文件结构,分析出了当前工程中正在进行的项目,将自己已经写过的miniQMT的量化交易喂给他,并给他足够的权限,创建文件,执行python命令等。

指令测试

给他指令“请根据miniQMT的api,编写一个布林带突破策略”,他会先分析需求,再拆分任务,列出要点,最后编写代码,一切都是按真实的软件工程的步骤,需求分析-概要设计-详细设计-编码。

根据用户要求,我需要使用迅投miniQMT API编写一个布林带突破策略。这个策略需要:

获取历史K线数据计算布林带指标
实时监控价格突破布林带上下轨
实现突破时的买卖逻辑
使用miniQMT的交易接口进行下单
我将基于用户现有的股票打板策略.py文件结构,创建一个新的布林带策略文件。

在这里插入图片描述
执行后,可以看到已经新建了“布林带突破策略.py“文件,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@Author       : 木头左
@Date         : 2024-12-22 16:47:36
@LastEditTime : 2025-01-05 20:14:41
@Description  : 布林带突破策略
@欢迎关注木头左,学习更多量化交易知识,共同进步,微信号:bigleft0
@Copyright (c) 2024 by mutouzuo, All Rights Reserved. 
'''
from xtquant import xtdata,xttrader
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
import random,os,sys,math
from datetime import datetime
from xtquant.xttype import StockAccount
from xtquant.xttrader import XtQuantTrader
from xtquant import xtconstant
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import sys,schedule,json,time

class BollingerStrategy:
    def __init__(self):
        self.period = 20  # 布林带周期
        self.std_multiplier = 2  # 标准差倍数
        self.position = 0  # 当前持仓
        self.capital = 100000  # 初始资金
        self.stock_code = '000001.SZ'  # 默认交易标的
        
    def calculate_bollinger(self, close_prices):
        """计算布林带指标"""
        if len(close_prices) < self.period:
            return None, None, None
            
        rolling_mean = close_prices.rolling(window=self.period).mean()
        rolling_std = close_prices.rolling(window=self.period).std()
        
        upper_band = rolling_mean + (rolling_std * self.std_multiplier)
        lower_band = rolling_mean - (rolling_std * self.std_multiplier)
        
        return upper_band.iloc[-1], rolling_mean.iloc[-1], lower_band.iloc[-1]

    def handle_tick(self, tick_data):
        """处理实时行情"""
        if not tick_data:
            return
            
        # 获取历史K线
        hist_data = xtdata.get_market_data_ex(
            stock_list=[self.stock_code],
            period='1d',
            start_time=(datetime.now() - timedelta(days=30)).strftime('%Y%m%d'),
            end_time=datetime.now().strftime('%Y%m%d')
        )
        
        close_prices = pd.Series(hist_data[self.stock_code]['close'])
        upper, middle, lower = self.calculate_bollinger(close_prices)
        
        if upper is None:
            return
            
        last_price = tick_data[self.stock_code]['lastPrice']
        
        # 突破上轨买入信号
        if last_price > upper and self.position <= 0:
            self.buy_signal()
            
        # 突破下轨卖出信号
        elif last_price < lower and self.position >= 0:
            self.sell_signal()
            
    def buy_signal(self):
        """买入信号处理"""
        print(f"{datetime.now()} 买入信号触发")
        # 计算买入数量
        vol = int(self.capital * 0.1 / xtdata.get_market_data_ex(
            stock_list=[self.stock_code],
            period='1d',
            start_time=datetime.now().strftime('%Y%m%d'),
            end_time=datetime.now().strftime('%Y%m%d')
        )[self.stock_code]['close'][-1] / 100) * 100
        
        if vol > 0:
            xt_trader.order_stock_async(
                acc, self.stock_code, xtconstant.STOCK_BUY, 
                vol, xtconstant.FIX_PRICE, 0, '布林带突破策略', '买入'
            )
            self.position += vol
            print(f"买入 {self.stock_code} {vol}股")
            
    def sell_signal(self):
        """卖出信号处理"""
        print(f"{datetime.now()} 卖出信号触发")
        if self.position > 0:
            xt_trader.order_stock_async(
                acc, self.stock_code, xtconstant.STOCK_SELL, 
                self.position, xtconstant.FIX_PRICE, 0, '布林带突破策略', '卖出'
            )
            print(f"卖出 {self.stock_code} {self.position}股")
            self.position = 0

# 初始化交易环境
path = r'E:\programData\qmt\userdata_mini'
acc = StockAccount('8886', 'STOCK')
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
xt_trader.start()
xt_trader.connect()

# 创建策略实例
strategy = BollingerStrategy()

# 订阅行情
xtdata.subscribe_quote(
    strategy.stock_code, 
    period='tick', 
    start_time='093000', 
    end_time='150000',
    callback=strategy.handle_tick
)

# 保持策略运行
while True:
    time.sleep(1)

大体的代码结构基本上都是完整的,但是有概率不能直接运行,通常是deepseek对函数的入参不太了解,或者是对第三方库api不熟悉,轻微调试一下就可以了。

Traceback (most recent call last):
  File "e:\programData\pythonProject\木头左量化\布林带突破策略.py", line 117, in <module>
    xtdata.subscribe_quote(
  File "D:\ProgramData\anaconda3\lib\site-packages\xtquant\xtdata.py", line 941, in subscribe_quote
    return client.subscribe_quote(bson.BSON.encode(meta), bson.BSON.encode(region), callback)
RuntimeError: start_time ill-formed, meta:3000, market:SZ

这种就是时间格式不对,点进api看下参数要求,修改一下,就可以了,简直是量化小白福音。
在这里插入图片描述

ai发展到最后,一定是像水、电、互联网一样成为基础设施,让普通大众便捷的使用,在此之前,谁先熟念地使用,就会占得先机。


http://www.kler.cn/a/542472.html

相关文章:

  • 计算机毕业设计——Springboot的疫情网课管理系统
  • ASP.NET Core程序的部署
  • 【STM32】ADC
  • 防御保护-----前言
  • 用 DeepSeek + Kimi 自动做 PPT,效率起飞
  • 【0401】Postgres内核 CREATE DATABASE database-name 源码实现 ①
  • MR30分布式IO模块:驱动智能制造工厂的工业互联与高效控制新范式
  • React进行路由跳转的方法汇总
  • 在 Qt 开发中,可以将 QML 封装成库
  • 基于Springmvc+MyBatis+Spring+Bootstrap+EasyUI+Mysql的个人博客系统
  • JVM的栈里面存的是栈帧,栈帧里面存的是什么?
  • Unity底层C#处理机制深度解析
  • eBPF入门教程(Ubuntu 24.04)
  • JavaScript设计模式 -- 工厂模式
  • 五、OSG学习笔记-矩阵变换
  • 25考研材料复试面试常见核心问题真题汇总,材料考研复试面试有哪些经典问题?材料考研复试过程最看重什么内容?
  • python C# 内存共享互传 图像 以及字符串
  • 蓝桥杯 Java B 组 - 第 1 周复习总结
  • 3、k8s项目的生命周期和yaml文件
  • uniapp商城之登录模块
  • 《深度学习》——CNN卷积神经网络模型及项目实例
  • 【Prometheus】MySQL主从搭建,以及如何通过prometheus监控MySQL运行状态
  • FTP(File Transfer Protocol)-文件传输协议
  • C++引用深度详解
  • Unity做2D小游戏5------多个动画互相转换
  • docker配置国内源