Built-in function_Cross phân tích và hướng dẫn sử dụng

Tác giả:Giấc mơ nhỏ, Tạo: 2017-10-11 19:50:44, Cập nhật: 2021-11-05 16:15:56

Built-in function_Cross phân tích và hướng dẫn sử dụng

Chức năng _Cross trong hàng hàm toàn cầu trong tài liệu API được sử dụng để tính trạng thái chéo của hai đường chỉ số

  • Các hàm được thực hiện bằng mã tương tự như sau:

    Điều quan trọng là:arr1Các nhà nghiên cứu đã xác định các chỉ số này như là các mảng chỉ số đường nhanh.arr2Khi được định nghĩa là một mảng chỉ số đường chậm,_CrossCác giá trị được trả về là số tích cực, theo tài liệu正数为上穿周期, 负数表示下穿的周期, 0指当前价格一样Có lẽ, tại thời điểm nàyarr1Lên lênarr2Đã có n chu kỳ, tại thời điểm này là đường nhanh đi qua đường chậm đại diện cho cái cung vàng. Cũng vậy._CrossNếu hàm trả lại một số âm, thì đó là một cái chết.

    Nếu định nghĩaarr1Trong khi đó, các nhà nghiên cứu khác cũng cho rằng:arr2Đối với các chỉ số đường dây nhanh, ngược lại._CrossGiá trị được trả về của hàm là một số tích cực đại diện cho dead fork._CrossCác hàm trả về giá trị là âm đại diện cho cung vàng.

// 返回上穿的周期数,正数为上穿周数,负数表示下穿的周数,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即指标值相等
};
  • Chúng ta mô phỏng một tập dữ liệu được truyền vào tham số này và xem kết quả như thế nào.

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

Bạn có thể thấy kết quả là 3, 3, 3.

img

Bạn có thể thấy trên hình, vị trí giao nhau xảy ra trước ba cột đường K.


Thêm nữa

alphaStrategy00XNếu không có đường chéo, chúng ta sẽ trả về 0 đúng không?

Bạch ếch cũng đến.Và nếu như chúng ta quay lại?

Giấc mơ nhỏĐược rồi, chúng ta hãy xem xét điều đó.

alphaStrategy00XCảm ơn bạn đã trả lời! Ý tôi là, trả lại 0 là hợp lý hơn, phải không?

Giấc mơ nhỏ`` var arr1 = [1,2,3,4,5,6,8,8,9] // chỉ số đường nhanh var arr2 = [2,3,4,5,6,7,7,7] // chỉ số đường chậm function main (()) { Log (("_Cross ((arr1, arr2) ": ", _Cross ((arr1, arr2)) Log (("_Cross ((arr2, arr1) ": ", _Cross ((arr2, arr1)) `` Bạn có thể sử dụng thiết lập này để chạy một tập hợp các mảng không chéo. Thử không trả về 0.

Giấc mơ nhỏChỉ cần kiểm tra các đoạn băng gần đây nhất, xem phân tích mã nguồn để biết.