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

原帖地址:https://www.fmz.com/bbs-topic-new/262

没错!你听的没错是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
  • 导入了 交易类库 方便策略编写, 不用为 是否买到 是否卖出等 挂单 烦恼了。
  • 读代码的时候,发现未声明的变量感到迷惑时,到群里解答。
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 BotVS EA交流(BotVS)。策略就这么几十行代码,很精简吧!
  • 为了照顾没有Javascript语言基础的同学我们在此简单讲下语法,以免有同学看不明白代码。

变量声明

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

循环

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

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

条件分支

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

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

赋值

一个=号是 赋值,例如

name = “张三”;

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

相关API

在演示写策略之前我们梳理下策略中用到的API和模板导出函数, 在 BotVS 上有详细的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 上学习

最新文章

  1. 摘自:java夜未眠之java学习之道
  2. 合并master分支到自己的分支
  3. beginUpdates和endUpdates
  4. RFID第二次作业
  5. 使用FastClick的同时造成元素上的trigger(&#39;click&#39;)无法触发的解决办法
  6. uva 10125 - Sumsets
  7. webpack的四个核心概念介绍
  8. Android ListView的item背景色设置以及item点击无响应等相关问题
  9. 什么是车辆识别代码(VIN)
  10. CF747F Igor and Interesting Numbers
  11. input 随笔
  12. 【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?
  13. Chained Declustering
  14. 【洛谷P1462】通往奥格瑞玛的道路
  15. XE7 数据库独立运行需要的文件
  16. Ubuntu vi 上下左右变ABCD问题解决方法
  17. C#获取picturebox图片路径
  18. WAMP环境配置-PHP安装
  19. 一些通过SAP ABAP代码审查得出的ABAP编程最佳实践
  20. Spring入门第二课

热门文章

  1. Spring Boot中实现logback多环境日志配置
  2. Linux下获取线程TID的方法
  3. MySQL基础笔记(五) 视图
  4. SGU - 311 Ice-cream Tycoon(线段树)
  5. Process类的使用
  6. enterText与typeText
  7. 解决oracle 表被锁住问题
  8. VS类添加头文件注释
  9. 配置mahout
  10. Poisson distribution 泊松分布 指数分布