和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(1)
来源:互联网 发布:徒步旅行组织推荐知乎 编辑:程序博客网 时间:2024/04/29 07:25
和老白一起玩转JavaScript – 创造一个会做买卖的小伙伴(1)
前端大龄码农的枯燥生活
枯燥的代码世界能否有一股清泉?单调的生活能否有一阵清风?不安分的青春再来一次躁动?这些一定是程序员们的共同感受。作为一个野路子大龄程序员,在JavaScript的菜鸟级别中已经不能再称为小白了,就用老白这个名字吧!虽然是菜鸟级别、日常忙于撸码,但是也不妨碍用JS玩一些好玩的东西,用自己的技术在生活中、工作中也能找到乐趣。
发现
老白作为一个晚入行的码农,“皈依”之前没事炒炒股、玩玩期货。有一点点证券交易的概念,您可别认为我是期货市场上爆仓了,才来做程序员的。还好上大学的时候学习C、C++ 编程语言没有逃课,这些对于我这个大龄青年迅速掌握JavaScript是很有帮助的。工作之余没事和朋友喝酒(朋友是一家私募的商品期货操盘手),也会聊聊期货行情。有一次聊到他们公司已经计划做程序化交易,对于喜欢编程的我自然感觉很有兴趣,于是上网各种补充概念、搜索干货。结果发现,此类技术很早就有了,国外更是普及。更让我感觉不明觉厉的是,近些年都用上什么神经网络、机器学习、深度学习等等 高深的技术。感觉自己之前的时光真是荒废了!
经过一番搜索看到 JS 、Python 、C/C++ 、 JAVA 等等都可以做程序化交易(只有JS用的多点,Python正在自学),要学习的东西还真不少。不过总算有新东西可以玩了,于是有了接下来的系列文章记录的点点滴滴。
最近研究的一个机器人程序是一个国外的挺出名交易逻辑也是商品期货市场的,拿来(思路)到国内的商品市场玩一下(有个叫simnow的公司提供模拟账号的服务)。
刚开始用JavaScript写的时候感觉完全无从下手,这个和前端JS写代码完全是不同的感觉,一时间大脑适应不过来,以前看股票软件上的那些花花绿绿的线、柱什么的从没有考虑过时怎么计算出来的。这次常用的都做了了解,有的甚至研究了下怎么计算的(以前还挺迷信这些线、指标什么的),自己算过了才知道,这些指标大部分都是根据历史K线计算变化出来的,本质都是一样的(不能在迷信指标了!网上什么跟着指标稳赢都是骗人的。),所以指标只能参考,不能迷信!
还是有几个有参考价值的。
比如 STOCH RSI 这个指标,在网上的资料还真不多,要用只能自己撸一遍。老白写的比较LOW,各位别介意。
function LLV(array,period){ if(!array || array.length - period < 0){ throw "error:" + array; } var min = array[array.length - period]; for(var i = array.length - period; i < array.length; i++){ if( array[i] < min ){ min = array[i]; } } return min;}function HHV(array,period){ if(!array || array.length - period < 0){ throw "error:" + array; } var max = array[array.length - period]; for(var i = array.length - period; i < array.length; i++){ if( array[i] > max){ max = array[i]; } } return max;}function DeleteNullEle(initArr){ var dealArr = []; var initArrLen = initArr.length; for(var i = 0,j = 0 ; i < initArrLen ; i++,j++){ if(initArr[i] === null || isNaN(initArr[i]) ){ j--; continue; } dealArr[j] = initArr[i]; } return dealArr;}/*LC := REF(CLOSE,1); //REF(C,1) 上一周期的收盘价RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100;%K: MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100; LLV(l,60)表示:检索60天内的最低价,可适应于检索任何股票%D:MA(%K,P2);LC := REF(CLOSE,1);RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1) *100;STOCHRSI:MA(RSI-LLV(RSI,M),P1)/MA(HHV(RSI,M)-LLV(RSI,M),P1)*100;*/function FstochRSI(records,n,m,p1,p2){ var len = records.length; //var LC = records[len-2];//上一周期收盘价 //var rsi = TA.RSI(records,n);// RSI 数组 ,talib var rsi = talib.RSI(records,n); rsi = DeleteNullEle(rsi);//ceshi var arr1 = []; var arr2 = []; var arr3 = []; var arr4 = []; var rsi_a = []; var rsi_b = []; var k = []; var d = null; /*不包含当前柱 for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV for(var aa = 0 ; aa <= a; aa++ ){ rsi_a.push(rsi[aa]); } arr1.push(rsi[a] - TA.Lowest(rsi_a,m)); } for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV for(var bb = 0 ; bb <= b; bb++ ){ rsi_b.push(rsi[bb]); } arr2.push(TA.Highest(rsi_b,m) - TA.Lowest(rsi_b,m)); } */ for(var a = 0 ;a < rsi.length ; a++ ){//改造 不用 LLV if(a < m){ continue; } for(var aa = 0 ; aa <= a; aa++ ){ rsi_a.push(rsi[aa]); } arr1.push(rsi[a] - LLV(rsi_a,m)); } for(var b = 0 ;b < rsi.length ; b++ ){//改造 不用 HHV if(b < m){ continue; } for(var bb = 0 ; bb <= b; bb++ ){ rsi_b.push(rsi[bb]); } arr2.push(HHV(rsi_b,m) - LLV(rsi_b,m)); } arr1 = DeleteNullEle(arr1); arr2 = DeleteNullEle(arr2); //Log("arr1:",arr1.length,"-",arr1);//ceshi //Log("arr2:",arr2.length,"-",arr2);//ceshi arr3 = talib.MA(arr1,p1); arr4 = talib.MA(arr2,p1); arr3 = DeleteNullEle(arr3); arr4 = DeleteNullEle(arr4); //Log("ceshi");//ceshi var c = 0; var diff = 0; if(arr3.length !== arr4.length){//实测 长度不相等 throw "error: !=" + arr3.length + "----" + arr4.length; diff = arr4.length - arr3.length; //example diff = 10 - 6 }else{ //throw "error:" + arr3.length + "----" + arr4.length; } for( ;c < arr3.length ; c++ ){ k.push(arr3[c] / arr4[c + diff] * 100); } d = talib.MA(k,p2); return [k,d,rsi];}
计算好画出来是这样的..
今天先写到这里,我们下期见 https://www.botvs.com/bbs-topic/723
程序员 littleDream 原创
- 和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(1)
- 和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(2)
- 我和我的小伙伴们一起学Unity3D(一)
- 我和我的小伙伴们一起学Unity3D(二)
- 我和我的小伙伴们一起学Unity3D(三)GUISkin 界面皮肤
- 我和我的小伙伴们一起学Unity3D(四)角色移动之Transform
- 初玩whatsapp 的命令行小伙伴
- 我和我的小伙伴们一起学Unity3D(五)让角色更鲜活——刚体
- 我和小伙伴们一起学Unity3D(六)碰撞与触发器
- 和小伙伴们一起来看 I/O 直播
- 我和我的小伙伴们
- 红黑树和他的小伙伴们
- 我和我的小伙伴们
- 我和我的小伙伴们
- 一起玩转java并发(3.1)java并发的底层机制和原理
- 教你玩会HTC U11手机里面的这些小技巧,最后一个最实用!
- 制作一个能够自动和人一起玩泡泡堂游戏的软件
- 今天会有很多歌小伙伴
- Recycleview上拉刷新_下拉加载_侧滑删除加强篇
- Button控制图片显示隐藏
- 请教各位如下格式的XML 如何解析
- 算法导论 练习题 4.4-9
- servlet 页面转发连带数据库
- 和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(1)
- vue脚手架步骤
- 用openMP进行并行加速
- 在Linux服务器上搭设shadowsocks的方法
- JQuery之选择器"gt()""eq()""lt()"
- 浅析两列自适应布局的3种思路
- 二叉树的路径和
- STM32学习笔记-2
- 虚拟存储管理器的页面调度