指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路


定义一些关键字代表的意义

  • STRUCT: 代表需要输入的格式化的信息
  • IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的
  • SEARCH: 需要从某地比如数据库检索搜集信息
  • SUM: 一种宏观的加和操作, 比如两个股票户A+B=AB,微观上实际还是有差异
  • GROUP: 一种聚合操作,目的是把符合条件的对象聚合起来
  • FUNCTION: 代表可复用的函数
  • RAISE: 代表出现了致命错误需要人工处理
  • PRINT: 代表需要被注意的提醒
  • RETURN: 代表可以被函数外部接受的指令
STRUCT 产品信息
    产品ID: 取值范围为正整数
    产品分类: 取值范围为[增强, 对冲, 杠杆对冲, 多空, 选股]
END STRUCT

STRUCT 股票账户 
    产品ID: 
    账户名: 
    股票市值: 取值范围为正浮点数
    股票可用: 取值范围为正浮点数
    股票账户交易应留: 取值范围为正浮点数
    股票账户持仓IF: 取值范围为正整数
    股票账户持仓IC: 取值范围为正整数
    股票账户持仓IM: 取值范围为正整数
END STRUCT

STRUCT 期货账户
    产品ID: 
    账户名: 
    期货保证金: 取值范围为正浮点数
    期货保证金比例: 取值范围为[0.12,1)
    期货可用: 取值范围为正浮点数
    期货应留: 取值范围为正浮点数
    期货账户持仓IF: 取值范围为整数
    期货账户持仓IC: 取值范围为整数
    期货账户持仓IM: 取值范围为整数
END STRUCT

STRUCT 融券账户
    产品ID: 
    账户名: 
    货币基金市值: 取值范围为正浮点数
    可用资金: 取值范围为正浮点数
    融券负债: 取值范围为正浮点数
    融券账户持仓IF: 取值范围为负整数
    融券账户持仓IC: 取值范围为负整数
    融券账户持仓IM: 取值范围为负整数
END STRUCT

STRUCT 申赎信息
    申赎方向: 取值范围为[申购, 赎回]
    申赎金额: 取值范围为带符号浮点数
    申赎日期: 取值为日期
    资金到账日期: 取值为日期
END STRUCT

IMPORT 当前日期 // 输入当前日期
IMPORT 期货含安全垫保证金占比 // 通常股指期货为0.12+0.1+0.12*0.1=0.232
IMPORT 沪深300指数价格与乘数  // 取值范围为正浮点数
IMPORT 中证500指数价格与乘数  // 取值范围为正浮点数
IMPORT 中证1000指数价格与乘数  // 取值范围为正浮点数

SEARCH & SUM 股票 // 汇总该产品所有股票账户
SEARCH & SUM 期货 // 汇总该产品所有期货账户
SEARCH & SUM 融券 // 汇总该产品所有融券账户
SEARCH & GROUP 申赎 // 汇总每个产品产品当日涉及的所有申赎信息

FUNCTION 检查指增产品是否存在暴露()
    未加仓资金 = 股票.股票可用 + 期货.期货保证金 + 期货.期货可用
    现对冲价值 = 期货.期货保证金 / 期货保证金比例
    暴露 = 未加仓资金 - 现对冲价值
    IF 暴露 > 指数价格 * 乘数 * 期货含安全垫保证金占比 * 0.5
        RAISE 有未处理的暴露, 请手动处理后再处理申赎
END FUNCTION

