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

embedded/2024/10/25 6:52:57/


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

  • STRUCT: 代表需要输入的格式化的信息
  • IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的
  • SEARCH: 需要从某地比如数据库检索搜集信息
  • SUM: 一种宏观的加和操作, 比如两个股票户A+B=AB,微观上实际还是有差异
  • GROUP: 一种聚合操作,目的是把符合条件的对象聚合起来
  • FUNCTION: 代表可复用的函数
  • RAISE: 代表出现了致命错误需要人工处理
  • PRINT: 代表需要被注意的提醒
  • RETURN: 代表可以被函数外部接受的指令
STRUCT 产品信息产品ID: 取值范围为正整数产品分类: 取值范围为[增强, 对冲, 杠杆对冲, 多空, 选股]
END STRUCTSTRUCT 股票账户 产品ID: 账户名: 股票市值: 取值范围为正浮点数股票可用: 取值范围为正浮点数股票账户交易应留: 取值范围为正浮点数股票账户持仓IF: 取值范围为正整数股票账户持仓IC: 取值范围为正整数股票账户持仓IM: 取值范围为正整数
END STRUCTSTRUCT 期货账户产品ID: 账户名: 期货保证金: 取值范围为正浮点数期货保证金比例: 取值范围为[0.12,1)期货可用: 取值范围为正浮点数期货应留: 取值范围为正浮点数期货账户持仓IF: 取值范围为整数期货账户持仓IC: 取值范围为整数期货账户持仓IM: 取值范围为整数
END STRUCTSTRUCT 融券账户产品ID: 账户名: 货币基金市值: 取值范围为正浮点数可用资金: 取值范围为正浮点数融券负债: 取值范围为正浮点数融券账户持仓IF: 取值范围为负整数融券账户持仓IC: 取值范围为负整数融券账户持仓IM: 取值范围为负整数
END STRUCTSTRUCT 申赎信息申赎方向: 取值范围为[申购, 赎回]申赎金额: 取值范围为带符号浮点数申赎日期: 取值为日期资金到账日期: 取值为日期
END STRUCTIMPORT 当前日期 // 输入当前日期
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.5RAISE 有未处理的暴露, 请手动处理后再处理申赎
END FUNCTIONFUNCTION MAIN(产品, 申赎)IF 当前日期 == 申赎.申赎日期IF 产品.产品分类 == 增强IF 期货账户 == 无IF 申赎.申赎方向 == 赎回股票应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数)减仓后股票持仓手数 = 股票.股票账户持仓 - 股票应减仓手数IF 减仓后股票持仓手数 < 0RAISE 有超过持仓价值的赎回RETURN 股票应减仓手数ELSE检查指增产品是否存在暴露()申购后未加仓资金 = 股票.股票可用 + 期货.期货保证金 + 期货.期货可用 + 申赎.申赎金额期货现对冲价值 = 期货.期货保证金 / 期货保证金比例申购后暴露 = 预期未加仓资金 - 期货现对冲价值期货需加减仓手数 = 四舍五入(申购后暴露 / 指数价格 / 乘数)加减仓后期货持仓手数 = 期货.期货账户持仓 + 期货需加减仓手数期货户合计应保留资金 = 取绝对值(加减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用IF 期货户需调入资金 > 0IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户ELSERETURN 期货需加减仓手数, 期货户需调入资金ELSEPRINT 期货资金有富余RETURN 期货需加减仓手数ELIF 当前日期 == 申赎.资金到账日期 - 1IF 产品.产品分类 == 增强 AND 申赎.申赎方向 == 赎回 AND 期货账户 == 有检查指增产品是否存在暴露()多空应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))减仓后股票持仓手数 = 股票.股票账户持仓 - 多空应减仓手数IF 减仓后股票持仓手数 < 0RAISE 有超过持仓价值的赎回减仓后期货持仓手数 = 期货.期货账户持仓 + 多空应减仓手数期货户合计应保留资金 = 取绝对值(减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用IF 期货户需调入资金 > 0IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户ELSERETURN 多空应减仓手数, 期货户需调入资金ELSEPRINT 期货资金有富余RETURN 多空应减仓手数ELIF (产品.产品分类 == 对冲 OR 产品.产品分类 == 杠杆对冲) AND 申赎.申赎方向 == 赎回多空应减仓手数 = 向上取整(-申赎.申赎金额 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))减仓后股票持仓手数 = 股票.股票账户持仓 - 多空应减仓手数IF 减仓后股票持仓手数 < 0RAISE 有超过持仓价值的赎回减仓后期货持仓手数 = 期货.期货账户持仓 + 多空应减仓手数期货户合计应保留资金 = 取绝对值(减仓后期货持仓手数) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用IF 期货户需调入资金 > 0IF 股票.股票可用 - 股票.股票账户交易应留 < 期货户需调入资金RAISE 股票需减仓{期货户需调入资金 - (股票.股票可用 - 股票.股票账户交易应留)}以补充期货户ELSERETURN 多空应减仓手数, 期货户需调入资金ELSEPRINT 期货资金有富余RETURN 多空应减仓手数ELIF 当前日期 == 申赎.资金到账日期IF 产品.产品分类 == 增强IF 期货账户 == 无IF 申赎.申赎方向 == 赎回从股票户划出的赎回资金 = -申赎.申赎金额IF 股票.股票可用 - 股票.股票账户交易应留 < -申赎.申赎金额RAISE 股票户资金不足以划出, 应划出{-申赎.申赎金额}, 最大可划出{股票.股票可用}, 但应留{股票.股票账户交易应留}ELSERETURN 从股票户划出的赎回资金ELSE划入股票户资金 = 申赎.申赎金额股票可加仓资金 = 划入股票户资金 + 股票.股票可用 - 股票.股票账户交易应留股票应加仓手数 = 向下取整(股票可加仓资金 / 指数价格 / 乘数)IF 股票应加仓手数 <= 0PRINT 资金紧张, 不建议加仓ELSERETURN 股票应加仓手数, 划入股票户资金ELSEIF 申赎.申赎方向 == 赎回期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用IF 股票.股票可用 - 股票.股票账户交易应留 - 期货户需调入资金 < -申赎.申赎金额RAISE 资金不足以划出ELSEIF 期货户需调入资金 < 0从期货户划出的赎回资金 = -期货户需调入资金从股票户划出的赎回资金 = -申赎.申赎金额 - 从期货户划出的赎回资金RETURN 从期货户划出的赎回资金, 从股票户划出的赎回资金ELSE从股票户划入期货户资金 = -期货户需调入资金从股票户划出的赎回资金 = -申赎.申赎金额RETURN 从股票户划入期货户资金, 从股票户划出的赎回资金ELSE划入股票户资金 = 申赎.申赎金额股票可加仓资金 = 划入股票户资金 + 股票.股票可用 - 股票.股票账户交易应留股票应加仓手数 = 向下取整(股票可加仓资金 / 指数价格 / 乘数)期货减仓后持仓 = 期货.期货账户持仓 - 股票应加仓手数IF 股票应加仓手数 <= 0PRINT 资金紧张, 不建议加仓ELSEIF 期货减仓后持仓 < 0RAISE 期货持仓有误期货减仓释放资金 = 股票应加仓手数 * 指数价格 * 乘数 * 期货含安全垫保证金占比IF 四舍五入(期货减仓释放资金 / 指数价格 / 乘数) >= 1PRINT 本次申购加仓资金释放的期货资金较多, 需将这部分资金对冲掉RETURN 股票应加仓手数, 划入股票户资金ELIF 产品.产品分类 == 对冲 OR 产品.产品分类 == 杠杆对冲IF 申赎.申赎方向 == 赎回期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需调入资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用IF 股票.股票可用 - 股票.股票账户交易应留 - 期货户需调入资金 < -申赎.申赎金额RAISE 资金不足以划出ELSEIF 期货户需调入资金 < 0从期货户划出的赎回资金 = -期货户需调入资金从股票户划出的赎回资金 = -申赎.申赎金额 - 从期货户划出的赎回资金RETURN 从期货户划出的赎回资金, 从股票户划出的赎回资金ELSE从股票户划入期货户资金 = -期货户需调入资金从股票户划出的赎回资金 = -申赎.申赎金额RETURN 从股票户划入期货户资金, 从股票户划出的赎回资金ELSE期货户合计应保留资金 = 取绝对值(期货.期货账户持仓) * 指数价格 * 乘数 * 期货含安全垫保证金占比期货户需补充资金 = 期货户合计应保留资金 - 期货.期货保证金 - 期货.期货可用股票户需补充资金 = 股票.股票账户交易应留 - 股票.股票可用多空加仓可用资金 = 申赎.申赎金额 - 期货户需补充资金 - 股票户需补充资金多空加仓手数 = 向下取整(多空加仓可用资金 / 指数价格 / 乘数 / (1 + 期货含安全垫保证金占比))IF 多空加仓手数 <= 0PRINT 资金紧张, 不建议加仓期货户加仓需要资金 = 多空加仓手数 * 指数价格 * 乘数 * 期货含安全垫保证金占比划入期货户的申购资金 = 期货户需补充资金 + 期货户加仓需要资金IF 划入期货户的申购资金 <= 0划入股票户的申购资金 = 申赎.申赎金额从期货户划入股票户的资金 = -划入期货户的申购资金RETURN 多空加仓手数, 从期货户划入股票户的资金, 划入股票户的申购资金ELIF 划入期货户的申购资金 <= 申赎.申赎金额划入股票户的申购资金 = 申赎.申赎金额 - 划入期货户的申购资金RETURN 多空加仓手数, 划入期货户的申购资金, 划入股票户的申购资金ELSE从股票户划入期货户的资金 = 划入期货户的申购资金 - 申赎.申赎金额划入期货户的申购资金 = 申赎.申赎金额RETURN 多空加仓手数, 划入期货户的申购资金, 从股票户划入期货户的资金ELSEELSEPRINT 该产品当日无需处理该笔申赎
END FUNCTIONFOREACH 产品FOREACH 申赎MAIN(产品, 申赎)TODO 未处理"申赎.申赎日期==申赎.资金到账日期-1"的情况
TODO 考虑杠杆对冲产品多头保证金带杠杆
TODO 考虑对冲产品可能包含融券持仓

