Type/to search
8
Follow
1365
Followers
30行代码带你进入量化投资世界
FAQ
Created 2016-04-06 10:17:26  Updated 2020-01-13 15:17:11
 13
 7745

精简极致的均线策略 30行打造一个正向收益系统

没错!你听的没错是30行代码!仅仅30行小编我习惯先通篇来看看 代码,这样能有个宏观的了解!

策略参数如下

参数描述类型默认值
FastPeriod入市快线周期数字型(number)3
SlowPeriod入市慢线周期数字型(number)7
EnterPeriod入市观察期数字型(number)3
ExitFastPeriod离市快线周期数字型(number)3
ExitSlowPeriod离市慢线周期数字型(number)7
ExitPeriod离市观察期数字型(number)1
PositionRatio仓位比例数字型(number)0.8
Interval轮询周期(秒)数字型(number)10

img

  • 导入了 交易类库 方便策略编写, 不用为 是否买到 是否卖出等 挂单 烦恼了。
  • 读代码的时候,发现未声明的变量感到迷惑时,到群里解答。
function main() { var STATE_IDLE = -1; var state = STATE_IDLE; var opAmount = 0; var initAccount = $.GetAccount(); Log(initAccount); while (true) { if (state === STATE_IDLE) { var n = $.Cross(FastPeriod, SlowPeriod); if (Math.abs(n) >= EnterPeriod) { opAmount = parseFloat((initAccount.Stocks * PositionRatio).toFixed(3)); var obj = n > 0 ? $.Buy(opAmount) : $.Sell(opAmount); if (obj) { opAmount = obj.amount; state = n > 0 ? PD_LONG : PD_SHORT; Log("开仓详情", obj, "交叉周期", n); } } } else { var n = $.Cross(ExitFastPeriod, ExitSlowPeriod); if (Math.abs(n) >= ExitPeriod && ((state === PD_LONG && n < 0) || (state === PD_SHORT && n > 0))) { var obj = state === PD_LONG ? $.Sell(opAmount) : $.Buy(opAmount); state = STATE_IDLE; var nowAccount = $.GetAccount(); LogProfit(nowAccount.Balance - initAccount.Balance, '钱:', nowAccount.Balance, '币:', nowAccount.Stocks, '平仓详情:', obj, "交叉周期", n); } } Sleep(Interval*1000); } }
  • 这个策略只有一个主函数function main(),没有其它的函数模块。主函数内只有一个循环。
  • 小编我把这个策略的代码注释版已经传上QQ群共享了,初次学习的同学可以看看注释方便学习
  • 这里没有加入官方QQ群的请加入:309368835 发明者量化 EA交流(原BotVS)。策略就这么几十行代码,很精简吧!
  • 为了照顾没有Javascript语言基础的同学我们在此简单讲下语法,以免有同学看不明白代码。

变量声明

用关键字 var + 变量名 例如 var name = “小明”

循环

while(循环条件){ // 将会重复执行的代码 }

循环条件为真则反复执行{}内的代码。 循环条件为假 则跳出循环。

条件分支

if (判断条件){ // 执行代码 } else { // 执行代码 }

很简单,翻译就是 如果(真){执行这代码}其 它情况{执行这代码}

赋值

一个=号是 赋值,例如

name = “张三”;

就是把“张三”这个名字 给 name, 赋值容易与比较相等搞混
如 比较 为 == 两个等号,
例子 “张三”==“李四” 明显张三不是李四 所以 “张三”==“李四” 为假。

相关API

在演示写策略之前我们梳理下策略中用到的API和模板导出函数, 在 发明者量化 上有详细的API文档和模板源码说明。

  • $.GetAccount函数:模板导出函数,用于获得交易所账户信息
  • Log函数:API,用于向日志输出信息,显示数值等
  • $.Cross函数:模板导出函数,用于检测均线指标交叉情况
  • $.Buy函数:模板导出函数,用于购买操作
  • $.Sell函数:模板导出函数,用于卖出操作
  • LogProfit函数:API,用于输出收益,函数从第二个参数可以加其它信息
  • Sleep函数:API,让程序暂停一会儿,参数单位为毫秒。

策略代码还用到了Javascript的库函数、对象方法。

  • Math.abs()函数:返回参数的绝对值
  • Number对象的 toFixed()函数:按参数 保留小数位数四舍五入。注意,函数返回的为字符串
  • parseFloat全局函数:把 字符串参数 返回浮点数。

以上Javascript的相关资料可以在:JavaScript Number 对象 http://www.w3school.com.cn/jsref/jsref_obj_number.asp 上学习

程序的流程图 手绘的 没用工具画 很业余 见谅!

img

一步一步的搭建我们的策略

所有的策略程序入口处都是 main() 函数,也就是说策略先从main函数开始运行。

img

img

img

img

img

实盘

至此简单的30行策略就完成了!把代码部署到托管机器人上,
Running!策略开始运行了,买入操作。。。。

img

感谢 发明者量化,提供这么精简的代码,在 发明者量化 上有大量的开源策略可供学习提升,与众多量化高手一同进步。

官方QQ群定期更新学习资源,为量化学习者铺平道路,登堂入室。

配套视频教学

http://v.youku.com/v_show/id_XMTUyNDY1NjQ2NA==.html

参考资料

Related Recommendations
Comment
All comments (11)

    API中的$.GetAccount函数是不是更新成exchange.GetAccount()了?

    6 years ago

    $.GetAccount 是FMZ 模板的导出函数(模板就是可复用的代码,参看API 文档上模板的描述)。 $.GetAccount是这个模板:https://www.fmz.com/strategy/10989 的导出函数。
    上面的策略只是代码部分,没有策略参数设置,完整的策略可以在策略广场搜索30行均线策略。

    6 years ago

    代码看懂了 但是不知道这个策略究竟实现了什么功能

    10 years ago

    就是2条均线,快线上穿慢线 一般是买入信号,上涨概率较大(程序自动买入操作)。 快线下穿慢线一般是卖出信号,下跌概率较大(程序自动卖出)。通过这样反复操作 在行情上升趋势中可以攫取利润。

    10 years ago

    原来这样啊 非常感谢

    10 years ago

    感谢小小梦,你的文章写得真好。

    10 years ago

    楼主的教程写得太好了,谢谢!

    10 years ago

    谢谢楼主,我要好好学习

    10 years ago

    不客气,以后还要做更多的学习资料,谢谢支持!

    10 years ago

    够详细。早早有就美死了

    10 years ago

    以后继续出品!谢谢支持。

    10 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)