FUNCTION MAIN(产品, 申赎)
    IF 当前日期 == 申赎.申赎日期
        IF 产品.产品分类 == 增强
            IF 期货账户 == 无
                IF 申赎.申赎方向 == 赎回
                    股票应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数)
                    减仓后股票持仓手数 = 股票.股票账户持仓 - 股票应减仓手数
                    IF 减仓后股票持仓手数 < 0
                        RAISE 有超过持仓价值的赎回
                    RETURN 股票应减仓手数
            ELSE
                检查指增产品是否存在暴露()
                申购后未加仓资金 = 股票.股票可用 + 期货.期货保证金 + 期货.期货可用 + 申赎.申赎金额
                期货现对冲价值 = 期货.期货保证金 / 期货保证金比例
                申购后暴露 = 预期未加仓资金 - 期货现对冲价值
                期货需加减仓手数 = 四舍五入(申购后暴露 / 指数价格 / 乘数)
                加减仓后期货持仓手数 = 期货.期货账户持仓 + 期货需加减仓手数
                期货户合计应保留资金 = 取绝对值(加减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比
                期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
                IF 期货户需调入资金 > 0
                    IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金
                        RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户
                    ELSE
                        RETURN 期货需加减仓手数, 期货户需调入资金
                ELSE
                    PRINT 期货资金有富余
                    RETURN 期货需加减仓手数
    ELIF 当前日期 == 申赎.资金到账日期 - 1
        IF 产品.产品分类 == 增强 AND 申赎.申赎方向 == 赎回 AND 期货账户 == 有
            检查指增产品是否存在暴露()
            多空应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))
            减仓后股票持仓手数 = 股票.股票账户持仓 - 多空应减仓手数
            IF 减仓后股票持仓手数 < 0
                RAISE 有超过持仓价值的赎回
            减仓后期货持仓手数 = 期货.期货账户持仓 + 多空应减仓手数
            期货户合计应保留资金 = 取绝对值(减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比
            期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
            IF 期货户需调入资金 > 0
                IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金
                    RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户
                ELSE
                    RETURN 多空应减仓手数, 期货户需调入资金
            ELSE
                PRINT 期货资金有富余
                RETURN 多空应减仓手数
        ELIF (产品.产品分类 == 对冲 OR 产品.产品分类 == 杠杆对冲) AND 申赎.申赎方向 == 赎回
            多空应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))
            减仓后股票持仓手数 = 股票.股票账户持仓 - 多空应减仓手数
            IF 减仓后股票持仓手数 < 0
                RAISE 有超过持仓价值的赎回
            减仓后期货持仓手数 = 期货.期货账户持仓 + 多空应减仓手数
            期货户合计应保留资金 = 取绝对值(减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比
            期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
            IF 期货户需调入资金 > 0
                IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金
                    RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户
                ELSE
                    RETURN 多空应减仓手数, 期货户需调入资金
            ELSE
                PRINT 期货资金有富余
                RETURN 多空应减仓手数
    ELIF 当前日期 == 申赎.资金到账日期
        IF 产品.产品分类 == 增强
            IF 期货账户 == 无
                IF 申赎.申赎方向 == 赎回
                    从股票户划出的赎回资金 = -申赎.申赎金额
                    IF 股票.股票可用 - 股票.股票账户交易应留 < -申赎.申赎金额
                        RAISE 股票户资金不足以划出, 应划出{-申赎.申赎金额}, 最大可划出{股票.股票可用}, 但应留{股票.股票账户交易应留}
                    ELSE
                        RETURN 从股票户划出的赎回资金
                ELSE
                    划入股票户资金 = 申赎.申赎金额
                    股票可加仓资金 = 划入股票户资金 + 股票.股票可用 - 股票.股票账户交易应留
                    股票应加仓手数 = 向下取整(股票可加仓资金 / 指数价格 / 乘数)
                    IF 股票应加仓手数 <= 0
                        PRINT 资金紧张, 不建议加仓
                    ELSE
                        RETURN 股票应加仓手数, 划入股票户资金
            ELSE
                IF 申赎.申赎方向 == 赎回
                    期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比
                    期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
                    IF 股票.股票可用 - 股票.股票账户交易应留 - 期货户需调入资金 < -申赎.申赎金额
                        RAISE 资金不足以划出
                    ELSE
                        IF 期货户需调入资金 < 0
                            从期货户划出的赎回资金 = -期货户需调入资金
                            从股票户划出的赎回资金 = -申赎.申赎金额 - 从期货户划出的赎回资金
                            RETURN 从期货户划出的赎回资金, 从股票户划出的赎回资金
                        ELSE
                            从股票户划入期货户资金 = -期货户需调入资金
                            从股票户划出的赎回资金 = -申赎.申赎金额
                            RETURN 从股票户划入期货户资金, 从股票户划出的赎回资金
                ELSE
                    划入股票户资金 = 申赎.申赎金额
                    股票可加仓资金 = 划入股票户资金 + 股票.股票可用 - 股票.股票账户交易应留
                    股票应加仓手数 = 向下取整(股票可加仓资金 / 指数价格 / 乘数)
                    期货减仓后持仓 = 期货.期货账户持仓 - 股票应加仓手数
                    IF 股票应加仓手数 <= 0
                        PRINT 资金紧张, 不建议加仓
                    ELSE
                        IF 期货减仓后持仓 < 0
                            RAISE 期货持仓有误
                        期货减仓释放资金 = 股票应加仓手数 * 指数价格 * 乘数 * 期货含安全垫保证金占比
                        IF 四舍五入(期货减仓释放资金 / 指数价格 / 乘数) >= 1
                            PRINT 本次申购加仓资金释放的期货资金较多, 需将这部分资金对冲掉
                        RETURN 股票应加仓手数, 划入股票户资金
        ELIF 产品.产品分类 == 对冲 OR 产品.产品分类 == 杠杆对冲
            IF 申赎.申赎方向 == 赎回
                期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比
                期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
                IF 股票.股票可用 - 股票.股票账户交易应留 - 期货户需调入资金 < -申赎.申赎金额
                    RAISE 资金不足以划出
                ELSE
                    IF 期货户需调入资金 < 0
                        从期货户划出的赎回资金 = -期货户需调入资金
                        从股票户划出的赎回资金 = -申赎.申赎金额 - 从期货户划出的赎回资金
                        RETURN 从期货户划出的赎回资金, 从股票户划出的赎回资金
                    ELSE
                        从股票户划入期货户资金 = -期货户需调入资金
                        从股票户划出的赎回资金 = -申赎.申赎金额
                        RETURN 从股票户划入期货户资金, 从股票户划出的赎回资金
            ELSE
                期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比
                期货户需补充资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用
                股票户需补充资金 = 股票.股票账户交易应留 - 股票.股票可用
                多空加仓可用资金 = 申赎.申赎金额 - 期货户需补充资金 - 股票户需补充资金
                多空加仓手数 = 向下取整(多空加仓可用资金 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))
                IF 多空加仓手数 <= 0
                    PRINT 资金紧张, 不建议加仓
                期货户加仓需要资金 = 多空加仓手数 * 指数价格 * 乘数 * 期货含安全垫保证金占比
                划入期货户的申购资金 = 期货户需补充资金 + 期货户加仓需要资金
                IF 划入期货户的申购资金 <= 0
                    划入股票户的申购资金 = 申赎.申赎金额
                    从期货户划入股票户的资金 = -划入期货户的申购资金
                    RETURN 多空加仓手数, 从期货户划入股票户的资金, 划入股票户的申购资金
                ELIF 划入期货户的申购资金 <= 申赎.申赎金额
                    划入股票户的申购资金 = 申赎.申赎金额 - 划入期货户的申购资金
                    RETURN 多空加仓手数, 划入期货户的申购资金, 划入股票户的申购资金
                ELSE
                    从股票户划入期货户的资金 = 划入期货户的申购资金 - 申赎.申赎金额
                    划入期货户的申购资金 = 申赎.申赎金额
                    RETURN 多空加仓手数, 划入期货户的申购资金, 从股票户划入期货户的资金
        ELSE
    ELSE
        PRINT 该产品当日无需处理该笔申赎
