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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速集成DeepSeek到项目

DeepSeek API-KEY 获取 登录DeekSeek 官网&#xff0c;进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存&#xff0c;后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码&#xff0c;具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…

关于浏览器缓存的思考

问题情境 开发中要实现一个非原生pdf预览功能&#xff0c;pdf链接放在一个固定的后台地址&#xff0c;当重新上传pdf后&#xff0c;预览pdf仍然是上一次的pdf内容&#xff0c;没有更新为最新的内容。 查看接口返回状态码为 200 OK(from disk cache)&#xff0c; 表示此次pdf返回…

MAAS | Ollama 搭建本地 AI 大模型 deepseekWeb 界面调用

目录 一、环境准备二、安装 Ollama三、下载并部署 DeepSeek 模型四、简单交互五、通过 Web 界面调用大模型 在当今人工智能快速发展的时代&#xff0c;本地部署大语言模型赋予了用户更高的灵活性和个性化服务体验。本文介绍了如何准备环境、安装Ollama框架、下载并部署DeepSeek…

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…

Baklib助力内容中台实施最佳实践的关键要素与成功案例

内容概要 内容中台的实施对于现代企业在数字化转型过程中具有重要的战略意义。内容中台不仅提升内容管理的效率&#xff0c;还能为企业提供更灵活的内容运营能力。在实施过程中&#xff0c;关键在于了解如何构建有效的架构设计、选择适合的技术、以及促进团队协作。尤其是像Ba…

选择 JxBrowser 还是 SWT Browser

当您需要在 SWT 应用程序中显示网页内容时&#xff0c;通常有两种选择&#xff1a;内置的 Browser 小部件或像 JxBrowser 这样的商业选项。 本文将详细剖析两者之间的差异&#xff0c;帮助您根据自身需求做出正确选择。 简而言之 内置的 Browser 是一个简单但功能可靠的小部…

RoboGrasp:一种用于稳健机器人控制的通用抓取策略

25年1月来自北京大学和哈佛大学的论文“RoboGrasp: A Universal Grasping Policy for Robust Robotic Control”。 模仿学习和世界模型在推进通用机器人学习方面显示出巨大的潜力&#xff0c;而机器人抓取仍然是实现精确操控的关键挑战。现有方法通常严重依赖机械臂状态数据和…

金仓数据库-KingbaseES-学习-01-单机部署(非图形化安装)

目录 一、环境信息 二、介绍 三、下载地址 四、安装步骤 1、配置内核参数 &#xff08;1&#xff09;文件系统相关 &#xff08;2&#xff09;共享内存与信号量&#xff08;IPC&#xff09; &#xff08;3&#xff09;网络与端口配置 &#xff08;4&#xff09;关键场…

双周报Vol.65:新增is表达式、字符串构造和数组模式匹配增强、IDE模式匹配补全增强...多项技术更新!

MoonBit更新 新增 is 表达式 这个表达式的语法形式为 expr is pat&#xff0c;这个表达式为 Bool 类型&#xff0c;当 expr 符合 pat 这个模式的时候返回 true&#xff0c;比如&#xff1a; fn use_is_expr(x: Int?) -> Unit {if x is Some(i) && i > 10 { .…

【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?

目录 一、整体规划 1. 了解基本概念与背景 2. 学习资料的选择 3. 学习路径与规划 4. 学习建议 5. 注意事项 6. 参考学习资料 二、详细计划 阶段 1&#xff1a;了解基础&#xff08;1-2 周&#xff09; 阶段 2&#xff1a;深入掌握核心功能&#xff08;3-4 周&#xf…

查出 product 表中所有 detail 字段包含 xxx 的完整记录

您可以使用以下 SQL 查询语句来查出 product 表中所有 detail 字段包含 oss.kxlist.com 的完整记录&#xff1a; SELECT * FROM product WHERE INSTR(detail, oss.kxlist.com) > 0;下面是detail字段包含的完整内容 <p><img style"max-width:100%;" src…

深度剖析责任链模式

一、责任链模式的本质&#xff1a;灵活可扩展的流水线处理 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是行为型设计模式的代表&#xff0c;其核心思想是将请求的发送者与接收者解耦&#xff0c;允许多个对象都有机会处理请求。这种模式完美解决了以下…

大数据项目7:基于大数据的天气数据分析和可视化系统

项目简介 本项目主要研究的内容是基于大数据分析和挖掘的技术&#xff0c;结合海量的天气数据&#xff0c;对异常灾害数据进行分析和预测&#xff0c;发现异常气象中的规律。当下大数据的技术正在高速发展&#xff0c;并且在教育&#xff0c;金融&#xff0c;农业&#xff0c…

PyQt学习记录01——加法计算器

0. 安装配置 0.1 安装相关库 首先打开你的PyCharm程序&#xff0c;然后新建一个目录用于学习&#xff0c;其次在terminal中输入 pip install pyqt5如果你不具有科学上网能力&#xff0c;请改为国内源 pip install pyqt5 -i https://pypi.douban.com/simple然后安装pyqt相关…

pytest测试专题 - 1.2 如何获得美观的测试报告

<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细&#xff0c;用例在执行调试时还算比较方便阅读和提取失败信息&#xff0c; 但对于大量测试用例运行时&#xff0c;可能会存在以下不足 报文被冲掉测试日志没法归档 …

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…

树莓派上 基于Opencv 实现人脸检测与人脸识别

一&#xff0c;需求 基于树莓派4b&#xff0c;usb1080p摄像头&#xff0c;实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸&#xff0c;浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸&#xff0c;官方解决不了。最后只能用opencv自…

机器学习10-卷积和卷积核3

机器学习10-卷积和卷积核3 纹理表示卷积神经网络全链接神经网络的瓶颈卷积网络中的卷积操作特征响应图组尺寸计算 池化操作示例 图像增强翻转随机缩放抠图色彩抖动其他方案1. 平移2. 旋转3. 拉伸4. 径向畸变5. 裁剪 纹理表示 如何去表示纹理&#xff1f; 基于卷积核组的纹理表…

Ollama部署DeepSeek(windows or ubuntu)

Ollama(官网是https://ollama.com/)是一个专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计的开源框架。它简化了大型语言模型的部署过程&#xff0c;提供了轻量级与可扩展的架构&#xff0c;使得研究人员、开发人员和爱好者能够更加方便地在本地…

嵌入式知识点总结 操作系统 专题提升(五)-内存

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.在1G内存的计算机能否malloc&#xff08;1.2G&#xff09;&#xff1f;为什么&#xff1f; 2.malloc能申请多大的空间&#xff1f; 3.内存管理有哪几种方式&#xff1f; 4.什…