Función integrada_Cross análisis y instrucciones de uso

El autor:Un sueño pequeño., Creado: 2017-10-11 19:50:44, Actualizado: 2021-11-05 16:15:56

Función integrada_Cross análisis y instrucciones de uso

La función_Cross en el conjunto de funciones globales de la API se utiliza para calcular el estado de cruce de dos líneas de indicadores

  • La función implementa un código similar al siguiente:

    En la actualidad, la mayoría de las personas no tienen acceso a internet.arr1La definición es una matriz de indicadores de línea rápida.arr2Cuando se define como una matriz de indicadores de línea lenta,_CrossEl valor que devuelve la función es positivo, es decir, según el documento正数为上穿周期, 负数表示下穿的周期, 0指当前价格一样¿Qué es lo que está pasando?arr1¿Qué haces?arr2Ya han pasado n ciclos, en este momento es cuando la línea rápida pasa a través de la línea lenta para representar el golden fork. También_CrossSi la función devuelve un número negativo, entonces es un tenedor muerto.

    Si se definearr1El resultado es que la cantidad de datos que se obtienen es muy baja.arr2Para el conjunto de indicadores de la línea rápida, lo contrario._CrossEl valor que devuelve la función es un número positivo que representa el tenedor muerto._CrossEl valor que devuelve la función es negativo y representa el dorado.

// 返回上穿的周期数,正数为上穿周数,负数表示下穿的周数,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即指标值相等
};
  • Simulamos un conjunto de datos que se transmiten a este parámetro y vemos qué sucede.

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))
}

img

Así que podemos ver que el resultado es 3, -3 ∞.

img

Como se puede ver en el gráfico, la posición del cruce ocurre antes de los tres pilares de la línea K.


Más.

- ¿ Qué quieres decir?Si no hay una intersección, ¿debería regresar a 0?

Y también el cabrito.¿Qué tal el cruce de vuelta?

Un sueño pequeño.Bueno, eso lo consideramos.

- ¿ Qué quieres decir?Gracias por la respuesta. Quiero decir, ¿no es más razonable regresar a 0?

Un sueño pequeño.¿Por qué no lo haces? var arr1 = [1, 2, 3, 4, 5, 6, 8, 8,9] // Indicador de línea rápida var arr2 = [2, 3, 4, 5, 6, 7, 7, 7] // Indicador de línea lenta La función principal ((() { Log (("_Cross ((arr1, arr2) ": ", _Cross ((arr1, arr2)) Log (("_Cross ((arr2, arr1) ": ", _Cross ((arr2, arr1)) ¿Por qué no? ¿Por qué no lo haces? Se puede usar para configurar un conjunto de matriz sin cruzar y ejecutar. La prueba no devuelve 0.

Un sueño pequeño.Solo se detecta el cruce más reciente, y se puede ver en el análisis del código fuente.