http://www.ppmy.cn/embedded/132270.html

相关文章

统一过程和敏捷过程

统一过程 RationalUnified Process&#xff08;RUP&#xff09;描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做&#xff0c;描述了一组以某种顺序完成的活动 统一过程模型是风险驱动的、基于用例技术的&#xff0c;以架构为中心的、迭代的、可配置的…

[STM32]从零开始的IIC协议讲解与设备驱动

一、什么是IIC协议&#xff1f; IIC&#xff08;Inter-Integrated Circuit&#xff09;协议&#xff0c;也称为IC&#xff0c;是一种广泛使用的串行通信协议&#xff0c;主要用于在短距离内连接微控制器、传感器和其他集成电路&#xff08;IC&#xff09;。IIC协议由飞利浦公司…

【rCore OS 开源操作系统】Rust 宏

前置知识点 各种宏 宏定义&#xff1a; 使用 macro_rules! 关键词来定义宏&#xff0c;这是一种模式匹配式的宏定义方式。 自 Rust 1.26 版本开始&#xff0c;可以使用 proc_macro 属性宏来定义过程宏&#xff08;如 derive 宏&#xff09;。 宏的使用&#xff1a; 宏可以通过…

uniapp:uni.createSelectorQuery函数结合vue的watch函数使用实例

