Python量化交易策略
策略详情
按照1分k线图;跳过9:30点1分k线图不计算
买入;监控市面的可转债;当某1分涨幅大于x涨幅,一直重复x次,选择买入,符合x设置的条件只选择成交额最大的可转债买入(x要自定义)
例如;9:36分涨幅大于等于0.1;一直重复了2次;这2次的每1分都大于等于0.1;那么应该9:38分01秒买入
卖出方法条件1;当买入价格盈亏x%,选择自动卖出;(x要自定义)
卖出方法条件2;当某1分跌幅大于x跌幅,一直重复x次,选择卖出(x要自定义)、
例如;9:36分跌幅大于等于-0.1;一直重复了2次;这2次的每1分都大于等于-0.1;那么应该9:38分01秒卖出
(卖出符合这个2个条件任意一条都可以自动卖出)
1;可以设置每天用多少x万元交易
2;能可以设置1天买卖x次,超过次数停止工作;
3;能设置账户最大涨幅或者最大跌幅,超过这个最大涨幅或者最大跌幅,如果有持仓可转债立即卖出,停止工作;
4;买卖有选项,可以选择 对方最优价格 和 本方最优价格
# encoding:gbk
# coding:gbk
''''''
# coding:gbkimport datetime
import pandas as pd
import numpy as np
import talib
import timedef init(ContextInfo):ContextInfo.trade_code_list = ['113595.SH', '127098.SZ', '123224.SZ', '128041.SZ', '127097.SZ', '110044.SH', '123235.SZ', '123054.SZ', '128085.SZ', '123167.SZ', '113627.SH', '123118.SZ', '113044.SH', '127101.SZ', '123207.SZ', '110059.SH', '113052.SH', '127096.SZ', '110061.SH', '127081.SZ']ContextInfo.set_universe(ContextInfo.trade_code_list)ContextInfo.accID = '6000000058'#'620000155051'ContextInfo.buy = TrueContextInfo.capital = 100000ContextInfo.sell = False# 自定义设置x秒、涨跌幅和重复次数ContextInfo.minutes_gain=1#买入间隔分钟ContextInfo.minutes_loss=1#卖出间隔分钟数#ContextInfo.x_seconds_gain = 60#间隔秒数#ContextInfo.x_seconds_loss = 60#间隔秒数ContextInfo.increase_percent_gain = 1#条件涨幅 >=ContextInfo.increase_percent_loss = -1#条件跌幅<=ContextInfo.repeat_times_gain = 1#买入重复次数ContextInfo.repeat_times_loss = 1#卖出重复次数ContextInfo.df = []ContextInfo.his_DF = []# 最大交易次数、最大涨幅和最大跌幅ContextInfo.trades_loss = 0 # 卖出次数ContextInfo.trades_gain = 0 # 买入次数ContextInfo.max_trades_loss = 10 # 卖出最大次数ContextInfo.max_trades_gain = 10 # 买入最大次数ContextInfo.max_daily_gain = 5 # 最大涨幅 到了最大涨幅,最大跌幅自动卖出ContextInfo.max_daily_loss = -5 # 最大跌幅ContextInfo.one_profit_limit=3 #单次盈利超过这里2是2%ContextInfo.one_loss_limit=-1#单次亏损限制自动 则卖出持仓ContextInfo.Today_profit_limit=10 #当日盈利限制超过停止交易ContextInfo.Today_loss_limit=-10 #当日亏损限制超过 则卖出持仓,当日停止交易ContextInfo.Date=''ContextInfo.Date_Time={}#{'2024':ContextInfo.Today_profit_and_loss}ContextInfo.Today_profit_and_loss=0 #当日盈亏ContextInfo.status=0 #持仓状态0为空仓,1为满仓ContextInfo.status_code=0 #持仓代码ContextInfo.account_price=100000#可用资金 调整到x元持仓 卖出是调整到0元ContextInfo.stop_status=0#初始化清空账户停止交易状态 ContextInfo.type_gain='MARKET'ContextInfo.type_loss='MARKET'#LATEST:最新 FIX:指定 HANG:挂单 COMPETE:对手 MARKET:市价 SALE5, SALE4, SALE3, ‘SALE2’, ‘SALE1’:卖5-1价‘BUY1’, ‘BUY2’, ‘BUY3’, ‘BUY4’, ‘BUY5’:买1-5价
def zhangfu(list1):a=((list1[1] - list1[0])/list1[0])*100return a
#bond(ContextInfo, ContextInfo.x_seconds_gain,ContextInfo.x_seconds_loss, ContextInfo.increase_percent_gain,ContextInfo.increase_percent_loss, ContextInfo.repeat_times_gain,ContextInfo.repeat_times_loss,time1)
def bond(ContextInfo, percentage_gain,percentage_loss, num_trades_gain,num_trades_loss,formatted_time):if ContextInfo.status==0:#空仓try:num_trades=num_trades_gainif ContextInfo.Today_profit_and_loss>ContextInfo.Today_profit_limit:print('当日账户涨幅{}超过(大于)限制的最大涨幅{}今日停止交易'.format(ContextInfo.Today_profit_and_loss,ContextInfo.Today_profit_limit))return [2, list(ContextInfo.df['trade_code'])[0]]if list(ContextInfo.df['买入卖出条件'])[0]==1:new_price = list(ContextInfo.df['close'])[0]return [1, list(ContextInfo.df['trade_code'])[0],new_price]#买入except Exception as e:print('异常')print(ContextInfo.df)print(e)else:num_trades=num_trades_loss#time_list=Transform_time_21(formatted_time, num_trades, seconds)if ContextInfo.Today_profit_and_loss<ContextInfo.Today_loss_limit:print('当日账户跌幅{}超过(小于)限制的最大跌幅{} 持仓立即卖出,且今日停止交易'.format(ContextInfo.Today_profit_and_loss,ContextInfo.Today_loss_limit))new_price = list(ContextInfo.df['close'])[0]# get_current_price2(ContextInfo, list(ContextInfo.df['trade_code'])[0])return [-2, list(ContextInfo.df['trade_code'])[0],new_price]#loss_DF=status_df(ContextInfo,ContextInfo.minutes_loss)df_loss=loss_DF[loss_DF['名称']==ContextInfo.status_code]if ContextInfo.one_loss>=ContextInfo.one_profit_limit:print("当前持仓盈利{}超过单笔限制{}卖出当前持仓".format(ContextInfo.one_loss,ContextInfo.one_profit_limit))new_price = list(df_loss['close'])[0]return [-1, list(ContextInfo.df['trade_code'])[0],new_price]#卖出 if ContextInfo.one_loss<=ContextInfo.one_loss_limit:print("当前持仓亏损{}超过单笔限制{}卖出当前持仓".format(ContextInfo.one_loss,ContextInfo.one_loss_limit))new_price = list(df_loss['close'])[0]return [-1, list(ContextInfo.df['trade_code'])[0],new_price]#卖出if list(df_loss['买入卖出条件'])[0]==-1:new_price = list(df_loss['close'])[0]return [-1, list(ContextInfo.df['trade_code'])[0],new_price]#卖出else:print('当前不符合卖出条件无法卖出')return [0, list(ContextInfo.df['trade_code'])[0]]#持有def execute_buy(ContextInfo, stockcode,price):# 执行买入操作的逻辑print("全仓买入{}".format(stockcode))print(ContextInfo.df)ContextInfo.buy = FalseContextInfo.sell = True# 列表中股票分别下单买入10手order_target_percent 1.0 order_target_value ContextInfo.type_gain order_value(stockcode,ContextInfo.account_price, 'fix', price, ContextInfo, ContextInfo.accID)ContextInfo.trades_gain = ContextInfo.trades_gain + 1ContextInfo.status=1def execute_sell(ContextInfo, stockcode):#price# 执行卖出操作的逻辑print("全仓卖出{}".format(stockcode))print(ContextInfo.df)ContextInfo.buy = TrueContextInfo.sell = False# 列表中股票分别下单 order_target_percent ContextInfo.account_price ContextInfo.type_loss, #print('按照指定价{}卖出可转债{}'.format(price,stockcode))print('按照市场价卖出可转债{}'.format(stockcode))#order_target_value(stockcode, 0,'fix',price, ContextInfo, ContextInfo.accID) # 'MARKET':市单价 'COMPETE':对手order_target_value(stockcode, 0,ContextInfo.type_loss, ContextInfo, ContextInfo.accID) # 'MARKET':市单价 'COMPETE':对手ContextInfo.trades_loss = ContextInfo.trades_loss + 1ContextInfo.status=0import datetimedef Transform_time(timestamp):# 将13位时间戳转换为datetime对象dt = datetime.datetime.fromtimestamp(int(timestamp) / 1000) # 需要将13位时间戳除以1000得到以秒为单位的时间戳# 将datetime对象格式化为可读时间格式formatted_time = dt.strftime('%Y-%m-%d %H:%M:%S')return formatted_timedef status_df(ContextInfo,x):x=x+1hisdict = ContextInfo.get_history_data(x, '1m', 'close')#,skip_paused=True)data_dict=[]for k, v in hisdict.items():if len(v) > 1:v_dict={'名称':k}v_num=len(v)-1signal_list=[]for i in range(v_num):zhangfu_value=zhangfu([v[i],v[i+1]])v_dict['涨幅'+str(i)]=zhangfu_valueif zhangfu_value<=ContextInfo.increase_percent_loss:signal_list.append(-1)elif zhangfu_value>=ContextInfo.increase_percent_gain:signal_list.append(1)else:signal_list.append(0)if list(set(signal_list)) == [-1]:v_dict['买入卖出条件']=-1elif list(set(signal_list)) == [1]:v_dict['买入卖出条件']=1else:v_dict['买入卖出条件']=0data_dict.append(v_dict)his_DF=pd.DataFrame(data_dict)df = ContextInfo.get_market_data(['amount','close'], stock_code=ContextInfo.get_universe(), skip_paused=True, period='1m',dividend_type='front', count=-1)df=df.reset_index()#.index=list(range(len(df)))his_DF['amount']=df['amount']his_DF['close']=df['close']#print(his_DF)return his_DF
def handlebar(ContextInfo): # ['lastClose', 'close','amount']index = ContextInfo.barpostime0= ContextInfo.get_bar_timetag(index)time1 = Transform_time(time0)start_930=datetime.datetime.strptime('09:31:00', "%H:%M:%S")delta=datetime.timedelta(seconds=ContextInfo.minutes_gain*60*ContextInfo.repeat_times_gain)start_9x=start_930+deltaif datetime.datetime.strptime(time1.split(' ')[1], "%H:%M:%S")<=start_9x:print('当前时间{}小于等于{}不进行交易'.format(time1.split(' ')[1],str(start_9x).split(' ')[1]))returnelse:print('当前时间{}为正常交易时间'.format(time1))if ContextInfo.Date!=time1.split(' ')[0]:ContextInfo.Date=time1.split(' ')[0]ContextInfo.trades_gain=0#新的日期买入次数归零ContextInfo.trades_loss=0#新的日期买出次数归零ContextInfo.Today_profit_and_loss=0#新的日期清空账户涨跌幅ContextInfo.stop_status==0#新的日期清空账户停止交易状态print("新的交易日!!{}".format(ContextInfo.Date))else:index = ContextInfo.barposlist_1=[]#historysumsprint('历史持仓为')result_historysums_records=get_result_records('historysums', index, ContextInfo)for i in result_historysums_records:list_1.append({'交易代码':i.market+'.'+i.stockcode,#'交易日期':Transform_time(i.trade_date),'持仓盈亏':i.profit,#'盈利占比权重':i.benefit_weight,'交易次数':i.buy_sell_times,'持仓成本':i.trade_price,'最新价':i.current_price,'仓位数量':i.position,#'仓位金额':i.position*i.trade_price,'最新价':i.current_price,})#:number,最新价,持仓中用这个价if ContextInfo.stop_status==1:print('当日已经停止交易')returnContextInfo.Date_Time[ContextInfo.Date]=[list_1]print("历史交易明细为")print(ContextInfo.Date_Time)ContextInfo.Today_profit_and_loss=sum([i['持仓盈亏'] for i in list_1])/ContextInfo.capitalContextInfo.Date_Time[ContextInfo.Date]=ContextInfo.Today_profit_and_loss#{'2024':ContextInfo.Today_profit_and_loss}print("账户今日涨跌幅为{}".format(ContextInfo.Today_profit_and_loss))print("全部日期涨跌幅为")print(ContextInfo.Date_Time)print("账户当前时刻买入次数{}".format(ContextInfo.trades_gain))print("账户当前时刻卖出次数{}".format(ContextInfo.trades_loss))#ContextInfo.Today_profit_and_loss#print("最大涨幅为{}".format(ContextInfo.max_daily_gain))if ContextInfo.Today_profit_and_loss > ContextInfo.Today_profit_limit:print('因为涨幅{}超出当日最大涨幅{}停止交易'.format(ContextInfo.Today_profit_and_loss,ContextInfo.Today_profit_limit))return # 涨跌幅超过设定值, 止操作elif ContextInfo.Today_profit_and_loss < ContextInfo.Today_loss_limit:print('因为跌幅{}超出当日最大跌幅{}停止交易'.format(ContextInfo.Today_profit_and_loss,ContextInfo.Today_loss_limit))return # 涨跌幅超过设定值,停止操作his_DF=status_df(ContextInfo,ContextInfo.minutes_gain)if ContextInfo.trades_gain <= ContextInfo.max_trades_gain and ContextInfo.trades_loss <= ContextInfo.max_trades_loss:index = ContextInfo.barposresult_holdings_records=get_result_records('holdings', index, ContextInfo)#当下持仓if result_holdings_records==[]:print("当前没有持仓")ContextInfo.status=0end_his_DF=his_DF[his_DF['买入卖出条件']==1]if len(end_his_DF)==0:print("当前时间分钟{}没有满足买入条件的可转债".format(time1))ContextInfo.df=[]returnelse:end_his_DF['trade_code']=end_his_DF['名称']ContextInfo.df = end_his_DF.sort_values(by='amount', ascending=False) # 必然是成交额最大的可转债print('当前股票池状态:')print(ContextInfo.df)else:result_records=result_holdings_recordsi=result_records[0]print('当前持仓为')print({'交易代码':i.market+'.'+i.stockcode,#'交易日期':Transform_time(i.trade_date),'持仓盈亏':i.profit,#'盈利占比权重':i.benefit_weight,'交易次数':i.buy_sell_times,'持仓成本':i.trade_price,'最新价':i.current_price,'仓位数量':i.position,#'仓位金额':i.position*i.trade_price,'最新价':i.current_price,})one_loss=((i.current_price-i.trade_price)/i.trade_price)*100print("当前持仓盈亏{}".format(one_loss))ContextInfo.one_loss=one_lossif len(result_records)!=1:print("策略超过持仓数量限制1,持有{}支可转债".format(len(result_records)))status_code=result_records[0].stockcode+'.'+result_records[0].marketContextInfo.status_code=status_codeif i.position*i.trade_price>ContextInfo.account_price:print('持仓总额{}超过设定的限制{},停止策略'.format(i.position*i.trade_price,ContextInfo.account_price))returnprint("时间{}持仓可转债{}金额{}".format(time1,status_code,i.position*i.trade_price))#enddict={i.trade_date:i.profit for i in result_historysums_records}#print(enddict)ContextInfo.status=1# 交易策略# 买入条件:假设一支可转债在9点30分20秒涨跌幅为8%,过了20秒也就是9点30分40秒,涨跌幅为9%,比之前20秒大于1%,一直重复x次都符合这设定,只考虑 成交额 是第一的 可转债 进行买入# 卖出条件:假设一支可转债在9点30分20秒涨跌幅为8%,过了20秒也就是9点30分40秒,涨跌幅为7%,比之前20秒小于1%,一直重复x次都符合这设定,进行卖出condition = bond(ContextInfo, ContextInfo.increase_percent_gain,ContextInfo.increase_percent_loss, ContextInfo.repeat_times_gain,ContextInfo.repeat_times_loss,time1)# 增加模拟资金;能设置1天买卖操作次数,超过次数停止工作;能设置1天涨幅大于x%或者跌幅大于x%停止操作#print(condition)if condition[0] == 1:if ContextInfo.status==0:print("时间{}以{}价格买入可转债{}".format(time1,condition[2],condition[1]))execute_buy(ContextInfo, condition[1], condition[2])#ContextInfo.status==1elif condition[0] == -1:if ContextInfo.status==1:#if ContextInfo.status_code!=0:print("时间{}以{}价格卖出可转债{}".format(time1,condition[2],ContextInfo.status_code))execute_sell(ContextInfo,ContextInfo.status_code)#condition[1]#elif condition[0] == 2:ContextInfo.stop_status=1elif condition[0] == -2:if ContextInfo.status==1:#if ContextInfo.status_code!=0:print("时间{}今日最后一次卖出可转债{}".format(time1,ContextInfo.status_code))execute_sell(ContextInfo,ContextInfo.status_code, condition[2])#condition[1]#ContextInfo.stop_status=1else:pass#print('持有')else:print('因为超出当日最大交易次数停止交易')return
相关文章:

