커뮤니티

참조데이터 사용시 문제점

프로필 이미지
피리
2026-08-06 15:50:22
48
글번호 233139
답변완료

첨부 이미지

참조데이터를 사용하고 있는데 메인차트에 피보나치 선을 그리는 지표를 작성하고 있습니다

단독으로 사용할때는 정상적으로 당일날짜에만 나오는데 참조데이터를 사용하는경우에는 과거에 모두 피보나치 라인을 그리고 있어서 답을 찿고 있습니다



Input :

    StructLookback(20),    

    ShowFibo(1),           

    Show60M10MA(1),        // Data2 60분봉 10이평선 표시 여부

    Show200M60MA(1);       // Data5 200분봉 60이평선 표시 여부


Var :

    structInit(0, data1), structDirection(0, data1),

    structHigh(0, data1), structLow(0, data1), structRange(0, data1),

    structHighStartDate(0, data1), structHighStartTime(0, data1),

    structLowStartDate(0, data1), structLowStartTime(0, data1),

    isStructLowBroken(False, data1), isStructHighBroken(False, data1),


    Fibo786(0, data1), Fibo705(0, data1), Fibo618(0, data1), Fibo500(0, data1), Fibo382(0, data1), Fibo0(0, data1), Fibo1(0, data1),

    fTL786(0, data1), fTX786(0, data1), fTL705(0, data1), fTX705(0, data1), fTL618(0, data1), fTX618(0, data1),

    fTL500(0, data1), fTX500(0, data1), fTL382(0, data1), fTX382(0, data1), fTL0(0, data1), fTX0(0, data1), fTL1(0, data1), fTX1(0, data1),

    fStart_Date(0, data1), fStart_Time(0, data1),


    // Data2 (60M 10MA) & Data5 (200M 60MA) 참조데이터 변수

    d2_ma10(0, data2), ma60_TL(0, data1),

    d5_ma60(0, data5), ma200_TL(0, data1);


// 참조데이터 수식 연산

d2_ma10 = data2(ma(C, 10));

d5_ma60 = data5(ma(C, 60));


// ====================================================================

// 1. 구조체 파동 상태머신 (High/Low 실시간 추적)

// ====================================================================

If structInit == 0 Then

Begin

    structHigh = H; structLow = L;

    structHighStartDate = sDate; structHighStartTime = sTime;

    structLowStartDate = sDate; structLowStartTime = sTime;

    structInit = 1;

End;


isStructLowBroken  = CrossDown(C, structLow)  or (structDirection == 2 and C < structLow);

isStructHighBroken = CrossUp(C, structHigh) or (structDirection == 1 and C > structHigh);


If isStructLowBroken Then

Begin

    structDirection = 1;

    structHigh = Highest(H, StructLookback); structHighStartDate = sDate; structHighStartTime = sTime;

    structLow  = L; structLowStartDate  = sDate; structLowStartTime  = sTime;

End

Else If isStructHighBroken Then

Begin

    structDirection = 2;

    structHigh = H; structHighStartDate = sDate; structHighStartTime = sTime;

    structLow  = Lowest(L, StructLookback); structLowStartDate  = sDate; structLowStartTime  = sTime;

End

Else

Begin

    If H > structHigh and (structDirection == 0 or structDirection == 2) Then

    Begin

        structHigh = H; structHighStartDate = sDate; structHighStartTime = sTime;

    End;

    If L < structLow and (structDirection == 0 or structDirection == 1) Then

    Begin

        structLow = L; structLowStartDate = sDate; structLowStartTime = sTime;

    End;

End;


structRange = structHigh - structLow;


// ====================================================================

// 2. 방향성 피보나치 7개선 + 우측 수치 라벨 렌더링

// ====================================================================

If ShowFibo == 1 and structHigh > structLow and structLow > 0 Then

