Python标准库中bisect模块的bisect_right()函数在网格交易中的应用

      本文将深入探讨Python标准库中bisect模块的bisect_right()函数在网格交易中的具体应用。

bisect模块

bisect模块是Python标准库中的一个模块,提供了对有序列表的插入和搜索操作的支持。它基于二分查找算法,可以高效地在有序列表中查找或插入元素,并保持列表的有序性

bisect库提供了两个主要的函数:bisect_left()bisect_right(),用于查找元素在有序序列中的插入点。

bisect_right() 函数

bisect_right() 是 bisect 模块中的一个关键函数,它基于二分查找算法实现,用于在有序序列中快速找到目标值的插入位置,并保持列表的有序性。

函数原型

bisect.bisect_right(a, x, lo=0, hi=len(a))
  • 参数

    • a : 已排序的列表(必须升序)

    • x : 要插入的目标值

    • lo 和 hi : 可选参数,指定查找范围(左闭右开区间)

  • 返回值

    • 返回一个插入位置索引 i,使得所有 a[:i] 中的元素 <= x,所有 a[i:] 中的元素 > x

基本逻辑

假设有一个有序列表 [10, 20, 30, 40, 50],当查找不同目标值时:

目标值 x返回值说明(插入后的列表)
50[5, 10, 20, 30, 40, 50]
252[10, 20, 25, 30, 40, 50]
303[10, 20, 30, 30, 40, 50]
605[10, 20, 30, 40, 50, 60]

与 bisect_left() 的区别

  • bisect_right():当存在重复元素时,返回最右侧的插入位置。

  • bisect_left():当存在重复元素时,返回最左侧的插入位置。

举例

arr = [10, 20, 20, 30, 40]
bisect.bisect_left(arr, 20)   # 返回 1(第一个20的位置)
bisect.bisect_right(arr, 20)  # 返回 3(最后一个20之后的位置)

在网格交易中的应用

由于bisect模块是基于二分查找算法,因此其具有极高的性能尤其适合高频调用,如实时交易场景,且无需预处理或额外存储结构。

在网格交易策略中,bisect_left()bisect_right()常被用来确定当前价格在预设网格中的位置。本文以bisect_right()为例来说明其应用方法。

网格定位逻辑

假设生成的网格价格为 [10.0, 12.5, 15.0, 17.5, 20.0](以线性网格为例),使用 bisect_right() 判断当前价格所在的网格区间:

由于bisect_right()函数是返回一个插入位置索引,即如果插入的话,该位置的索引。因此,需对其返回值作减1修正处理,以正确寻找拟插入的值(当前价格)所处的正确的网格区间。

当前价格bisect_right()返回值修正后的索引 (current_index)对应网格区间
9.000低于最低价,归为第0格
12.521属于第1格(12.5)
14.021在12.5~15.0之间
17.543属于第3格(17.5)
21.054高于最高价,归为第4格

关键处理方法

在实际应用过程中,需将 bisect_right 的结果转换为左闭右闭区间的网格索引;同时,需对边界进行处理,确保价格超出网格范围时,索引仍然有效

pos = bisect.bisect_right(grid_levels, current_price) 
current_index = pos - 1 if pos > 0 else 0 
# 防止越界
current_index = min(current_index, len(grid_levels)-1) 

具体用法

网格交易触发条件

  • 价格上涨:当 current_index > last_grid_index 时,卖出。

  • 价格下跌:当 current_index < last_grid_index 时,买入。

示例分析

假设上次网格索引last_grid_index 为 2(对应价格15.0):

  • 当前价格17.5bisect_right 返回4 → current_index=3 → 触发卖出。

  • 当前价格12.5bisect_right 返回2 → current_index=1 → 触发买入。

扩展用法

动态调整网格

若网格价格需要动态变化(如跟踪波动率),可定期重新生成 grid_levels 并重新计算索引。

多维网格

结合其他维度(如交易量、波动率),可构建更复杂的网格策略,但核心定位逻辑仍依赖 bisect_right()函数

实现倍数委托

