리소스 로딩... 로딩...

내장 기능에 대한 분석 및 사용 지침 _ 크로스

저자:FMZ~리디아, 창작: 2023-10-07 15:35:44, 업데이트: 2024-01-02 21:17:16

img

내장 기능에 대한 분석 및 사용 지침 _ 크로스

API 문서의 글로벌 함수 섹션의 _Cross 함수는 두 지표의 크로스오버 상태를 계산하는 데 사용됩니다.

함수 구현은 다음과 같은 코드와 비슷합니다.

주의해야 할 것은arr1빠른 지표의 배열로 정의됩니다.arr2느린 지표의 배열로, 값이 반환된 값_Cross기능이 긍정적이므로, 문서에 따르면,a positive number is the period of upward penetration, a negative number indicates the period of downward penetration, and 0 means the same as the current price- 그래요 이 시간에 볼 수 있습니다arr1위쪽으로 침투arr2n 사이클을 거쳤는데, 이 때, 이것은 빠른 선의 상향 침투이고 느린 선의 교차를 나타냅니다. 같은 것_Cross함수는 음수를 반환합니다.

반대가 맞습니다arr1느린 지표의 배열로 정의됩니다.arr2빠른 지표의 배열로 양수 값은_Cross함수는 횡단선을 나타냅니다. 음수 값은_Cross함수는 교차를 나타냅니다.

// Return to the number of periods of upward penetration, the positive number is the number of periods of upward penetration, the negative number indicates the number of periods of downward penetration, 0 means the same as the current price
$.Cross = function(arr1, arr2) {            // The number of parameters is 2, it can be seen from the parameter name, these two parameters should be an array type, the array is like an array in the X-axis for the array index value, Y-axis for the index value of the line in the coordinate system, the function is to determine the intersection of the two lines 
    if (arr1.length !== arr2.length) {      // The first step is to determine if the two arrays being compared are equal in length
        throw "array length not equal";     // Throw an error if they are not equal, it is not possible to determine the intersection of unequal lines.
    }
    var n = 0;                              // Declare the variable n to record the intersection state, initially 0, unintersected 
    for (var i = arr1.length-1; i >= 0; i--) {      // Iterate over the array arr1, from the last element forward.
        if (typeof(arr1[i]) !== 'number' || typeof(arr2[i]) !== 'number') { // When any of the arrays arr1 or arr2 is of a non-numeric type (i.e., an invalid indicator), the traversal loop is broken.
            break;                                  // break out of a loop
        }
        if (arr1[i] < arr2[i]) {                    // If arr1 is smaller than arr2 then n--, will record the relative state of arr1, arr2 at the beginning, (i.e., at the beginning n will adjust itself according to the relative sizes of arr1[i], arr2[i], and once there is another relationship between the sizes of arr1[i], arr2[i] opposite to the state of n, i.e., a crossing of the two lines has occurred.)
            if (n > 0) {
                break;
            }
            n--;
        } else if (arr1[i] > arr2[i]) {             // If arr1 is greater than arr2 then n++
            if (n < 0) {
                break;
            }
            n++;
        } else {                                    // arr1[i] == arr2[i], then immediately break
            break;
        }
    }
    return n;                                       // Returns the value of n, which represents the number of periods that have been crossed, and 0, which means that the indicator values are equal.
};

이 매개 변수에 전달된 데이터 집합을 시뮬레이션해서 어떻게 되는지 봅시다

var arr1 = [1,2,3,4,5,6,8,8,9]     // fast line indicator
var arr2 = [2,3,4,5,6,7,7,7,7]     // slow line indicator
function main(){
    Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
    Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
}

img

우리는 결과가 3, -3이라는 것을 볼 수 있습니다.

img

그래프에서 볼 수 있듯이, 크로스오버는 3개의 K-라인 바 앞에 발생합니다.


더 많은