END FUNCTION

FOREACH 产品
    FOREACH 申赎
        MAIN(产品, 申赎)

TODO 未处理"申赎.申赎日期==申赎.资金到账日期-1"的情况
TODO 考虑杠杆对冲产品多头保证金带杠杆
TODO 考虑对冲产品可能包含融券持仓

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

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

相关文章

Umi UI报错:连接失败,请尝试重启dev服务

Umi UI连接失败&#xff0c;请尝试重启dev服务 使用umi ui时遇到以下问题 报错如下 从报错可以看出是淘宝镜像失效的问题&#xff0c;检查淘宝镜像 可以看出淘宝镜像是最新的&#xff0c;并无问题 经过查找发现报错是因为依赖文件中使用了旧的淘宝镜像&#xff0c;在node…

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…

开发涉及的安全规范整理

#1024程序员节&#xff5c;征文# 文章目录 前言安全场景与措施API调用方式鉴权参数校验日志打印数据保存加密 总结 前言 这篇文章我们来整理下写代码和方案设计中的安全规范问题&#xff0c;内容偏服务端&#xff0c;即使是入门的新人&#xff0c;如果你对安全有所了解会让成熟…

go语言中的Scanf()输入函数

Scanf() 第一种情况 package mainimport "fmt"func main() {var a intfor {fmt.Println("请输入一个整数:")fmt.Scanf("%d", &a)fmt.Println("----------------", a)} }运行结果&#xff1a; 解释&#xff1a; 出现这种现象是因…

CentOS 8在Linux虚拟机修改IP地址,出现:错误:“ens160“ 不是活动的连接。错误:未提供活动连接。

问题&#xff1a;错误&#xff1a;"ens160" 不是活动的连接。错误&#xff1a;未提供活动连接。 1.查看网络服务运行状态&#xff1a; 1)CentOS 7执行命令&#xff1a;systemctl status network 2)CentOS 8执行命令&#xff1a;systemctl status NetworkManager&a…

双十一有哪些适合学生党的好物?五款学生党必备好物分享

在双十一这个全民狂欢的购物盛宴中&#xff0c;不仅仅是寻找生活的小确幸&#xff0c;更是自我提升与投资的最佳时机。学习&#xff0c;作为个人成长的阶梯&#xff0c;其相关的好物选择显得尤为重要。本文精选了一系列学习、生活神器&#xff0c;旨在为您的学习之旅增添动力与…

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中&#xff0c;我们通过手机可以实现非常多的操作&#xff0c;同时手机中有存在许多我们的隐私信息&#xff0c;伴随使用手机的时间增多&#xff0c;手机中的信息也有可能被暴露&#xff0c;尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…

