Fonction intégrée_Cross analyse et instructions d'utilisation

Auteur:Le petit rêve, Créé: 2017-10-11 19:50:44, Mis à jour: 2021-11-05 16:15:56

Fonction intégrée_Cross analyse et instructions d'utilisation

La fonction _Cross dans l'arbre de fonctions globales dans une documentation API est utilisée pour calculer l'état de croisement de deux lignes de pointeurs.

  • La fonction implémente un code similaire à celui ci-dessous:

    Il est important de noter qu'il y a une différence de prix entre les deux.arr1Il s'agit d'un ensemble d'indicateurs de ligne rapide.arr2La définition d'une matrice d'indicateurs en ligne lente est:_CrossLa valeur que la fonction renvoie est positive, c'est-à-dire selon les documents.正数为上穿周期, 负数表示下穿的周期, 0指当前价格一样Je sais, à ce moment là.arr1En hautarr2Il y a déjà n cycles, c'est à ce moment-là que la ligne rapide passe à travers la ligne lente pour représenter la fourche dorée. Vous aussi._CrossSi la fonction renvoie un nombre négatif, c'est une fourche morte.

    Si vous définissezarr1Pour l'ensemble des indicateurs de la ligne lente,arr2L'inverse est le cas pour l'ensemble des indicateurs de la ligne rapide._CrossLa fonction renvoie une valeur positive qui représente une fourche morte._CrossLa fonction renvoie une valeur négative pour représenter la fourche d'or.

// 返回上穿的周期数,正数为上穿周数,负数表示下穿的周数,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即指标值相等
};
  • Nous simulons un ensemble de données dans ce paramètre et nous voyons ce que cela donne.

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

Vous pouvez voir que le résultat est 3, 3, 3.

img

Comme vous pouvez le voir sur le graphique, la position du croisement se produit avant les trois piliers de la ligne K.


Plus de

Je ne peux pas faire ça.Si vous n'avez pas de croisement, vous devriez retourner 0.

Les légumineuses aussi.Et si nous retournions à la croisée?

Le petit rêveBien, nous allons y réfléchir.

Je ne peux pas faire ça.Je veux dire, retourner à 0 est plus raisonnable, n'est-ce pas?

Le petit rêveJe ne sais pas. Var arr1 = [1, 2, 3, 4, 5, 6, 8, 8,9] // Indicateur de ligne rapide Var arr2 = [2, 3, 4, 5, 6, 7, 7, 7] // Indicateur de la ligne lente fonction main (() { Log (("_Cross ((arr1, arr2) ": ", _Cross ((arr1, arr2)) Log (("_Cross ((arr2, arr1) ": ", _Cross ((arr2, arr1)) Je ne sais pas. Je ne sais pas. Vous pouvez utiliser ce paramètre pour configurer un ensemble d'arithmétiques qui ne se croisent pas et exécuter. Le test ne renvoie pas 0.

Le petit rêveIl n'y a que le dernier croisement qui soit détecté et l'analyse du code source permet de le savoir.