Python量化交易策略
策略详情 按照1分k线图;跳过9:30点1分k线图不计算 买入;监控市面的可转债;当某1分涨幅大于x涨幅,一直重复x次,选择买入,符合x设置的条件只选择成交额最大的可转债买入(x要自定义&…...

为什么我感觉 C 语言在 Linux 下执行效率比 Windows 快得多?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!Windows的终端或者叫控制台…...

算法导论 总结索引 | 第四部分 第十六章:贪心算法
1、求解最优化问题的算法 通常需要经过一系列的步骤,在每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法求最优解有些杀鸡用牛刀了,可以使用更简单、更高效的算法 贪心算法(greedy algorithm)就是这样的算…...

用“文心一言”写的文章,看看AI写得怎么样?
零售连锁店的“支付结算”业务设计 在数字化浪潮的推动下,连锁店零售支付结算的设计愈发重要。一个优秀的支付结算设计不仅能够提升用户体验,还能增强品牌竞争力,进而促进销售增长。 本文将围绕一个具体的连锁店零售支付结算案例…...

企业消费采购成本和员工体验如何实现“鱼和熊掌“的兼得?
有企业说企业消费采购成本和员工体验的关系好比是“鱼和熊掌”,无法兼得? 要想控制好成本就一定要加强管控,但是加强管控以后,就会很难让员工获得满意的体验度。如果不加以管控,员工自由度增加了,往往就很难…...

发表EI论文相当于SCI几区?
EI(工程索引)本身并不进行分区,它是一个收录工程领域高质量文献的数据库,与SCI(科学引文索引)的分区制度不同。然而,在非正式的学术评价中,有时人们会将EI与SCI的分区进行比较。 虽…...

STFT短时傅里叶变换MTLAB简析
代码: 解释: 如果信号x有Nx个时间样本,短时傅里叶变换的结果矩阵s有k列; k的计算方式如图所示,M是窗函数的长度,L是重叠长度。 此符号是向下取整符号。 短时傅里叶变换的结果矩阵s的行数与参数‘FFTLength’…...

海致科技实施实习生面试
一、面试内容 注:此次是电话面试 1.是XX先生吗 2.你是有考虑转实施的吗? 3.请讲一下你对项目部署实施的理解和掌握 4.用过数据库,会编写SQL语句吗? 5.讲一下SQL的常用关键字 6.了解SQL中的函数吗?谈谈函数 7.多…...

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》
论文link:link code:code ARC是一个改进的backbone,相比于ResNet,最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数,其中旋转角度由路由函数以数据相关的方式预测。此外,还采…...

面向对象(Java)
构造方法只能在对象实例化的时候调用 this可以作为方法参数,表示调用方法的当前对象 this可以作为方法返回值,表示返回当前对象 封装 通过方法访问数据,隐藏类的实现细节 static:类对象共享,类加载时产生,…...

I/O多路复用
参考面试官:简单说一下阻塞IO、非阻塞IO、IO复用的区别 ?_unix环境编程 阻塞io和非阻塞io-CSDN博客 同步阻塞(BIO) BIO 以流的方式处理数据 应用程序发起一个系统调用(recvform),这个时候应用程序会一直阻塞下去&am…...

线性代数基础概念:向量空间
目录 线性代数基础概念:向量空间 1. 向量空间的定义 2. 向量空间的性质 3. 基底和维数 4. 子空间 5. 向量空间的例子 总结 线性代数基础概念:向量空间 向量空间是线性代数中最基本的概念之一,它为我们提供了一个抽象的框架,…...

php 抓取淘宝商品评论数据 json
要抓取淘宝商品评论数据,你可以使用PHP的cURL库来发送HTTP请求并获取JSON格式的数据。 API接入流程:需要开放平台或者是封装接口注册账号,并申请相应的API使用权限,以获取必要的密钥和接口文档。获取接口使用权限:接入…...

Java 7新特性深度解析:提升效率与功能
文章目录 Java 7新特性深度解析:提升效率与功能一、Switch中添加对String类型的支持二、数字字面量的改进三、异常处理(捕获多个异常)四、增强泛型推断五、NIO2.0(AIO)新IO的支持六、SR292与InvokeDynamic七、Path接口…...

RHEL9找不到/var/log/dmesg日志文件问题
问题描述 在Rocky Linux 9 服务器上查看启动日志,发现没有/var/log/dmesg文件。 dmesg是什么? dmesg(diagnostic messages)用于打印kernel ring buffer的所有消息。 kernel会将开机信息存储在ring buffer中,如果开机时来不及查看启动信息&…...

是什么让以太坊从众多公链中脱颖而出
以太坊从众多公链中脱颖而出,成为区块链和加密货币领域的一个重要玩家,主要是由于以下几个关键因素: 智能合约: 以太坊是第一个广泛实施智能合约的区块链平台,智能合约允许在区块链上自动执行合同条款,无需…...

HarmonyOS--路由管理--组件导航 (Navigation)
文档中心 什么是组件导航 (Navigation) ? 1、Navigation是路由容器组件,一般作为首页的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式 2、Navigation组件适用于模块内和跨模块的路由切换,一次开发࿰…...

【Linux 命令】文件比较 diff
diff 命令是 Unix 和类 Unix 系统(如 Linux 和 macOS)中用于比较文件内容差异的一个非常有用的命令行工具。它可以逐行比较两个文件的内容,并输出它们之间的差异。这些差异通常以行为单位显示,并且会标记出哪些行是唯一的、添加的…...

猫头虎分享[可灵AI」官方推荐的驯服指南-V1.0
猫头虎分享[可灵AI」官方推荐的驯服指南-V1.0 猫头虎是谁? 大家好,我是 猫头虎,别名猫头虎博主,擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评…...

你的硬盘知道的太多:你以为你的秘密真的被删除了吗?
某一天你收到了朋友发给你的一个秘密文件,在看完之后,为了不被别人发现,你决定将文件毁尸灭迹! 你选中文件名称 / 右键 / 删除,好了,文件已经消失了。但你是懂电脑的,知道文件此时还在回收站里面…...

虚拟机的网络配置
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️ 每一步都向着梦想靠近,坚持就是胜利的序曲 一 …...

ONLYOFFICE8.1版本桌面编辑器简单测评
ONLYOFFICE官网链接:在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE介绍:https://www.onlyoffice.com/zh/office-suite.aspx OnlyOffice 是一款免费且开源的 Office 协作办公套件,支持桌面端和移动端等多平台,由一家领先的 IT 公…...

PDF内存如何变小,PDF内存压缩,PDF内存变小怎么调整
在数字化时代,pdf已成为工作、学习和生活中不可或缺的文件格式。它以其跨平台兼容性和安全性受到广大用户的喜爱。然而,随着pdf文件中嵌入的图片、图形和文本内容的增多,文件大小往往会变得相当可观,给文件的传输和存储带来一定的…...

深⼊理解MySQL Innodb存储引擎的缓冲池、事务、索引底层工作原理,掌握 MySQL 主从同步,读写分离技术以及集群的搭建,具备分库分表,SQL调优经验
深入理解MySQL的InnoDB存储引擎是数据库管理员和开发人员的重要技能。以下是对InnoDB存储引擎的缓冲池、事务、索引以及主从同步、读写分离技术和集群搭建的详细原理介绍: ### InnoDB存储引擎 1. **缓冲池(Buffer Pool)**: - 缓冲池是InnoDB存储引擎…...

《HelloGitHub》第 99 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…...

mysql 将一个列按逗号分割为多列
在MySQL中,将一个列按逗号分割为多列通常需要使用字符串函数,如SUBSTRING_INDEX(),配合UNION ALL或CROSS JOIN等操作来实现。 假设有一个表my_table,它有一个列tags,其中存储了逗号分隔的标签值,如下所示&…...

Vue 3中 <script setup> 与生命周期钩子函数的详细解析
Vue 3中 <script setup> 与生命周期钩子函数的详细解析 Vue 3 引入了 <script setup> 语法糖,这是一种简化和集成组件逻辑的新方式。尽管 <script setup> 简化了组件的编写,但仍然可以利用 Vue 提供的生命周期钩子函数来管理组件的生…...

一篇文章入门主成分分析PCA
文章目录 基本概念事件随机变量独立同分布离散型随机变量伯努利分布(两点分布)二项分布几何分布泊松分布 连续型随机变量正态分布 期望方差标准化协方差相关系数线性组合特征值和特征向量特征值分解对称矩阵的特征值分解 齐次线性方程组单位向量基向量矩…...

Android系统为什么lmkd杀到adj 100就代表有低内存?
在Android系统中,lmkd(Low Memory Killer Daemon,低内存终止守护进程)负责监控系统的内存状态,并在内存压力较高时通过终止不必要的进程来释放内存,以维持系统的稳定运行。关于lmkd为何在杀到adj࿰…...

d嘤嘤不想求异或喵(牛客周赛49)
题意: 嘤嘤有两个整数 l,r,她想知道区间 [l,r] 所有整数的异或和是多少. 分析: 样例1只有一个数输出1 样例2 1^201^10113 样例3 1^2^301^10^1111^11000 #include<bits/stdc.h> using namespace std; typedef long long ll; ll f(l…...