如何实现网格交易的倍数委托,请参见《网格交易中倍数委托的实现方法》。

码字不易,原创更不易,如您觉得本文对您有帮助,麻烦动动您富贵的小手,点赞、收藏、关注、订阅!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel(函数篇):IF函数、FREQUNCY函数、截取函数、文本处理函数、日期函数、常用函数详解

目录 IF函数等于判断区间判断与AND函数、OR函数一同使用IFNA函数和IFERROR函数 FREQUNCY函数、分断统计LEFT、RIGHT、MID截取函数FIND函数、LEN函数SUBSTITUTE函数ASC函数、WIDECHAR函数实战&#xff1a;如何获取到表中所有工作簿名称文本处理函数TEXT函数TEXTJOIN函数 日期函数…

生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图

刚刚实现而已&#xff1a;第一次明白&#xff0c;双击或file:///打开html文件&#xff0c;居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页&#xff0c;只是太大太笨。 需要安装node.js&#xff0c;npm安装更多依赖&#xff1a;…

Git 分支删除操作指南(含本地与远程)

&#x1f680; Git 分支删除操作指南&#xff08;含本地与远程&#xff09; 在多人协作的开发过程中&#xff0c;定期清理已合并的临时分支&#xff08;如 feature/*、bugfix/*、hotfix/* 等&#xff09;可以保持仓库整洁&#xff0c;避免混乱。 &#x1f4cc; 分支命名规范回…

Qt中打开windows的cmd窗口并显示

在windows上&#xff0c;用Qt的GUI程序打开另一个程序&#xff0c;使用QProcess即可&#xff0c;并且被打开的程序通常也会显示出来&#xff0c;但是如果想要打开dos窗口并显示&#xff0c;并执行其中的命令或者批处理&#xff0c;则需要使用QProcess提供的windows特有的函数QP…

Modbus TCP到RTU:轻松转换指南!

Modbus TCP 到 RTU&#xff1a;轻松转换指南&#xff01; 在现代工业自动化领域&#xff0c;Modbus TCP和Modbus RTU两种通信协议因其高效、稳定的特点被广泛应用。然而&#xff0c;随着技术的发展和设备升级的需求&#xff0c;经常会遇到需要将这两种协议进行互相转换的场景。…

微信小程序订阅消息发送消息,点击消息进入小程序页面

1、在小程序官网订阅消息选用或创建消息模板获取模板ID可多个 如图&#xff1a; 2、微信小程序前端页面发送请求订阅权限 请求模板id的权限可以是一个可以是多个&#xff0c;用户同意订阅&#xff0c;获取code传递给后端——后端拿到code生成唯一的openid用于发送订阅消息 注…

卷积神经网络 - 卷积层

卷积神经网络一般由卷积层、汇聚层和全连接层构成&#xff0c;本文我们来学习卷积层。 卷积层&#xff08;Convolutional Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的核心组件&#xff0c;专门用于处理具有网格结构的数据&#xff08;如图像、音频、时间序…

Vue3全局化配置(ConfigProvider)

效果如下图&#xff1a; 在线预览 APIs ConfigProvider 参数说明类型默认值theme主题对象Theme{}abstractboolean是否不存在 DOM 包裹元素truetagstringConfigProvider 被渲染成的元素&#xff0c;abstract 为 true 时有效‘div’ Theme Type 名称说明类型默认值common?全…

LabVIEW烟气速度场实时监测

本项目针对燃煤电站烟气流速实时监测需求&#xff0c;探讨了静电传感器结构与速度场超分辨率重建方法&#xff0c;结合LabVIEW多板卡同步采集与实时处理技术&#xff0c;开发出一个高效的烟气速度场实时监测系统。该系统能够在高温、高尘的复杂工况下稳定运行&#xff0c;提供高…

若依excel工具类导出excel模板数据带下拉映射

导出模板代码&#xff0c;原理是combo属性 传递一个数组 里面是label下拉数组。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…

3.8 Spring Boot监控:Actuator+Prometheus+Grafana可视化