Begin

    if structDirection == 1 then

    {

        fStart_Date = structHighStartDate; fStart_Time = structHighStartTime;

    }

    else

    {

        fStart_Date = structLowStartDate; fStart_Time = structLowStartTime;

    }


    if structDirection == 1 then

    {

        Fibo786 = structHigh - (structRange * 0.214);

        Fibo705 = structHigh - (structRange * 0.295);

        Fibo618 = structHigh - (structRange * 0.382);

        Fibo500 = structHigh - (structRange * 0.500);

        Fibo382 = structHigh - (structRange * 0.618);

        Fibo0   = structHigh;

        Fibo1   = structLow;

    }

    else

    {

        Fibo786 = structLow + (structRange * 0.786);

        Fibo705 = structLow + (structRange * 0.705);

        Fibo618 = structLow + (structRange * 0.618);

        Fibo500 = structLow + (structRange * 0.500);

        Fibo382 = structLow + (structRange * 0.382);

        Fibo0   = structLow;

        Fibo1   = structHigh;

    }


    TL_Delete(fTL786); Text_Delete(fTX786);

    fTL786 = TL_New(fStart_Date, fStart_Time, Fibo786, sDate, sTime, Fibo786);

    TL_SetColor(fTL786, Cyan); TL_SetStyle(fTL786, 3); TL_SetExtRight(fTL786, true);

    fTX786 = Text_New(sDate, sTime, Fibo786, "  0.786(" + NumToStr(Fibo786, 2) + ")");

    Text_SetColor(fTX786, Cyan); Text_SetStyle(fTX786, 0, 1);


    TL_Delete(fTL705); Text_Delete(fTX705);

    fTL705 = TL_New(fStart_Date, fStart_Time, Fibo705, sDate, sTime, Fibo705);

    TL_SetColor(fTL705, RED); TL_SetStyle(fTL705, 3); TL_SetExtRight(fTL705, true);

    fTX705 = Text_New(sDate, sTime, Fibo705, "  0.705(" + NumToStr(Fibo705, 2) + ")");

    Text_SetColor(fTX705, RED); Text_SetStyle(fTX705, 0, 1);


    TL_Delete(fTL618); Text_Delete(fTX618);

    fTL618 = TL_New(fStart_Date, fStart_Time, Fibo618, sDate, sTime, Fibo618);

    TL_SetColor(fTL618, Cyan); TL_SetStyle(fTL618, 3); TL_SetExtRight(fTL618, true);

    fTX618 = Text_New(sDate, sTime, Fibo618, "  0.618(" + NumToStr(Fibo618, 2) + ")");

    Text_SetColor(fTX618, Cyan); Text_SetStyle(fTX618, 0, 1);


    TL_Delete(fTL500); Text_Delete(fTX500);

    fTL500 = TL_New(fStart_Date, fStart_Time, Fibo500, sDate, sTime, Fibo500);

    TL_SetColor(fTL500, GREEN); TL_SetStyle(fTL500, 3); TL_SetExtRight(fTL500, true);

    fTX500 = Text_New(sDate, sTime, Fibo500, "  0.5(" + NumToStr(Fibo500, 2) + ")");

    Text_SetColor(fTX500, GREEN); Text_SetStyle(fTX500, 0, 1);


    TL_Delete(fTL382); Text_Delete(fTX382);

    fTL382 = TL_New(fStart_Date, fStart_Time, Fibo382, sDate, sTime, Fibo382);

    TL_SetColor(fTL382, GREEN); TL_SetStyle(fTL382, 3); TL_SetExtRight(fTL382, true);

    fTX382 = Text_New(sDate, sTime, Fibo382, "  0.382(" + NumToStr(Fibo382, 2) + ")");

    Text_SetColor(fTX382, GREEN); Text_SetStyle(fTX382, 0, 1);


    TL_Delete(fTL0); Text_Delete(fTX0);

    fTL0 = TL_New(fStart_Date, fStart_Time, Fibo0, sDate, sTime, Fibo0);

    TL_SetColor(fTL0, WHITE); TL_SetStyle(fTL0, 3); TL_SetExtRight(fTL0, true);

    fTX0 = Text_New(sDate, sTime, Fibo0, "  1.0(" + NumToStr(Fibo0, 2) + ")");

    Text_SetColor(fTX0, WHITE); Text_SetStyle(fTX0, 0, 1);


    TL_Delete(fTL1); Text_Delete(fTX1);

    fTL1 = TL_New(fStart_Date, fStart_Time, Fibo1, sDate, sTime, Fibo1);

    TL_SetColor(fTL1, WHITE); TL_SetStyle(fTL1, 3); TL_SetExtRight(fTL1, true);

    fTX1 = Text_New(sDate, sTime, Fibo1, "  0.0(" + NumToStr(Fibo1, 2) + ")");

    Text_SetColor(fTX1, WHITE); Text_SetStyle(fTX1, 0, 1);

