图表模板升级啦!

Author: 小小梦, Created: 2016-07-26 09:47:34, Updated: 2017-10-11 10:20:34

图表模板升级啦!

  • 为了方便使用状态栏表格,使显示的数据更有条理。把图表模板增加了一个新功能。就是可以自定义在策略状态栏显示信息。新同学们不用再去配置状态栏表格对象了。
    先写一下增加的导出函数,还有简介。
    • TV //全局对象, 这个全局对象 负责管理 表格显示的内容,以及修改表格的内容。(这个是模板内的全局变量,引用模板的策略访问不到)
    • $.TableInit = function(cols,rows) //这个导出函数是用来初始化状态栏表格的,在使用之前可以先声明 cols = [数值],rows = [数值] ,然后把变量传参。cols//列 ,rows//行。自动生成表格。并且返回TV对象,用于在引用模板的策略中写入数据。
    • $.UpdateLogStatus = function() //这个导出函数 就是用来更新 状态栏表格的。 比如:var table = $.TableInit(6,5); 执行之后 table.a0 = “aaaa”; 然后再调用该导出函数:$.UpdateLogStatus() ,就可以把 “aaaa” 更新到a列,0行。
    • 设置好cols 、rows 后 表格坐标大概是这样的。在使用时 直接访问 table.a0( 前提是调用过 var table = $.TableInit(6,5); ) 就可以写入到 如下表格的a0位置。 列数 最多到 “z” 。
    • 注意:表格头部 ,就是坐标 a0,b0,c0… 的单元格 (表头)[这个问题已经修正,表头的数据内容可以是一样的了]。
a b c d
0 a0
1 b1
2 d2
3 c3
4
5
6
7
8

img

  • 下面是在模板中的 main 函数测试代码:
//测试状态栏表格功能
    var cols = 6;//列
    var rows = 4;//行
    $.TableInit(cols,rows);

img

  • 继续测试一下功能:
    /*测试状态栏表格功能*/
    var cols = 6;//列 设置一个变量 代表 列
    var rows = 4;//行 设置一个变量 代表 行
    $.TableInit(cols,rows); //初始化  状态栏  会显示  各个单元格的 坐标
    ///*
    for(var x in TV){
        TV[x] = "lalala";// 全部单元格写成 lalala
    }
    //更新表格 显示  lalala, 表头 数据不能重复 ,否则显示不出来。
    TV.a0 = "a0";
    TV.b0 = "b0";
    TV.c0 = "c0";
    TV.d0 = "d0";
    TV.e0 = "e0";
    TV.f0 = "f0";//先把 表头数据写成不一样的

    $.UpdateLogStatus();//更新 状态栏表格

img 除了表头单独写入的数据外,其他的单元格都写入了 "lalala"这个字符串。

  • 那么是不是单元格只能写入字符串呢? 我们来实验一下,看看 数组、数值、对象、文本,这些数据的写入情况。
    /*测试状态栏表格功能*/
    var cols = 6;//列 设置一个变量 代表 列
    var rows = 4;//行 设置一个变量 代表 行
    $.TableInit(cols,rows); //初始化  状态栏  会显示  各个单元格的 坐标
    ///*
    for(var x in TV){
        TV[x] = "lalala";// 全部单元格写成 lalala
    }
    //更新表格 显示  lalala, 表头 数据不能重复 ,否则显示不出来。
    TV.a0 = "a0";
    TV.b0 = "b0";
    TV.c0 = "c0";
    TV.d0 = "d0";
    TV.e0 = "e0";
    TV.f0 = "f0";//先把 表头数据写成不一样的

    $.UpdateLogStatus();//更新 状态栏表格

    ///*
    //怎么在 表格里面写入数据呢?
    var num = 100;
    var text = "文本:测试表格文本";
    var obj = {name:"对象",age:"19",sex:"girl"};
    var array = ["数组",22,33,54];
    TV.a1 = num;
    TV.c2 = text;
    TV.b3 = obj;
    TV.b0 = array;

    $.UpdateLogStatus();//再次更新 状态栏表格
    //*/

img

以上是模板内的测试,下面在引用模板的策略中测试一下 模板功能:
function main(){
    var i = 0;
    var table = $.TableInit(4,5);
    for(var x in table){//向表格写入数据
        table[x] = "" + i;// 全部单元格写成 递增的数字
        i++;
    }
    //更新表格 显示  递增的数字, 表头 数据不能重复 ,否则显示不出来。
    table.a0 = "a0";
    table.b0 = "b0";
    table.c0 = "c0";
    table.d0 = "d0";
    table.a1 = "a1";
    table.b1 = "b1";
    table.c1 = "c1";
    table.d1 = "d1";
    table.a4 = "a4";
    table.b4 = "b4";
    table.c4 = "c4";
    table.d4 = "d4";
    //Log("TV:",TV);//测试是否能 访问到模板中的TV 对象 
    $.UpdateLogStatus();
}

img 暂时更新了这个功能,欢迎大家测试,有BUG的话请多多提出,帖子留言。^^


More

改革春风吹满地 请问,报错TypeError: $.UpdateLogStatus is not a function是怎么回事?

改革春风吹满地 点击复制并在线回测按钮复制的策略模板,然后我在自己的策略中也引用了这个模板,但是跑数据,仍然报错:TypeError: undefined not callable (property 'TableInit' of [object Object]) at main (__FILE__:315)

hokshelato 回测正常,但模拟盘中却报错: `ReferenceError: identifier 'indicatorsName' undefined at [anon] (__FILE__:1388) at global (__FILE__:1694) preventsyield`

FangBei 用新策略运行, 提示 main:3:19 - TypeError: $.TableInit is not a function 用法不对吗? 引用模板测试是怎么样引用法?

春哥 $.UpDateLogStatus(); 这个函数命名有点问题。 update是一个单词,D不能大写。

muia 小梦 辛苦

小小梦 不客气 ^^

改革春风吹满地 反复重试了几遍,已经解决了,感谢梦总。

小小梦 看下 main 函数 315行 处的代码, 是不是 函数名字写错了。

小小梦 策略引用了这个模板了么?

小小梦 报错 看来 应该 是 indicatorsName 这个 参数 的问题 。这个参数 是个 界面参数 。 这样 , 您再 复制 一次 这个策略 用新复制的 创建个 机器人 跑下,看是否还报错。

hokshelato 我是通过**点击复制并在线回测**按钮复制的策略模板,然后我在自己的策略中也引用了这个模板,策略参数是正常显示的。 回测结果正常,然后我新建了一个机器人 B 测试也是正常的,证明策略本身没有问题。但不知道为何,就是在机器人 A 上会报错,两个机器人的配置也都一样,甚是诡异。

小小梦 测试了一下 ,可以的 ,您这个报错 我推测: 您是不是 直接复制的代码 在新建策略里面了, 这个模板有一些界面参数的。如果是只复制代码 ,这些参数 就需要手动配置下。 模板是这个帖子:https://www.botvs.com/strategy/20967 需要点击下面的 复制按钮。

小小梦 要在策略里 勾选这模版的, 另外这个 模版是 JS语言 ,如果 您用python 写策略, 即使复制这个模版到 您的 控制中心 , 也是无法看到 ,无法引用的(就是勾选)。

小小梦 ^ ^前辈指点的是,这样写外行了~~改下。

小小梦 方便大家用就好 ^^