JavaScript怎么实现商品期货移仓类库
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章主要介绍"JavaScript怎么实现商品期货移仓类库"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JavaScript怎么实现商品期货移仓类库"文章
千家信息网最后更新 2025年01月25日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安全错误
数据库的锁怎样保障安全
linux服务器运维手册
数据库中约束条件非空且唯一
服务器游戏挂机赚钱
安徽同徽网络技术信息
软件开发的电脑具体配置
www采用什么服务器工作模式
中信总行软件开发岗t3
自己开服务器要钱吗
房产中介erp数据库管理
自贡软件开发大概费用
大班幼儿网络安全
网络技术基础第一章考试
如何管理软件开发过程
数据库查询年龄大于20
win10密钥管理服务器
以案释法网络安全宣传
网络安全技术形考任务一
软件开发可以带自己的电脑吗
冒险岛2装备数据库
青海两会加强网络安全
统计年鉴是原始数据库
录像机和服务器区别
高新区推广网络技术怎么样
数据库计时器代码
路由器换服务器
网络安全审查利好上市公司
夕阳红网络技术服务中心
软件开发平台培训
银河网络技术服务有限公司
手持机软件开发