End;


// ====================================================================

// 3. Data2(60M 10MA) 황금색 & Data5(200M 60MA) 보라색 이평선 렌더링

// ====================================================================

If Show60M10MA == 1 Then

Begin

    If d2_ma10 > 0 and d2_ma10[1] > 0 Then

    Begin

        ma60_TL = TL_New(sDate[1], sTime[1], d2_ma10[1], sDate, sTime, d2_ma10);

        TL_SetColor(ma60_TL, RGB(255, 215, 0)); TL_SetSize(ma60_TL, 2);

    End;

End;


If Show200M60MA == 1 Then

Begin

    If d5_ma60 > 0 and d5_ma60[1] > 0 Then

    Begin

        ma200_TL = TL_New(sDate[1], sTime[1], d5_ma60[1], sDate, sTime, d5_ma60);

        TL_SetColor(ma200_TL, RGB(186, 85, 211)); TL_SetSize(ma200_TL, 2);

    End;

End;


지표
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2026-08-07 12:48:24

안녕하세요 예스스탁입니다. 텍스트함수가 봉완성시에 동작하는데 참조데이터가 있을 경우 여러번 차트에서 봉완성이 발생하므로 아래와 같이 변수는 데이터번호를 지정하지 않고 글로벌변수로 만들고 삭제시에 가장 최근 아이디만 삭제가 아닌 for 루프로 이전 n개를 삭제하게 만들어 주시면 됩니다. Input : StructLookback(20), ShowFibo(1), Show60M10MA(1), // Data2 60분봉 10이평선 표시 여부 Show200M60MA(1); // Data5 200분봉 60이평선 표시 여부 Var : structInit(0, data1), structDirection(0, data1), structHigh(0, data1), structLow(0, data1), structRange(0, data1), structHighStartDate(0, data1), structHighStartTime(0, data1), structLowStartDate(0, data1), structLowStartTime(0, data1), isStructLowBroken(False, data1), isStructHighBroken(False, data1), Fibo786(0, data1), Fibo705(0, data1), Fibo618(0, data1), Fibo500(0, data1), Fibo382(0, data1), Fibo0(0, data1), Fibo1(0, data1), fTL786(0), fTX786(0), fTL705(0), fTX705(0), fTL618(0), fTX618(0), fTL500(0), fTX500(0), fTL382(0), fTX382(0), fTL0(0), fTX0(0), fTL1(0), fTX1(0), fStart_Date(0, data1), fStart_Time(0, data1), // Data2 (60M 10MA) & Data5 (200M 60MA) 참조데이터 변수 d2_ma10(0, data2), ma60_TL(0), d5_ma60(0, data5), ma200_TL(0); var : cnt(0); // 참조데이터 수식 연산 d2_ma10 = data2(ma(C, 10)); d5_ma60 = data5(ma(C, 60)); // ==================================================================== // 1. 구조체 파동 상태머신 (High/Low 실시간 추적) // ==================================================================== If structInit == 0 Then Begin structHigh = H; structLow = L; structHighStartDate = sDate; structHighStartTime = sTime; structLowStartDate = sDate; structLowStartTime = sTime; structInit = 1; End; isStructLowBroken = CrossDown(C, structLow) or (structDirection == 2 and C < structLow); isStructHighBroken = CrossUp(C, structHigh) or (structDirection == 1 and C > structHigh); If isStructLowBroken Then Begin structDirection = 1; structHigh = Highest(H, StructLookback); structHighStartDate = sDate; structHighStartTime = sTime; structLow = L; structLowStartDate = sDate; structLowStartTime = sTime; End Else If isStructHighBroken Then Begin structDirection = 2; structHigh = H; structHighStartDate = sDate; structHighStartTime = sTime; structLow = Lowest(L, StructLookback); structLowStartDate = sDate; structLowStartTime = sTime; End Else Begin If H > structHigh and (structDirection == 0 or structDirection == 2) Then Begin structHigh = H; structHighStartDate = sDate; structHighStartTime = sTime; End; If L < structLow and (structDirection == 0 or structDirection == 1) Then Begin structLow = L; structLowStartDate = sDate; structLowStartTime = sTime; End; End; structRange = structHigh - structLow; // ==================================================================== // 2. 방향성 피보나치 7개선 + 우측 수치 라벨 렌더링 // ==================================================================== If ShowFibo == 1 and structHigh > structLow and structLow > 0 Then Begin if structDirection == 1 then { fStart_Date = structHighStartDate; fStart_Time = structHighStartTime; } else { fStart_Date = structLowStartDate; fStart_Time = structLowStartTime; } if structDirection == 1 then { Fibo786 = structHigh - (structRange * 0.214); Fibo705 = structHigh - (structRange * 0.295); Fibo618 = structHigh - (structRange * 0.382); Fibo500 = structHigh - (structRange * 0.500); Fibo382 = structHigh - (structRange * 0.618); Fibo0 = structHigh; Fibo1 = structLow; } else { Fibo786 = structLow + (structRange * 0.786); Fibo705 = structLow + (structRange * 0.705); Fibo618 = structLow + (structRange * 0.618); Fibo500 = structLow + (structRange * 0.500); Fibo382 = structLow + (structRange * 0.382); Fibo0 = structLow; Fibo1 = structHigh; } For cnt = 0 to 45 { TL_Delete(fTL786[cnt]); Text_Delete(fTX786[cnt]); TL_Delete(fTL705[cnt]); Text_Delete(fTX705[cnt]); TL_Delete(fTL618[cnt]); Text_Delete(fTX618[cnt]); TL_Delete(fTL500[cnt]); Text_Delete(fTX500[cnt]); TL_Delete(fTL382[cnt]); Text_Delete(fTX382[cnt]); TL_Delete(fTL0[cnt]); Text_Delete(fTX0[cnt]); TL_Delete(fTL1[cnt]); Text_Delete(fTX1[cnt]); } fTL786 = TL_New(fStart_Date, fStart_Time, Fibo786, sDate, sTime, Fibo786); TL_SetColor(fTL786, Cyan); TL_SetStyle(fTL786, 3); TL_SetExtRight(fTL786, true); fTX786 = Text_New(sDate, sTime, Fibo786, " 0.786(" + NumToStr(Fibo786, 2) + ")"); Text_SetColor(fTX786, Cyan); Text_SetStyle(fTX786, 0, 1); fTL705 = TL_New(fStart_Date, fStart_Time, Fibo705, sDate, sTime, Fibo705); TL_SetColor(fTL705, RED); TL_SetStyle(fTL705, 3); TL_SetExtRight(fTL705, true); fTX705 = Text_New(sDate, sTime, Fibo705, " 0.705(" + NumToStr(Fibo705, 2) + ")"); Text_SetColor(fTX705, RED); Text_SetStyle(fTX705, 0, 1); fTL618 = TL_New(fStart_Date, fStart_Time, Fibo618, sDate, sTime, Fibo618); TL_SetColor(fTL618, Cyan); TL_SetStyle(fTL618, 3); TL_SetExtRight(fTL618, true); fTX618 = Text_New(sDate, sTime, Fibo618, " 0.618(" + NumToStr(Fibo618, 2) + ")"); Text_SetColor(fTX618, Cyan); Text_SetStyle(fTX618, 0, 1); fTL500 = TL_New(fStart_Date, fStart_Time, Fibo500, sDate, sTime, Fibo500); TL_SetColor(fTL500, GREEN); TL_SetStyle(fTL500, 3); TL_SetExtRight(fTL500, true); fTX500 = Text_New(sDate, sTime, Fibo500, " 0.5(" + NumToStr(Fibo500, 2) + ")"); Text_SetColor(fTX500, GREEN); Text_SetStyle(fTX500, 0, 1); fTL382 = TL_New(fStart_Date, fStart_Time, Fibo382, sDate, sTime, Fibo382); TL_SetColor(fTL382, GREEN); TL_SetStyle(fTL382, 3); TL_SetExtRight(fTL382, true); fTX382 = Text_New(sDate, sTime, Fibo382, " 0.382(" + NumToStr(Fibo382, 2) + ")"); Text_SetColor(fTX382, GREEN); Text_SetStyle(fTX382, 0, 1); fTL0 = TL_New(fStart_Date, fStart_Time, Fibo0, sDate, sTime, Fibo0); TL_SetColor(fTL0, WHITE); TL_SetStyle(fTL0, 3); TL_SetExtRight(fTL0, true); fTX0 = Text_New(sDate, sTime, Fibo0, " 1.0(" + NumToStr(Fibo0, 2) + ")"); Text_SetColor(fTX0, WHITE); Text_SetStyle(fTX0, 0, 1); fTL1 = TL_New(fStart_Date, fStart_Time, Fibo1, sDate, sTime, Fibo1); TL_SetColor(fTL1, WHITE); TL_SetStyle(fTL1, 3); TL_SetExtRight(fTL1, true); fTX1 = Text_New(sDate, sTime, Fibo1, " 0.0(" + NumToStr(Fibo1, 2) + ")"); Text_SetColor(fTX1, WHITE); Text_SetStyle(fTX1, 0, 1); End; // ==================================================================== // 3. Data2(60M 10MA) 황금색 & Data5(200M 60MA) 보라색 이평선 렌더링 // ==================================================================== If Show60M10MA == 1 Then Begin If d2_ma10 > 0 and d2_ma10[1] > 0 Then Begin ma60_TL = TL_New(sDate[1], sTime[1], d2_ma10[1], sDate, sTime, d2_ma10); TL_SetColor(ma60_TL, RGB(255, 215, 0)); TL_SetSize(ma60_TL, 2); End; End; If Show200M60MA == 1 Then Begin If d5_ma60 > 0 and d5_ma60[1] > 0 Then Begin ma200_TL = TL_New(sDate[1], sTime[1], d5_ma60[1], sDate, sTime, d5_ma60); TL_SetColor(ma200_TL, RGB(186, 85, 211)); TL_SetSize(ma200_TL, 2); End; End; 즐거운 하루되세요
프로필 이미지

피리

2026-08-07 13:22:07

감사합니다.. 하나더 질문이 있는데요 참조 데이터가 data2,data5 로 되어 있을때 data5를 data3으로 바꾸는 방법이 있을까요? 그리고 참조 데이터 순서 다시 정렬방법은요? 즐거운 주말 보내세요^^
프로필 이미지

예스스탁 예스스탁 답변

2026-08-07 13:23:57

안녕하세요 예스스탁입니다. 참조데이터는 추가하는 순서로 데이터번호가 자동으로 지정됩니다. 데이터번호를 변경하는 기능은 없습니다. 차트를 새로 셋팅해 주셔야 합니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요