散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息
一、为什么要实现自动化交易
在瞬息万变的金融市场中,越来越多的散户投资者开始尝试构建自己的交易策略:有人通过技术指标捕捉趋势突破,有人利用基本面分析挖掘低估标的,还有人设计出复杂的网格交易或均值回归模型。然而,一个残酷的现实是——90%以上的个人策略最终因“执行脱节”而失效。
也许你会说我可以手动下单进行交易,作者本人亲自实验表明手动交易会有很多意想不到的情况出现。
-
1.时间与精力冲突
许多短线策略需要全天候盯盘(如分时均线突破、盘口挂单监测),但散户难以像职业交易员一样保持高强度专注。一位投资者曾自嘲:“凌晨三点起床盯外盘,结果白天上班时错过A股最佳卖点,策略再好也成了纸上谈兵。” -
2.人性的弱点:情绪化操作
即使策略逻辑清晰,手动执行时仍可能因恐惧(过早止损)、贪婪(延迟止盈)或从众心理(跟风追涨)而偏离计划。数据显示,超过70%的投资者承认曾在关键节点因情绪干扰做出错误决策。 -
3.复杂策略的“执行悖论”
高频调仓、多品种联动、动态止盈止损等操作对人工执行近乎苛刻。例如,一个简单的“股债动态平衡策略”需每月按比例调整持仓,但手动计算并下单极易出错;又如网格交易需在数百个价格档位挂单,人力根本无法完成。
而目前市面上并没有特别成熟且门槛低的工具可以帮我们实现各种复杂的自动化交易需求。尽管部分券商提供“条件单”功能,但其仅支持价格触发、定时交易等基础场景,无法适配个性化策略(如结合量价背离与新闻情绪分析的综合模型);而专业量化平台(如QMT)的高资金门槛和编程要求,又将普通投资者拒之门外。
对于散户而言,找到一种低门槛、高适配性、稳定可靠的自动化工具,意味着真正从“纸上谈兵”迈入“实战盈利”的质变——这不仅是效率的提升,更是投资认知的升维。
二、现有实现方法介绍
1.界面自动化工具(如pywinauto操作同花顺) 本系列教程将实现!
实现逻辑:通过模拟人工操作(点击、输入)控制交易软件界面。例如,用Python的pywinauto
库识别同花顺窗口控件,自动填写价格、数量并触发下单。
优势有,
-
低门槛:无需券商特殊权限,依赖现有交易软件即可实现。
-
灵活性:可适配多种交易软件(如同花顺、通达信、东方财富)
劣势有,
-
延迟风险:依赖本地软件运行,网络或硬件故障可能中断交易。
-
功能受限:无法实现高频交易或复杂策略的动态调整。
2.券商量化终端(如QMT、Ptrade) 本系列教程将实现!
实现逻辑:使用券商提供的专业量化平台(如中金QMT),通过内置API或策略编辑器编写交易逻辑,直接对接交易所系统执行订单。
优势有,
-
极速交易:支持高频操作,延迟低至毫秒级。
-
策略多样性:内置网格交易、算法拆单等模板,支持Python/Lua编程扩展。
-
风控完善:提供持仓监控、异常熔断等机制。
劣势有,
-
学习成本:需掌握量化框架及编程语言。
-
准入门槛高:通常需满足资金量要求(如QMT面向机构或高净值客户)。开通指南→
3. 同花顺内置条件单/策略交易 很简单也不实用,就不实现了~
实现逻辑:在同花顺软件中预设触发条件(如价格突破、定时交易),由本地或云端服务器监控并执行。
优势有,
-
无需编程:图形化界面操作,适合非技术用户。
-
基础功能免费:支持止盈止损、网格交易等常见策略。
劣势有,
-
功能局限:仅支持简单条件触发,无法自定义复杂逻辑。
三、进入本篇正题:如何通过pywinauto操作同花顺
首先是,前期准备工作:
环境搭建
-
1.安装Python环境(推荐Python 3.8+),配置好pip包管理工具。安装
pywinauto
库。 -
同花顺客户端配置
-
Inspect.exe(Windows SDK自带):用于查看窗口控件的属性(如类名、自动化ID)。
-
Spy++(Visual Studio工具):分析窗口层级结构。
-
2.安装辅助工具:
-
-
确保同花顺客户端为最新版本,避免因界面更新导致脚本失效。
-
登录账户并熟悉手动下单流程,明确需要自动化的操作步骤(如买入、卖出、撤单)。
-
关闭不必要的弹窗或提示(如风险提示),减少自动化干扰。
测试账户准备
-
强烈建议使用模拟账户,避免因脚本错误造成真实资金损失。
接着,明确需要学习的核心知识(如果你真想学会下面的每一个步骤都要亲自去学习尝试,遇到问题请问ai或查资料):
第一部分 pywinauto基础操作
-
连接应用程序
可以通过进程ID或窗口标题或者软件安装地址绑定同花顺客户端:
from pywinauto import Application
app = Application().connect(r'C:\APPS\同花顺软件\同花顺\xiadan.exe') # 根据实际窗口标题修改
注意这个界面才是下单界面,不是行情展示的界面窗口。
-
窗口与控件识别
-
使用
Inspect.exe(点击查看这是什么东西)
定位目标控件属性(如class_name
、automation_id
、name
)。 -
通过层级结构定位控件:
main_window = app.window(title="同花顺")
buy_button = main_window.child_window(title="买入", control_type="Button")
-
模拟操作
输入文本:edit_box.set_text("100")
点击按钮:button.click()
快捷键操作:type_keys("%s")
第二部分 同花顺界面结构分析
-
关键窗口与控件
登录窗口:账号输入框、密码输入框、验证码区域、登录按钮。
交易界面:股票代码输入框、买入/卖出选项卡、价格/数量输入框、下单按钮。
弹窗处理:确认对话框、错误提示框(如“价格超出涨跌幅限制”)。
动态控件应对
部分控件(如持仓列表)可能随数据变化刷新,需通过
wait
方法等待控件就绪:
buy_button.wait("exists", timeout=10).click() # 等待10秒直至控件出现
第三部分 同花顺界面中需要输入二维码情况的解决
-
Tesseract工具的使用(点击查看安装教程)
在操作账户的时候有时候会跳出输入“图形验证码”窗口,上面显示一些不规则(字符稍加扭曲变换得到的)的字符。tesseract-ocr(Optical Character Recognition)能够扫描字符,根据字符形状将其翻译成电子文本的过程。因此需要安装tesseract-ocr自动识别验证码。在Python中的额使用大概是这样:
def captcha_recognize(img_path):
import pytesseract
from PIL import Image
im = Image.open(img_path).convert("L")
# 1. threshold the image
threshold = 200
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out = im.point(table, "1")
# 2. recognize with tesseract
num = pytesseract.image_to_string(out)
return num
第四部分 异常处理与稳定性优化
-
网络延迟容错
添加重试机制,应对因网络卡顿导致的控件加载失败:
from pywinauto.timings import TimeoutError
try:
buy_button.click()
except TimeoutError:
print("控件未找到,尝试重新定位...")
-
日志记录
记录操作过程和错误信息,便于后期排查:
import logging
logging.basicConfig(filename="trade.log", level=logging.INFO)
-
防重复点击
通过状态标记避免因脚本卡顿导致的重复下单:
if not is_order_submitted:
submit_button.click()
is_order_submitted = True
接着,我们以获取当前账户的资金状况和持仓状况为例(在交易中实时获取这个两个信息是十分必要的),来进行一个实践。
注:代码逻辑参考于easytrader,下面的函数都是从相关的类中抽取出来的,所以会带有self.
首先我们看到,资金账户信息需要再在左边菜单栏切换到【查询F4】【资金股票】栏目后的右边展示,因此我们要先进行栏目的选择切换并获取右边的信息。
@property
def balance(self):
self._switch_left_menus(["查询[F4]", "资金股票"])
return self._get_balance_from_statics()
@perf_clock
def _switch_left_menus(self, path, sleep=0.2):
self.close_pop_dialog()
self._get_left_menus_handle().get_item(path).select()
self._app.top_window().type_keys('{F5}')
self.wait(sleep)
@perf_clock
def close_pop_dialog(self):
try:
if self._main.wrapper_object() != self._app.top_window().wrapper_object():
w = self._app.top_window()
if w is not None:
w.close()
self.wait(0.2)
except (
findwindows.ElementNotFoundError,
timings.TimeoutError,
RuntimeError,
) as ex:
pass
@functools.lru_cache()
def _get_left_menus_handle(self):
count = 2
while True:
try:
handle = self._main.child_window(
control_id=129, class_name="SysTreeView32"
)
if count <= 0:
return handle
# sometime can't find handle ready, must retry
handle.wait("ready", 2)
return handle
# pylint: disable=broad-except
except Exception as ex:
logger.exception("error occurred when trying to get left menus")
count = count - 1
随后我们要从右边保存信息,由上面第五行的_get_balance_from_statics()函数实现,_config中的信息是对应所需元素的contro_id.
def _get_balance_from_statics(self):
result = {}
for key, control_id in self._config.BALANCE_CONTROL_ID_GROUP.items():
result[key] = float(
self._main.child_window(
control_id=control_id, class_name="Static"
).window_text()
)
return result
BALANCE_CONTROL_ID_GROUP = {
"资金余额": 1012,
"可用金额": 1016,
"可取金额": 1017,
"总资产": 1015,
}
具体应用方式:
import easytrader
user = easytrader.use('universal_client')
user.enable_type_keys_for_editor()
user.connect(r'C:\APPS\同花顺软件\同花顺\xiadan.exe')
user.enable_type_keys_for_editor()
user.balance#获取资金账户信息
结果:
以上就获取到了balance信息,接下来获取position持仓信息,由于同花顺在这部分设置了验证码机制,所以这里我们要加上验证码截图、验证码识别和验证码输入的部分。方法是通过pytesseract
调用Tesseract引擎进行识别。
不同于上面的获取资金账户的信息,上面的账户信息直接就显示在控件中,因此获取到控件后可以直接得到想要的信息,但资金账户这个界面的信息是放在了一个grid中,获取的方式有两种,一是直接复制并从剪切板中获取信息,一种是邮件保存为文件再从文件中读取,第二种方式的稳定性更高,并且可以实现多次读取,因此讲解第二种方式的获取方法。请逐层函数的去看就
@property
def position(self):
self._switch_left_menus(["查询[F4]", "资金股票"])
return self._get_grid_data(self._config.COMMON_GRID_CONTROL_ID)
@perf_clock
def _switch_left_menus(self, path, sleep=0.2):
self.close_pop_dialog()
self._get_left_menus_handle().get_item(path).select()
self._app.top_window().type_keys('{F5}')
self.wait(sleep)
def _get_grid_data(self, control_id):
return self.grid_strategy_instance.get(control_id)
def get(self, control_id: int) -> List[Dict]:
grid = self._get_grid(control_id)
# ctrl+s 保存 grid 内容为 xls 文件
self._set_foreground(grid) # setFocus buggy, instead of SetForegroundWindow
grid.type_keys("^s", set_foreground=False)
if self._trader.is_exist_pop_dialog():
count = 5
while count > 0:
if (
self._trader.app.top_window().child_window(class_name="Static", title='提示').exists(timeout=1)
):
file_path = "tmp.png"
found = False
self._trader.app.top_window().child_window(class_name='Static',title ='')\
.capture_as_image().save(
file_path
) # 保存验证码
captcha_num = captcha_recognize(file_path).strip() # 识别验证码
captcha_num = "".join(captcha_num.split())
logger.info("captcha result-->" + captcha_num)
self._trader.app.top_window().child_window(
class_name="Edit",control_id=2404
).set_text(
""
)#删除原有的值
self._trader.app.top_window().child_window(
class_name="Edit",control_id=2404
).type_keys(
captcha_num
) # 模拟输入验证码
self._trader.app.top_window()\
.child_window(class_name="Button", title='确定').click()
# pywinauto.keyboard.send_keys("{ENTER}") # 模拟发送enter,点击确定
if self._trader.app.window(class_name="#32770", title='另存为').exists(timeout=2):
logger.info("验证码正确:" + captcha_num)
found = True
count = -1
else:
count = count - 1
if not found and count==0:
break
else:
Copy._need_captcha_reg = False
break
self._trader.wait(0.2)
if(count<=0 and (not found)):
self._trader.app.top_window()\
.child_window(class_name="Button", title='取消').click()
return self.get(control_id)
self._trader.wait(0.5)
temp_path = tempfile.mktemp(suffix=".xls", dir=self.tmp_folder)
self._set_foreground(self._trader.app.top_window())
# alt+s保存,alt+y替换已存在的文件
self._trader.app.top_window()['Edit1'].set_text(temp_path)
self._trader.wait(0.1)
self._trader.app.top_window().type_keys("%{s}%{y}", set_foreground=False)
# Wait until file save complete otherwise pandas can not find file
self._trader.wait(0.2)
if self._trader.is_exist_pop_dialog():
self._trader.app.top_window().Button2.click()
self._trader.wait(0.2)
return self._format_grid_data(temp_path)
def _format_grid_data(self, data: str) -> List[Dict]:
with open(data, encoding="gbk", errors="replace") as f:
content = f.read()
df = pd.read_csv(
StringIO(content),
delimiter="\t",
dtype=self._trader.config.GRID_DTYPE,
na_filter=False,
)
return df.to_dict("records")
具体应用:
import easytrader
user = easytrader.use('universal_client')
user.enable_type_keys_for_editor()
user.connect(r'C:\APPS\同花顺软件\同花顺\xiadan.exe')
user.enable_type_keys_for_editor()
user.position#获取持仓信息
结果:
代码自动识别窗口并识别验证码后填入保存信息
相关文章:
散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息
一、为什么要实现自动化交易 在瞬息万变的金融市场中,越来越多的散户投资者开始尝试构建自己的交易策略:有人通过技术指标捕捉趋势突破,有人利用基本面分析挖掘低估标的,还有人设计出复杂的网格交易或均值回归模型。然而&a…...
SpringBoot高校运动会管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.报名赛事代码2.用户登录代码3.保存成绩代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot框架开发的高校运动会管理系统项目。首先,这…...
MySQL表字段数量上限解析
MySQL 表中最多可以创建的字段数量取决于以下几个因素,主要包括 存储引擎 和 行大小限制: 1. 理论上的字段数量上限 InnoDB 存储引擎(MySQL 5.6): 最多 1017 个字段(实际测试中可能略低,需考虑行大小限制&…...
2024 ChatGPT大模型技术场景与商业应用视频精讲合集(45课).zip
2024ChatGPT大模型技术场景与商业应用视频精讲合集,共十三章,45课。 01. 第一章 ChatGPT:通用人工智能的典范 1.1 ChatGPT概述 .mp4 1.2 通用能力 .mp4 1.3 通用人工智能风口 .mp4 02. 第二章 大模型:ChatGPT的核心支撑 2.1 底层…...
FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析
一、核心定位与历史沿革 Apache POI(1990s-) 作为Java生态中最古老的Excel处理库,提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现,包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…...
线程控制(创建、终止、等待、分离)
目录 1.前言 2.创建线程 pthread_create函数 3.线程终止 pthread_exit函数 pthread_cancel函数 4.线程等待 5.线程分离 1.前言 在Linux系统中,并不存在真正的线程,只有轻量级进程。所以,Linux系统只提供了操作轻量级进程的系统调用…...
秒杀系统的常用架构是什么?怎么设计?
架构 秒杀系统需要单独部署,如果说放在订单服务里面,秒杀的系统压力太大了就会影响正常的用户下单。 常用架构: Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀,正常情况下,这 10 个商品应该均…...
2025年生成式人工智能应用工程师学习线路
生成式人工智能应用工程师学习线路 初级 掌握AIGC基础概念、法律规范及安全基础、提示词使用及优化技巧,具备使用文心一言、Stable Diffsion、Midjourney等常见大模型应用进行高质量的文案、图片、视频创作的能力 课程内容包括:AIGC基础、职业道德、数…...
python力扣3:无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”…...
文生图开源模型发展史(2014-2025年)
文生图开源模型的发展历程是一段充满技术革新、社区生态繁荣与商业化竞争的多维度演进史。 一、技术萌芽期(2014-2020年) 核心突破 2014年:GAN(生成对抗网络)诞生,首次实现数据驱动式图像生成࿰…...
fastadmin 后台商品sku(vue)
先上个效果图 首先先引入vue define([backend], function (Backend) {require.config({paths: {vue: /assets/jeekshopskugoods/libs/vue.min,skuimg: /assets/jeekshopskugoods/js/skuimg,skugoods: /assets/jeekshopskugoods/js/skugoods,layui: /assets/LayuiSpzj/layui/la…...
Qt显示一个hello world
一、显示思路 思路一:通过图形化方式,界面上创建出一个控件显示。 思路二:通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui,拖拽 label 控件,显示 hello world 即可。 qmake 基于 .…...
LeetCode 热题 100 53. 最大子数组和
LeetCode 热题 100 | 53. 最大子数组和 大家好,今天我们来解决一道经典的算法题——最大子数组和。这道题在 LeetCode 上被标记为中等难度,要求我们找出一个具有最大和的连续子数组,并返回其最大和。下面我将详细讲解解题思路,并…...
需求: 使用 minio 做一个 企业微信对话的下载、存储,利用deepseek进行对话回复
以下是基于企业微信会话存档API和MinIO对象存储实现对话记录下载与存储的完整方案,涵盖技术选型、接口对接、存储配置及安全性设计等核心环节: 一、技术架构设计 系统组成: 数据采集层:通过企业微信API拉取会话存档数据࿰…...
vulnhub靶场之【digitalworld.local系列】的bravery靶机
前言 靶机:digitalworld.local-bravery,IP地址为192.168.10.8 攻击:kali,IP地址为192.168.10.6 kali采用VMware虚拟机,靶机采用virtualbox虚拟机,网卡都为桥接模式 这里官方给的有两种方式,…...
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式) 一、项目背景 在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以…...
数据库基础五(数据库环境变量配置详细教程)
1、在小皮的设置界面检测3306端口,保障3306端口可用; 2、在小皮的首面界面,启动MySQL; 3、进行环境变量设置,找到MySQL的路径,进行复制; 4、在Windows的搜索栏内,输入“环境变量”&a…...
Matlab 大量接单
分享一个matlab接私活、兼职的平台 1、技术方向满足任一即可 2、技术要求 3、最后 技术方向满足即可 MATLAB:熟练掌握MATLAB编程语言,能够使用MATLAB进行数据处理、机器学习和深度学习等相关工作。 机器学习、深度学习、强化学习、仿真、复现、算法、…...
【算法】链表题型总结
链表题型可分为快慢指针和虚拟头节点两种解题技巧。 快慢指针 使用两个指针(快指针和慢指针),以不同的速度遍历链表,解决与链表位置、环检测相关的问题。 反转链表 快慢指针,慢指针一次走一步,快指针一次…...
【C++】对字符串的常用操作
C 中的字符串操作主要通过两种方式实现:使用 C 风格的字符串(字符数组)和使用 C 标准库中的 std::string 类型。大多数现代 C 程序使用 std::string 进行字符串处理,因为它提供了许多便捷的成员函数来处理字符串操作。以下是常见的…...
人工智能AI在汽车设计领域的应用探索
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...
Linux mkdir 命令
Linux mkdir(英文全拼:make directory)命令用于创建目录。 语法 mkdir [-p] dirName 参数说明: -p 确保目录名称存在,不存在的就建一个。 实例 在工作目录下,建立一个名为 runoob 的子目录 : mkdir …...
gin框架学习笔记
初始gin package mainimport "github.com/gin-gonic/gin"type Response struct {Code int json:"code"Msg string json:"msg"Data any json:"data" }func index(c *gin.Context) {c.JSON(200, Response{Code: 0,Msg: "1…...
什么是预训练语言模型下游任务?
问题:Word2Vec模型是预训练模型吗? 由于训练的特性,word2Vec模型一定是与训练模型。给定一个词先使用独热编码然后使用预训练好的Q矩阵得到这个词的词向量。这里指的是词向量本身就是预训练的语言模型。 什么是下游任务? 在自然…...
cursor 弹出在签出前,请清理仓库工作树 窗口
问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突࿰…...
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth,可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…...
Ubuntu20.04安装Redis
目录 切换到root用户 使用 apt install redis 安装redis 修改配置文件 编辑 重新启动服务器 使用Redis客户端连接服务器 切换到root用户 如果没有切换到root用户的,切换到root用户。 使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之…...
【Word2Vec】Skip-gram 的直观理解(深入浅出)
01 什么是skip-gram 一句话来说就是,给定中心词,然后预测其周围的词: 02 模型结构 对于skip-gram来说,输入是一个[1 x V]维的ont-hot向量,其中V为词表大小,值为1的那一项就表示我们的中心词。经过一个[V x…...
MQ 笔记
什么是消息队列? 消息队列(Message Queue, MQ)是一种用于在分布式系统中传递消息的中间件技术。 它允许应用程序通过发送和接收消息进行异步通信。 消息队列的核心思想是解耦生产者和消费者,生产者将消息发送到队列中ÿ…...
leetcode第216题组合总和Ⅲ
原题出于leetcode第216题https://leetcode.cn/problems/combination-sum-iii/description/题目为: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表…...
【零基础C语言】第四节 数组
【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组...
20250225-代码笔记03-class CVRPModel AND other class
文章目录 前言一、class CVRPModel(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRPModel(nn.Module):pre_forward(self, reset_state)函数功能函数代码 三、class CVRPModel(nn.Module):forward(self, state)函数功能函数代码 四、def _get_encodi…...
京准电钟快讯:NTP时钟同步服务在智造行业应用
京准电钟快讯:NTP时钟同步服务在智造行业应用 京准电钟快讯:NTP时钟同步服务在智造行业应用 一、NTP技术概述 基本原理 NTP(Network Time Protocol)是一种用于同步计算机系统时间的网络协议,通过分层时钟源ÿ…...
【Qt】详细介绍如何在Visual Studio Code中编译、运行Qt项目
Visual Studio Code一只用的顺手,写Qt的时候也能用VS Code开发就方便多了。 理论上也不算困难,毕竟Qt项目其实就是CMake(QMake的情况这里就暂不考虑了)项目,VS Code在编译、运行CMake项目还是比较成熟的。 这里笔者打…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
Node.js, Bun, Deno 比较概述
以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl(Node.js 原作者)Jarred Sumner运行时引擎V8(Chrome)V8(Chrome)JavaScriptCore&#…...
大白话跨域问题怎么破,解决方法有啥?
大白话跨域问题怎么破,解决方法有啥? 啥是跨域问题 咱先说说啥是跨域。你可以把每个网站想象成一个独立的小房子,每个房子都有自己的地址(也就是域名)。正常情况下,一个房子里的东西只能在这个房子里用&a…...
DeepSeek R1满血+火山引擎详细教程
DeepSeek R1满血火山引擎详细教程 一、安装Cherry Studio。 Cherry Studio AI 是一款强大的多模型 AI 助手,支持 iOS、macOS 和 Windows 平台。可以快速切换多个先进的 LLM 模型,提升工作学习效率。下载地址 https://cherry-ai.com/ 认准官网,无强制注册。 这…...
Pytorch中的ebmedding到底怎么理解?
在 PyTorch 中,nn.Embedding 是一个用于处理离散符号映射到连续向量空间的模块。它通常用于自然语言处理(NLP)任务(如词嵌入)、处理分类特征,或任何需要将离散索引转换为密集向量的场景。 核心理解 功能&am…...
【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解。
【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解 在 Java 面试中,面向对象 是一个高频考点。它不仅是一种编程思想,更是现代软件开发的核心方法论。本文将从 面向对象的概念、与面向过程的对比、以及 面向对象的三大特性(封…...
【C】链式二叉树算法题1 -- 单值二叉树
leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1࿱…...
基于单片机的GPS定位系统设计
1 系统硬件 1.1单片机模块 单片机的种类和型号可以说是有成百上千种,很多大的公司和企业都生产开发自己的单片机芯片,并且广泛应用于各种产品。Intel、 philips、 摩托罗拉、凌阳、宏晶等等种类繁多。大体上可以分为51系列单片机和非51系列单片机。 其…...
[React]Render Props、自定义Hooks和Context API优化详解
关于React中的Render Props、自定义Hooks和Context API优化的详解。我需要根据我搜索到的资料来综合回答这三个部分。首先,我需要分别理解每个概念的定义、用途以及优化方法。 首先看Render Props。根据Render Props是一种通过传递函数作为prop来共享组件间逻辑的技…...
关于大型语言模型的结构修剪
本文介绍了一种名为 **LLM-Pruner** 的方法,用于对大型语言模型(LLMs)进行结构化剪枝,以减少模型大小和计算需求,同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝,并…...
【语法】C++中string类中的两个问题及解答
贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中,调用的是这个string对象的容量(可以存多少个有效字符),而size()是调用的string对象现在有…...
Linux(centOS) 命令提示符格式修改(PS1)
1. 命令提示符的组成 命令提示符(PS1)通常由以下部分组成: 部分示例说明[ 和 ][...]提示符的开头和结尾,用于视觉分隔。用户名root 或 tianjiajie当前登录的用户。root 是超级用户,普通用户可能是其他名称。分隔用户…...
QwenVL 2.5-本地安装编译布署全教程
开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…...
Hutool - JWT:轻松玩转 JSON Web Token
各位开发者朋友们,在现代的前后端分离开发模式里,身份验证和授权可是至关重要的环节。JSON Web Token(JWT)作为一种轻量级的身份验证和授权机制,在很多项目中都得到了广泛应用。它可以在客户端和服务器之间安全地传输信…...
2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题D:回文数组试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需…...
【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录
小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…...