青少年编程能力等级测评CPA C++(三级)-试卷1

青少年编程能力等级测评CPA C&#xff08;三级&#xff09;-试卷1 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP3_1_1&#xff0e;以下有关模拟算法的叙述中&#xff0c;不正确的是&#xff08; &#xff09;。 A&#xff0e;模拟…

普通数组矩阵

文章目录 普通数组一、最大子数组二、合并区间三、轮转数组四、除自身以外数组的乘积五、缺失的第一个正数 普通数组 一、最大子数组 题目链接 方法一&#xff1a;动态规划 方法二&#xff1a;前缀和&#xff08;有点难理解&#xff09; 二、合并区间 题目链接 三、轮…

软件部署-Docker容器化技术(二)

上一期分享了Docker的一些基本内容&#xff0c;这一期主要对构建基础镜像和Docker网络、文件挂载再展开分享下&#xff0c;可能不一定做得很好&#xff0c;主要是在学习的过程中有一些自己的总结和思考&#xff0c;和大家一起学习。 名词说明&#xff1a;这里的宿主机是指liun…

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

Shopee虾皮登录不了的常见原因及解决方式

在近年来&#xff0c;随着电子商务的迅猛发展&#xff0c;Shopee虾皮作为东南亚地区的领先购物平台&#xff0c;吸引了大量用户。一些用户在使用过程中常常遇到登录问题&#xff0c;而登录不了的原因可能多种多样&#xff0c;包括网络连接不稳定、账号信息输入错误&#xff0c;…

【搭建个人图库】Docker部署Piwigo图库与公网环境远程传图全攻略

文章目录 前言1. 安装Docker2. 创建并启动Piwigo容器3. 本地访问测试与简单使用4. 公网远程访问本地Piwigo4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定公网地址远程访问 前言 本文和大家分享一下如何在Linux系统使用Docker部署一款开源的网络图片库管理系统Piw…

54页可编辑PPT | 大型集团企业数据治理解决方案

这份PPT是关于大型集团企业数据治理的全面解决方案&#xff0c;它详细介绍了数据治理的背景、需求、管理范围、框架、解决思路&#xff0c;以及数据治理在实际操作中的关键步骤。内容涵盖了数据架构、数据质量、数据应用等方面的问题&#xff0c;并提出了数据资产透视、智能搜索…

K8S如何基于Istio重新实现微服务

K8S如何基于Istio重新实现微服务 认识 Istio前言Istio 的理念Istio 的架构数据平面控制平面服务与 Istio 的关系 Istio 实践环境准备安装 Helm安装Istio 使用 Istio 代理运行应用情感分析应用的架构使用 Istio 代理运行应用Sidecar 注入Ingress 网关网关资源VirtualService 资源…

离线部署jdk8,jdk17, jdk21

目录 一、下载地址二、环境三、离线部署思路步骤 四、部署脚本 在开发过程中&#xff0c;有时我们需要在同一台机器上安装多个不同版本的 JDK&#xff0c;以满足不同项目的需求。本文将详细介绍如何在 Ubuntu 24.04 中离线安装 JDK8、JDK17 和 JDK21。 一、下载地址 建议下载O…

融合DevOps打造企业高效流程体系的实践与探索

一、引言 转眼间&#xff0c;我已毕业十多年&#xff0c;在IT领域深耕不辍&#xff0c;曾涉足全栈研发、大数据研发、架构设计与项目管理等多个岗位&#xff0c;更主导过公司从市场到交付再到运营的全链条流程建设。在这漫长的职业生涯中&#xff0c;一个问题始终萦绕在我心头&…

web前端练习

01 代码&#xff1a;HTML部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>search</title>…

华为配置BFD状态与接口状态联动实验

组网图形 图1 配置BFD状态与接口状态联动组网图 BFD简介配置注意事项组网需求配置思路操作步骤配置文件 BFD简介 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要能够尽快检测到与相邻设备间的通信故障&#xff0c;以便及时采取措施&…

百科知识|选购指南

百科知识||选购指南 百科知识选购指南茶叶分类茶叶的味道来源茶叶制作步骤名茶其他一些茶叶的知识 百科知识 选购指南 茶叶 分类 茶叶种类: 六大茶类完美分析介绍&#xff01;茶友推荐收藏 (aboxtik.com) 1.绿茶&#xff08;发酵率0%&#xff09; 2.白茶&#xff08;发酵率…