如何移植一个my语言策略
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容主要讲解"如何移植一个my语言策略",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何移植一个my语言策略"吧!对于趋势策略移植来说是非常简单的,我
千家信息网最后更新 2025年02月05日如何移植一个my语言策略
本篇内容主要讲解"如何移植一个my语言策略",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何移植一个my语言策略"吧!
对于趋势策略移植来说是非常简单的,我们可以使用一段范例代码,填充驱动策略的数据计算部分代码,填充交易信号触发条件即可。
可复用的范例代码:
以用于OKEX期货的策略为例。
// 全局变量var IDLE = 0var LONG = 1var SHORT = 2var OPENLONG = 3var OPENSHORT = 4var COVERLONG = 5var COVERSHORT = 6 var BREAK = 9var SHOCK = 10 var _State = IDLEvar Amount = 0 // 记录持仓数量var TradeInterval = 500 // 轮询间隔var PriceTick = 1 // 价格一跳var Symbol = "this_week" function OnTick(){ // 驱动策略的行情处理部分 // 待填充... // 交易信号触发处理部分 // 待填充... // 执行交易逻辑 var pos = null var price = null var currBar = records[records.length - 1] if(_State == OPENLONG){ pos = GetPosition(PD_LONG) // 判断是不是 满足状态,如果满足 修改状态 if(pos[1] >= Amount){ _State = LONG Amount = pos[1] // 更新实际量 return } price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2 Trade(OPENLONG, price, Amount - pos[1], pos, PriceTick) // (Type, Price, Amount, CurrPos, PriceTick) } if(_State == OPENSHORT){ pos = GetPosition(PD_SHORT) if(pos[1] >= Amount){ _State = SHORT Amount = pos[1] // 更新实际量 return } price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2 Trade(OPENSHORT, price, Amount - pos[1], pos, PriceTick) } if(_State == COVERLONG){ pos = GetPosition(PD_LONG) if(pos[1] == 0){ _State = IDLE return } price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2 Trade(COVERLONG, price, pos[1], pos, PriceTick) } if(_State == COVERSHORT){ pos = GetPosition(PD_SHORT) if(pos[1] == 0){ _State = IDLE return } price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2 Trade(COVERSHORT, price, pos[1], pos, PriceTick) }} // 交易逻辑部分function GetPosition(posType) { var positions = _C(exchange.GetPosition) var count = 0 for(var j = 0; j < positions.length; j++){ if(positions[j].ContractType == Symbol){ count++ } } if(count > 1){ throw "positions error:" + JSON.stringify(positions) } for (var i = 0; i < positions.length; i++) { if (positions[i].ContractType == Symbol && positions[i].Type === posType) { return [positions[i].Price, positions[i].Amount]; } } Sleep(TradeInterval); return [0, 0];} function CancelPendingOrders() { while (true) { var orders = _C(exchange.GetOrders) for (var i = 0; i < orders.length; i++) { exchange.CancelOrder(orders[i].Id); Sleep(TradeInterval); } if (orders.length === 0) { break; } }} function Trade(Type, Price, Amount, CurrPos, OnePriceTick){ // 处理交易 if(Type == OPENLONG || Type == OPENSHORT){ // 处理开仓 exchange.SetDirection(Type == OPENLONG ? "buy" : "sell") var pfnOpen = Type == OPENLONG ? exchange.Buy : exchange.Sell var idOpen = pfnOpen(Price, Amount, CurrPos, OnePriceTick, Type) Sleep(TradeInterval) if(idOpen) { exchange.CancelOrder(idOpen) } else { CancelPendingOrders() } } else if(Type == COVERLONG || Type == COVERSHORT){ // 处理平仓 exchange.SetDirection(Type == COVERLONG ? "closebuy" : "closesell") var pfnCover = Type == COVERLONG ? exchange.Sell : exchange.Buy var idCover = pfnCover(Price, Amount, CurrPos, OnePriceTick, Type) Sleep(TradeInterval) if(idCover){ exchange.CancelOrder(idCover) } else { CancelPendingOrders() } } else { throw "Type error:" + Type }} function main() { // 设置合约 exchange.SetContractType(Symbol) while(1){ OnTick() Sleep(1000) }}
举例:双均线策略的移植
麦语言回测:
麦语言策略代码:
MA5^^MA(C,5);MA15^^MA(C,15);CROSSUP(MA5,MA15),BPK;CROSSDOWN(MA5,MA15),SPK;
移植为JavaScript策略
首先给可复用的范例代码填充上行情获取、指标计算部分:
// 驱动策略的行情处理部分var records = _C(exchange.GetRecords) if (records.length < 15) { return } var ma5 = TA.MA(records, 5)var ma15 = TA.MA(records, 15)var ma5_pre = ma5[ma5.length - 3]var ma15_pre = ma15[ma15.length - 3]var ma5_curr = ma5[ma5.length - 2]var ma15_curr = ma15[ma15.length - 2]
可以看到,双均线策略非常简单,只是首先获取K线数据
records
,然后使用TA函数库
的均线函数TA.MA
计算出5日均线、15日均线(回测界面上可以看到,K线周期设置的是日K线,所以TA.MA(records, 5)
计算出的就是5日均线,TA.MA(records, 15)
15日均线)。
然后获取ma5
指标数据的倒数第二个点ma5_curr
(指标值),倒数第三个点ma5_pre
(指标值),ma15
指标数据同理。然后就可以使用这些指标数据去判断金叉死叉了,如图:
只要形成这样的状态,即为确定的金叉死叉。那么判断信号的部分就可以写成:
if(_State == IDLE && ma5_pre < ma15_pre && ma5_curr > ma15_curr){ _State = OPENLONG Amount = 1} if(_State == IDLE && ma5_pre > ma15_pre && ma5_curr < ma15_curr){ _State = OPENSHORT Amount = 1} if(_State == LONG && ma5_pre > ma15_pre && ma5_curr < ma15_curr){ _State = COVERLONG Amount = 1} if(_State == SHORT && ma5_pre < ma15_pre && ma5_curr > ma15_curr){ _State = COVERSHORT Amount = 1}
这样就移植OK了,可以回测试下:
可以看到回测结果基本一样,这样如果希望对于策略继续增加交互功能、增加数据处理(例如K线合成)、增加自定义的图表画图显示就可以实现了。
JavaScript策略的回测
回测配置:回测结果:
my语言的回测
到此,相信大家对"如何移植一个my语言策略"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
策略
移植
均线
部分
处理
语言
指标
数据
代码
交易
信号
实际
状态
范例
驱动
内容
函数
指标值
结果
行情
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手机app软件开发教
数据库如何存放身份信息
软件软件开发培训机构
服务器防入侵软件
如何分配人力软件开发
ubuntu 数据库ha
tp5 数据库配置加载
有关网络安全的
胜辉缘达软件开发有限公司
国外工业网络安全
淘宝助理连接服务器
37岁软件开发工程师
成都理工网络安全李军
安徽服务器回收推荐云主机
计算机网络技术学什么大专
网络安全保险的产品体系
上海南天软件开发公司
上海电话软件开发产品介绍
网络安全专业的院校排名
网络技术部面试
软件开发案例分析
手机app软件开发教
一汽大众软件开发薪资
秘钥管理中心 服务器
服务器开启共享
软件开发 甲方要源代码
软件开发公司销售员个人工作总结
37岁软件开发工程师
南通专业服务器服务商
软件开发的基本预算人员