在Spring Boot应用中&#xff0c;通过整合Actuator、Prometheus和Grafana可以构建完整的监控体系&#xff0c;实现指标采集、存储和可视化。以下是具体实现步骤&#xff1a; 一、Spring Boot Actuator 配置 作用&#xff1a;暴露应用健康指标、性能数据等监控端点。 1. 添加依…

启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——二叉树序列构造探秘——堆的奥义与实现诗篇

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、堆的定义与结构二、堆的实现1.堆的初始化和销毁堆的初始化堆的销毁 2.向上调整算法和入堆向上调整算法入堆 3.向下调整算法和出堆顶数…

“Failed to Load SteamUI.dll” 错误详解:全面解析与高效解决方案,助你快速修复 Steam 客户端问题

在使用 Steam 客户端时&#xff0c;你是否遇到过 failed to load steamui.dll 错误&#xff1f;这个令人头疼的问题可能导致 Steam 无法正常启动&#xff0c;影响游戏体验。Failed to load steamui.dll 错误通常与文件损坏、系统配置或软件冲突有关&#xff0c;但无需担心&…

STM32 DAC详解:从原理到实战输出正弦波

目录 一、DAC基础原理1.1 DAC的作用与特性1.2 DAC功能框图解析 二、DAC配置步骤2.1 硬件配置2.2 初始化结构体详解 三、DAC数据输出与波形生成3.1 数据格式与电压计算3.2 正弦波生成实战3.2.1 生成正弦波数组3.2.2 配置DMA传输3.2.3 定时器触发配置 四、常见问题与优化建议4.1 …

CNN 稠密任务经典结构

FCN UNet FPN FCNUNETFPNpadding无&#xff08;逐渐变小&#xff09; 有&#xff08;左右对称&#xff09;上采样 双线性双线性 最近邻跳跃链接 相加 Cropcat 1x1卷积相加 三个网络差不多&#xff0c;UNet名字最直观&#xff0c;后续流传…

AI学习第二天--监督学习 半监督学习 无监督学习

目录 1. 监督学习&#xff08;Supervised Learning&#xff09; 比喻&#xff1a; 技术细节&#xff1a; 形象例子&#xff1a; 2. 无监督学习&#xff08;Unsupervised Learning&#xff09; 比喻&#xff1a; 技术细节&#xff1a; 形象例子&#xff1a; 3. 半监督学…

Elasticsearch:为推理端点配置分块设置

推理端点对一次可处理的文本量有限&#xff0c;具体取决于模型的输入容量。分块&#xff08;Chunking&#xff09; 是指将输入文本拆分成符合这些限制的小块的过程&#xff0c;在将文档摄取到 semantic_text 字段时会进行分块。分块不仅有助于保持输入文本在可处理范围内&#…

Unity打包Android平台调用sherpa-onnx

https://github.com/xue-fei/sherpa-onnx-unity 最初测试了PC的Win和Linux平台&#xff0c;直接从nuget缓存包中拷贝相关文件&#xff0c;按示例写了语音转文字和文字转语音的测试代码&#xff0c;功能都正常。 然后是Android端&#xff0c;看了示例发现有编译好的jni.so之类的…

传统会议室接入神旗视讯-2 Android会议室大屏设备 (Maxhub, Newline, TCL等)

随着企业对视频会议安全性、稳定性和统一管理的需求日益增长&#xff0c;私有化视频会议系统凭借其全平台兼容性、高安全性部署和智能化会控能力&#xff0c;成为政企客户的核心选择。Android会议室大屏设备&#xff08;Maxhub, Newline, TCL等&#xff09;作为国内主流智能会议…

个人blog系统 前后端分离 前端js后端go

系统设计&#xff1a; 1.使用语言&#xff1a;前端使用vue&#xff0c;并使用axios向后端发送数据。后端使用的是go的gin框架&#xff0c;并使用grom连接数据库实现数据存储读取。 2.设计结构&#xff1a; 最终展示&#xff1a;仅展示添加模块&#xff0c;其他模块基本相似 前…