JavaScript怎么实现商品期货移仓类库
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍"JavaScript怎么实现商品期货移仓类库"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JavaScript怎么实现商品期货移仓类库"文章
千家信息网最后更新 2025年12月01日JavaScript怎么实现商品期货移仓类库
这篇文章主要介绍"JavaScript怎么实现商品期货移仓类库"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JavaScript怎么实现商品期货移仓类库"文章能帮助大家解决问题。
设计实现
编写商品期货策略的时候,经常有移仓的需求。那么如何实现这样的操作呢?在商品期货多品种主力自动移仓海龟交易策略中我们看到了相关移仓操作的实现。借鉴策略中的移仓机制,我们设计一个「商品期货移仓类库」。
移仓操作其实并不复杂,只是在需要移仓的时候,把当前仓位平掉再到需要移动到的合约开出新仓位即可。具体设计出两种使用场景。
A合约 -> B合约
待策略中编写的条件触发,执行一次A合约到B合约的移仓操作。
例如一次按钮交互操作触发:var q = $.NewTaskQueue() // 生成用于具体下单操作的对象,源自商品期货交易类库var t = $.NewTransfer(exchange, q, $.IsTrading) // 生成处理移仓操作的对象...var cmd = GetCommand() // 获取交互命令if(cmd) { // 接收到任何交互命令t.process("rb2010", "rb2101") // 执行移仓}...切换主力合约
检测系统中主力合约变更,进行当前旧主力合约到新主力合约的移仓操作。
该模板类库不设计参数。
// 导出函数(接口)$.NewTransfer = function (e, taskQueue, IsTrading) {var self = {}self.currSymbol = ""self.e = eself.q = taskQueueself.IsTrading = IsTradingself.arrAction = [] self.process = function(symbolA, symbolB) {if((typeof(symbolB) == "undefined" && !self.IsTrading(symbolA)) || (typeof(symbolB) != "undefined" && !self.IsTrading(symbolA) && !self.IsTrading(symbolB))) {return } self.arrAction = []// 检测参数是否有symbolB , 没有即为检测主力合约 , 有则为移仓具体合约if(typeof(symbolB) == "undefined") {// 检测symbolA合约是否为XX888 或者 XX000if(symbolA.indexOf("888") == -1 && symbolA.indexOf("000") == -1) {throw "缺少symbolB参数!"}// 检测是否触发移仓var insDetail = nullif(self.currSymbol == "") {insDetail = _C(self.e.SetContractType, symbolA)self.currSymbol = insDetail.InstrumentID}insDetail = _C(self.e.SetContractType, symbolA)if(self.currSymbol != insDetail.InstrumentID) {var oldSymbol = self.currSymbolvar pos = self.q.GetPosition(self.e, oldSymbol)if(pos && pos.Amount > 0) {// 移仓self.arrAction = [oldSymbol, insDetail.InstrumentID, pos]Log("开始移仓:", self.arrAction[0], "->", self.arrAction[1], self.arrAction, "#FF0000") } else {self.currSymbol = insDetail.InstrumentID} } } else {// 检测是否有symbolA持仓var pos = self.q.GetPosition(self.e, symbolA)if(pos && pos.Amount > 0) {// 移仓self.arrAction = [symbolA, symbolB, pos]Log("开始移仓:", self.arrAction[0], "->", self.arrAction[1], self.arrAction, "#FF0000") } else {Log("没有检测到", symbolA, "的仓位,pos:", pos, "#FF0000") } }if(self.arrAction.length == 3) {self.q.pushTask(self.e, self.arrAction[0], (self.arrAction[2].Type == PD_LONG || self.arrAction[2].Type == PD_LONG_YD ? "closebuy" : "closesell"), self.arrAction[2].Amount, function(task, ret){if(!ret) {Log(self.arrAction[0], "移仓平仓失败!", self.arrAction[0], "->", self.arrAction[1], "#FF0000")return }Log("移仓进度平仓成功,开始开仓!", self.arrAction[1], "数量:", self.arrAction[2].Amount, "#FF0000")self.q.pushTask(self.e, self.arrAction[1], (self.arrAction[2].Type == PD_LONG || self.arrAction[2].Type == PD_LONG_YD ? "buy" : "sell"), self.arrAction[2].Amount, function(task, ret){if(!ret) {Log(self.arrAction[1], "移仓开仓失败!", self.arrAction[0], "->", self.arrAction[1], "#FF0000")return }Log("移仓成功!", self.arrAction[0], "->", self.arrAction[1], "#FF0000") }) }) }while(self.q.size() > 0) {self.q.poll()Sleep(500) } }return self}// 测试函数,在主策略中执行function main() {var q = $.NewTaskQueue()var t = $.NewTransfer(exchange, q, $.IsTrading)var isTransfer = falsevar isFirst = truevar n = 0while(true) {if(exchange.IO("status")) {LogStatus(_D(), "已经连接!")if(isFirst) {isFirst = false exchange.SetContractType("rb1905")exchange.SetDirection("buy")var ticker = exchange.GetTicker()exchange.Buy(ticker.Last + 10, 1)Log(exchange.GetPosition()) } // 检测主力合约移仓t.process("rb888") // 模拟触发一次/* if(n == 20) { t.process("rb1905", "rb1910") } */// 检测条件触发移仓/* var cmd = GetCommand() if(cmd) { isTransfer = true } if(isTransfer) { t.process("rb2010", "rb2101") isTransfer = false } */} else {LogStatus(_D(), "未连接!") }n++Sleep(1000) }}该模板类库中的main函数即为在主策略中的测试代码,例如下图:
回测测试
测试代码在开始时,开出一个仓位,随后使用主力合约检测的方式移仓。
或者使用具体条件触发一次移仓,进行测试。
只进行一次具体的移仓操作。
关于"JavaScript怎么实现商品期货移仓类库"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
合约
检测
主力
商品
期货
策略
测试
设计
仓位
函数
参数
条件
知识
成功
代码
命令
对象
平仓
时候
模板
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
更改数据库的某个字段值
魔兽7.1数据库
狐表直连数据库安全
服务器的恶魂之泪
数据库索引优化的几个方面
微信检测到语音服务器连接异常
监狱网络安全应急预案
长沙网络安全实战培训工资高
数据库椒做什么用的
未来风科技感互联网ppt模板
小刀网络技术有限公司
柬政府网络安全
编号加0开头 数据库
如何备份服务器整个系统及文件
东方财富网 软件开发
网络安全课课件的视频
统一软件开发过程 ppt
网络安全法 数据安全
电脑rpg服务器是什么
简述数据库系统的安全机制
软件开发源码卖多少钱
临沂服务器运维管理系统方案
网络技术精品课程
瀚高数据库创建模式
怎么加入网络安全大赛队伍
埃克森数据库
服务器管理员工作好吗
身份验证服务器访问数据库
著名的蛋白质结构数据库
dell服务器如何管理