提醒 本文实例是使用uniapp进行开发演示的。 一、需求场景 在开发详情页面时&#xff0c;不同产品描述文案不同&#xff0c;有的文案比较长&#xff0c;需求上要求描述文案最多展示4行文案&#xff0c;少于4行文案&#xff0c;全部显示&#xff0c;此UI高度自动适配&#xff0c…

网络爬虫-Python网络爬虫和C#网络爬虫

爬虫是一种从互联网抓取数据信息的自动化程序&#xff0c;通过 HTTP 协议向网站发送请求&#xff0c;获取网页内容&#xff0c;并通过分析网页内容来抓取和存储网页数据。爬虫可以在抓取过程中进行各种异常处理、错误重试等操作&#xff0c;确保爬取持续高效地运行 1、Python网…

平安养老险深圳分公司:创新养老服务,深入践行金融为民

党的二十届三中全会《决定》提出&#xff1a;“积极发展科技金融、绿色金融、普惠金融、养老金融、数字金融&#xff0c;加强对重大战略、重点领域、薄弱环节的优质金融服务。” 为经济社会发展提供高质量服务&#xff0c;更好满足人民日益增长的美好生活需要&#xff0c;金融…

ubuntu下快捷键启动程序

背景&#xff1a;公司自开发的软件&#xff0c;经常需要启动&#xff0c;每次去找目录启动很麻烦&#xff0c;所以想快捷启动 方法1&#xff1a; 通过编辑.baserc启动 例如启动程序是toolA, 放在/home/user/software/目录下&#xff0c;那么在~/.baserc里面加入一行代码 al…

Linux的例行性工作1

[rootserver ~]# vim test2.sh //编辑脚本 1、每分钟执行命令 [rootserver ~]# crontab -e [rootserver ~]# crontab -l* * * * * sh /root/test2.sh[rootserver ~]# ls anaconda-ks.cfg cro.txt dead.letter test2.sh testcrondtab.sh [rootserver ~]# cat cro.txt…