CrpytoQuant加密资产量化从0开始之1下单执行(小白版)
0x0 题记书接上文 上次一次不是写了一篇《Crpyto-Quant 加密资产量化从0开始之0信号通知》。但是没写如何自动下单交易。既然quant肯定要自动化了。今天就开始如何自动化,由0到1了。0x1 操作修改原来信号模块,增加返回 return 数据信号数据1 和-1 ,注释掉邮件通知。function getboll() { //信号捕捉模块 var records = exchange.GetRecords(14400); //获取K线周期为4小时的K线数据 if (records && records.length > 20) { var boll = TA.BOLL(records, 20, 3) //将K线数据转换为boll带数据 var upLine = boll[0] var midLine = boll[1] var downLine = boll[2] var price = exchange.GetTicker().Last if (price > upLine[upLine.length - 1]) { // 对比成交价与boll上轨线 //注释邮件通 sendtomail("卖出信号", "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1]) //发送邮件 Log("卖出信号:" + "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1] + "@") //打印信号信息 return -1; //返回-1 等于返回一个卖出信号 } else if (price < downLine[downLine.length - 1]) { //注释邮件通知 sendtomail("买入信号", "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1]) Log("买入信号:" + "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1] + "@") return 1 //返回-1 等于返回一个卖出信号 } } return 0; } 设置一个全局的交易者信息,主要用于设置一些全局信息 let trader = { //初始化 direction: 0, //买卖方向标记 tip: 10, //下单数量 order: 0, //下单确认开关 lever: 20, ////杠杆倍数 period: "quarter", ////合约类型,这儿设置为季度合约 long: 35, //止盈点设置,均已usd都是简单计算 close: -50 //止损点设置 }; 添加主执行模块 function fox(trader) { //执行主模块 var id; var aount = exchange.GetAccount(); //获取账户信息 if (trader.order == 1) { //再次确认下单信号 if (trader.direction == 1) { //判断下单方向 price = getprice("buy", 1); //获取执行价格,这儿是买二价格, if (aount.Stocks > trader.tip / trader.lever) { exchange.SetDirection("buy"); id = exchange.Buy(price, trader.tip); if (id != null) { trader.price = price; trader.direction = 0; } } } else if (trader.direction == -1) { price = getprice("sell", 1); if (aount.Stocks >= trader.tip / trader.lever) { exchange.SetDirection("sell") id = exchange.Sell(price, trader.tip) trader.price = price; trader.direction = 0; } } } return trader; } 修改主函数 while (true) { if (tm == 60) { //1分钟执行一次 if(trader.order==0){ //确认无订单状态 let signal=getboll(trader); //获取入市信号 if(signal!=0){ //确认入市信号 trader.order=1 //改变交易下单信息 trader.direction=signal;//设置买卖方向 trader = fox(trader); //进入执行模块 } } tm = 0; } trader = riskcode(trader); //执行风险控制代码 Sleep(1000); //1秒执行一次 tm++; } } 0x2 回测设置回测信息 /*backtest start: 2022-01-01 00:00:00 end: 2023-03-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_HuobiDM","currency":"BTC_USD"}] */
当然也可以通过系统提供来设置 回测效果展示
可以通过K线图来判断,是否策略执行效果,是否在需要的点位上。
夏普率是有点低,回撤还好。当然这是完全用的固定回报比垃圾风控仓位管理方式。其实很多系统的灵魂其实不是在入市信号上,更多的灵魂是在风控上或者是在平仓方面。 0x3 后记今天展示如何执行订单。本来还计划准备专门写一下动态仓位管理与风控的。可能短期没什么时间。看看以后…目前也算由0到1了。 附录全部源码 /*backtest start: 2022-01-01 00:00:00 end: 2023-03-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_HuobiDM","currency":"BTC_USD"}] */ function main() { //主程序入口 let tm = 0; //初始化次数 let trader = { //初始化 direction: 0, //买卖方向标记 tip: 10, //下单数量 order: 0, //下单确认开关 lever: 20, ////杠杆倍数 period: "quarter", ////合约类型,这儿设置为季度合约 long: 35, //止盈点设置,均已usd都是简单计算 close: -50 //止损点设置 }; exchange.SetContractType(trader.period); //设置合约类型 exchange.SetMarginLevel(trader.lever); //设置杠杆倍数 while (true) { if (tm == 60) { //1分钟执行一次 if (trader.order == 0) { let signal = getboll(trader); if (signal != 0) { trader.order = 1 trader.direction = signal; trader = fox(trader); } } tm = 0; } trader = riskcode(trader); //执行风险控制代码 Sleep(1000); //1秒执行一次 tm++; } } function getboll() { //信号捕捉模块 let records = exchange.GetRecords(14400); //获取K线周期为4小时的K线数据 if (records && records.length > 20) { var boll = TA.BOLL(records, 20, 3) //将K线数据转换为boll带数据 var upLine = boll[0] var midLine = boll[1] var downLine = boll[2] var price = exchange.GetTicker().Last if (price > upLine[upLine.length - 1]) { // 对比成交价与boll上轨线 //注释邮件通 sendtomail("卖出信号", "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1]) //发送邮件 Log("卖出信号:" + "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1] + "@") //打印信号信息 return -1; //返回-1 等于返回一个卖出信号 } else if (price < downLine[downLine.length - 1]) { //注释邮件通知 sendtomail("买入信号", "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1]) Log("买入信号:" + "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1] + "@") return 1 //返回-1 等于返回一个卖出信号 } } return 0; } function getprice(type, i) { //获取买卖二价 var price = 0; var depth = exchange.GetDepth(); if (type == "buy") { price = depth.Asks[i].Price; } else if (type == "sell") { price = depth.Bids[i].Price; } else { Log("不交易"); } return price; } function fox(trader) { //执行主模块 var id; var aount = exchange.GetAccount(); if (trader.order == 1) { if (trader.direction == 1) { price = getprice("buy", 1); if (aount.Stocks > trader.tip / trader.lever) { exchange.SetDirection("buy"); id = exchange.Buy(price, trader.tip); if (id != null) { trader.price = price; trader.direction = 0; } } } else if (trader.direction == -1) { price = getprice("sell", 1); if (aount.Stocks >= trader.tip / trader.lever) { exchange.SetDirection("sell") id = exchange.Sell(price, trader.tip) trader.price = price; trader.direction = 0; } } } return trader; } function usdt(trader) { //usdt转换 pricedata = { long: 0, close: 0 } price = getprice("sell", 0); pricedata.long = trader.long / price; pricedata.close = trader.close / price; return pricedata; } function closeorder(direction, trader) { var id; var pricedata = usdt(trader); if (direction.Profit > pricedata.long || direction.Profit < pricedata.close) { if (direction.Type == 0) { price = getprice("sell", 0); exchange.SetDirection("closebuy"); id = exchange.Sell(price, trader.tip); if (id != null) { trader.order = 0; } else { price = getprice("sell", 0); id = exchange.Sell(price, trader.tip); } } else if (direction.Type == 1) { price = getprice("buy", 0); exchange.SetDirection("closesell"); id = exchange.Buy(price, trader.tip); if (id != null) { trader.order = 0; } else { price = getprice("buy", 0); id = exchange.Buy(price, trader.tip); } } Log(direction.Profit); } } function riskcode(trader) { var position = exchange.GetPosition(); if (position.length >= 1) { for (var i = 0; i < position.length; i++) { closeorder(position[i], trader); } } return trader; }
邓伦风波过后首现身,被爆多方证实即将复出,素颜露面,胆怯躲避邓伦近照曝光,丑闻风波过后首露面,有瓜爆料邓伦即将复出娱乐圈,疑在试探当中。近日,邓伦低调现身露面,一身黑色休闲穿搭,戴着同款黑色帽子,帅气洒脱,素颜出镜依旧能打,看上去状态非常好
学雷锋去发光我们是00后雷锋精神代言人今年是毛泽东等老一辈革命家为雷锋同志题词60周年,3月5日,我们迎来第60个学雷锋纪念日。60年来,雷锋的名字深深地根植于人们的心中,雷锋精神也影响了一代又一代的中国人,学雷锋在中
海南海口百花绽放春满园来源人民网海口万绿园内三角梅心形拱门吸引市民拍照。王德广摄人民网海口3月3日电(刘瀚涛)阳春三月,春暖花开,随着气温的回升,海南省海口市迎来了一年一度的花季盛宴。在万绿园和美舍河湿
这款车能让年轻人混出精致感在电动化浪潮下,混合动力车型兼顾电动车经济性和燃油车动力性,将成为平替燃油车的最佳选择。近日上市的广汽本田ZRV致在eHEV采用了全新设计语言,定位在缤智和皓影之间,它的到来进一步
加内特湖人双星出现分歧,戴维斯或将被交易NBA名人堂球星加内特在最近的一次采访中透露,湖人双星詹姆斯和戴维斯在合作上出现了分歧。加内特认为,在詹姆斯得到登基史上得分王的时候,戴维斯完全没有表现出任何情绪。目前,戴维斯在球
复合了?王菲晒与谢霆锋浴室照,男方眼神宠溺,张柏芝再沦为备胎谢霆锋和王菲谈了一段不以结婚为目的的恋爱,遭到了很多人的不理解!在这个大环境之下,外面诱惑太多,即便领了证办了婚礼的婚姻,都不一定有保障,更何况像他们这种不受法律保护的感情了。在旁
张馨予红色泪钻妆出席活动,气场全开眼神里有股狠劲,结婚后好自信近日,张馨予受邀参加时尚活动。一身红裙,扎着高马尾的她好惊艳,举手投足间流露出成熟的魅力。眼下的红色泪钻妆是一大亮点,衬得她整个人更加明艳动人。秀场上的张馨予,步伐自信,气场全开,
卡戴珊小妹累了!詹娜新恋情曝光后首度现身眼神疲惫不忘秀大长腿聚焦体坛花边,关注名人动向。漂亮国最具吸睛家族卡戴珊姐妹花轮流占据着时尚流量新闻前端。继前段时间金。卡戴珊和科勒卡戴珊与TT闹得沸沸扬扬传闻之后,此前一直充当后来者的四妹肯达尔经过
2023年了,还有没有必要看肖申克的救赎肖申克的救赎是一部1994年上映的美国剧情电影,由弗兰克德拉邦特执导,蒂姆罗宾斯和摩根弗里曼主演。这部电影自上映以来就一直备受观众和评论家的好评,凭借其卓越的表现和优秀的制作获得了
今天,正式开通!3月4日上午一架西锐SR20飞机载着中国工艺美术大师葛军从无锡丁蜀机场飞赴盐城射阳这标志着宜兴射阳转场航线正式开辟陶航新模式探索迈出第一步葛军与助手一同登机,实现了在家门口打飞的的
群英会摄影世界第144期风光生态精品辑群英会摄影世界选择全国各地摄影者作品,供各界摄影爱好者学习文流品鉴。群英会摄影世界摄影作品排名不分先后顺序,作品版权归作者所有。责编光影幽兰风光建筑篇摄中情一汉中张永德一上海金柱子