Fungsi built-in_Cross analisis dan panduan penggunaan

Penulis:Mimpi kecil, Dibuat: 2017-10-11 19:50:44, Diperbarui: 2021-11-05 16:15:56

Fungsi built-in_Cross analisis dan panduan penggunaan

Fungsi _Cross dalam arsip fungsi global dalam dokumen API digunakan untuk menghitung status silang dua garis indikator

  • Fungsi ini mengimplementasikan kode yang mirip dengan:

    "Saya tidak tahu apa yang akan terjadi.arr1Di sini kita bisa melihat bagaimana mereka bekerja.arr2Jika Anda tidak memiliki data yang cukup, maka Anda tidak akan memiliki data yang cukup._CrossNilai yang dikembalikan adalah nilai positif, yaitu berdasarkan dokumen.正数为上穿周期, 负数表示下穿的周期, 0指当前价格一样Saya tidak tahu.arr1Pakailaharr2Setelah n siklus, pada saat ini garis cepat melewati garis lambat untuk mewakili garpu emas. Sama halnya._CrossJika fungsi kembali negatif, maka itu adalah dead fork.

    Jika didefinisikanarr1Di sini kita akan melihat bagaimana mereka bekerja.arr2Untuk indeks garis cepat, sebaliknya._CrossNilai yang dikembalikan fungsi adalah nilai positif untuk dead fork._CrossNilai yang dikembalikan oleh fungsi adalah nilai negatif yang mewakili golden fork.

// 返回上穿的周期数,正数为上穿周数,负数表示下穿的周数,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即指标值相等
};
  • Jadi kita simulasi satu set data yang masuk ke dalam parameter ini untuk melihat bagaimana hasilnya.

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

Anda bisa lihat hasilnya adalah 3, 3, 3.

img

Seperti yang dapat dilihat pada gambar, posisi persimpangan terjadi sebelum tiga tiang garis K.


Lebih banyak

alphaStrategy00XJika tidak ada intersection, seharusnya kembali ke 0.

Dan juga lobak kecil.Bagaimana jika kita kembali ke sana dan ke sana?

Mimpi kecilBaiklah, mari kita pertimbangkan ini.

alphaStrategy00XTerima kasih atas jawabannya! Maksud saya, kembali ke 0 lebih masuk akal, bukan?

Mimpi kecil`` var arr1 = [1, 2, 3, 4, 5, 6, 8, 8,9] // indikator garis cepat var arr2 = [2, 3, 4, 5, 6, 7, 7, 7] // indikator garis lambat fungsi main (() { Log (("_Cross ((arr1, arr2) : ", _Cross ((arr1, arr2)) Log (("_Cross ((arr2, arr1) : ", _Cross ((arr2, arr1)) Aku tidak tahu. `` Anda dapat menggunakan pengaturan ini untuk mengatur sebuah array yang tidak saling melintasi dan berjalan. Jika kita coba, tidak akan kembali 0.

Mimpi kecilHanya mendeteksi penyeberangan terbaru, lihat analisis sumber untuk tahu.