API 文档中 全局函数 栏中的 _Cross 函数 用来计算 两条指标线的 交叉状态
需要注意的是, arr1 定义为 快线 指标数组,arr2 定义为慢线指标数组时,
_Cross 函数 返回的值 为正数, 即 根据文档上 正数为上穿周期, 负数表示下穿的周期, 0指当前价格一样
可知, 此时 arr1 上穿 arr2 已经 n 个周期, 此时 就是 快线 上穿 慢线 代表 金叉。
同样 _Cross 函数 如果 返回 负数 ,即为死叉。
如果 定义 arr1 为 慢线 指标数组 ,arr2 为快线 指标数组, 则相反。 _Cross 函数 返回的值 为正数 代表 死叉 _Cross 函数 返回的值 为负数 代表 金叉
// 返回上穿的周期数. 正数为上穿周数, 负数表示下穿的周数, 0指当前价格一样
$.Cross = function(arr1, arr2) { // 参数个数为2个,从参数名可以看出,这两个 参数应该都是 数组类型,数组就
// 好比是 在X轴为 数组索引值,Y轴为 指标值的 坐标系中的 线段, 该函数就是判断 两条线的 交叉情况
if (arr1.length !== arr2.length) { // 首先要判断 比较的两个 数组 长度是否相等
throw "array length not equal"; // 如果不相等 抛出错误,对于 不相等 的指标线 无法 判断相交
}
var n = 0; // 声明 变量 n 用来记录 交叉状态 ,初始 0 ,未相交
for (var i = arr1.length-1; i >= 0; i--) { // 遍历 数组 arr1, 遍历顺序 为 从最后一个元素 向前 遍历
if (typeof(arr1[i]) !== 'number' || typeof(arr2[i]) !== 'number') { // 当 arr1 或者 arr2 任何一个数组 为 非数值类型 (即 无效指标) 时,跳出 遍历循环。
break; // 跳出循环
}
if (arr1[i] < arr2[i]) { // 如果 arr1 小于 arr2 则 n-- , 会记录 开始时 arr1、arr2 的相对 状态,(即 开始时 n 会根据 arr1[i] 、 arr2[i] 相对大小 自行调整,一旦出现 另一种 和 n 状态 相反的 arr1[i]、arr2[i] 大小关系, 即发生了 两条线交叉。)
if (n > 0) {
break;
}
n--;
} else if (arr1[i] > arr2[i]) { // 如果 arr1 大于 arr2 则 n++
if (n < 0) {
break;
}
n++;
} else { // arr1[i] == arr2[i] ,则立即 跳出
break;
}
}
return n; // 返回 n 值,代表 已经交叉了多少周期, 0 即 指标值相等。
};
var arr1 = [1,2,3,4,5,6,8,8,9] // 快线指标
var arr2 = [2,3,4,5,6,7,7,7,7] // 慢线指标
function main(){
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
}
可以看到结果为 3 、-3 。
图中可以看到,交叉的位置 发生在 三个 K线柱之前。
alphaStrategy00X 没有交叉的时候,应该返回0吧?
phoenix7978 I try to call 'Cross' function in python script, but it raise a exception, is there the cross function in python api?
小韭菜来也 要是来回交叉呢?
小小梦 好的,这个我们考虑下。
alphaStrategy00X 谢谢回复!我的意思是说,返回0比较合理吧?
小小梦 ``` var arr1 = [1,2,3,4,5,6,8,8,9] // 快线指标 var arr2 = [2,3,4,5,6,7,7,7,7] // 慢线指标 function main(){ Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2)) Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1)) } ``` 可以用这个设置一组不交叉的数组,跑下。 测试了不会返回0
小小梦 Thanks to supported BotVS , The question is that function named "$.Cross" is in JavaScript . In the python it named "ext.Cross" and you must add the Template for python . Right now , the function named "$.Cross" and "ext.Cross" all packaged to a function become an API named "_Cross" . The url : https://www.botvs.com/api#_Cross
小小梦 只检测 最近一次交叉, 看源码分析 可得知。