Point & Figure for exploration

Hi all
need your help in Point & Figure for exploration please

i get the idea from

SetBarsRequired(100000, 100000);

// === USER SETTINGS ===
boxSize   = 1;      // Can be set from 0.01 to 200000+
reversal  = 3;
boxRevAmt = boxSize * reversal;

// === ARRAYS ===
ColNum   = Null;
BoxDir   = Null;
BoxLevel = Null;
FlipLog  = Null;
BoxCount = Null;

curCol = 0;
curDir = 0;
curTop = C[0];
curBot = C[0];

ColNum[0]   = 0;
BoxDir[0]   = 0;
BoxLevel[0] = C[0];
BoxCount[0] = 1;
FlipLog[0]  = 0;

for (i = 1; i < BarCount; i++)
{
    H_ = H[i];
    L_ = L[i];

    flipToO = (curDir == 1) AND (L_ <= curTop - boxRevAmt);
    flipToX = (curDir == -1) AND (H_ >= curBot + boxRevAmt);

    if (curDir == 0) // First direction detection
    {
        if (H_ >= C[i - 1] + boxRevAmt)
        {
            curDir = 1;
            curTop = H_;
            curBot = curTop - boxSize;
        }
        else if (L_ <= C[i - 1] - boxRevAmt)
        {
            curDir = -1;
            curBot = L_;
            curTop = curBot + boxSize;
        }
    }

    if (flipToO)
    {
        curDir = -1;
        curCol++;
        curBot = L_;
        curTop = curBot + boxSize;

        ColNum[i]   = curCol;
        BoxDir[i]   = curDir;
        BoxLevel[i] = curTop - boxSize;
        BoxCount[i] = 1;
        FlipLog[i]  = -1;
    }
    else if (flipToX)
    {
        curDir = 1;
        curCol++;
        curTop = H_;
        curBot = curTop - boxSize;

        ColNum[i]   = curCol;
        BoxDir[i]   = curDir;
        BoxLevel[i] = curBot + boxSize;
        BoxCount[i] = 1;
        FlipLog[i]  = 1;
    }
    else
    {
        newBoxes = 0;

        if (curDir == 1 AND H_ >= curTop + boxSize)
        {
            newBoxes = Floor((H_ - curTop) / boxSize);
            curTop += newBoxes * boxSize;
        }
        else if (curDir == -1 AND L_ <= curBot - boxSize)
        {
            newBoxes = Floor((curBot - L_) / boxSize);
            curBot -= newBoxes * boxSize;
        }

        ColNum[i]   = curCol;
        BoxDir[i]   = curDir;
        BoxLevel[i] = IIf(curDir == 1, curTop - boxSize, curBot + boxSize);
        BoxCount[i] = IIf(newBoxes > 0, newBoxes, BoxCount[i - 1]);
        FlipLog[i]  = 0;
    }

    // Forward-fill if null
    if (IsNull(BoxDir[i]))     BoxDir[i]   = BoxDir[i - 1];
    if (IsNull(ColNum[i]))     ColNum[i]   = ColNum[i - 1];
    if (IsNull(BoxLevel[i]))   BoxLevel[i] = BoxLevel[i - 1];
    if (IsNull(BoxCount[i]))   BoxCount[i] = BoxCount[i - 1];
    if (IsNull(FlipLog[i]))    FlipLog[i]  = 0;
}

// === EXPLORATION ===
Filter = 1;

AddColumn(DateTime(), "Date", formatDateTime);
AddColumn(H, "High", 1.2);
AddColumn(L, "Low", 1.2);
AddColumn(C, "Close", 1.2);
AddColumn(ColNum, "Column#", 1);
AddColumn(BoxCount, "Box#", 1);
AddColumn(BoxLevel, "BoxLevel", 1.2);

// Fix: Convert box direction to number/text
AddColumn(BoxDir, "BoxDir (Num)", 1);
AddTextColumn(WriteIf(BoxDir == 1, "X", WriteIf(BoxDir == -1, "O", "NA")), "P&F Dir");

// Fix: Flip signal per bar
AddColumn(FlipLog, "Flip Code", 1);
AddTextColumn(WriteIf(FlipLog == 1, "Flip to X", WriteIf(FlipLog == -1, "Flip to O", "")), "Flip Signal");

// === DEBUG Columns ===
AddColumn(boxRevAmt, "Box Reversal Amt", 1.2);
AddColumn(curTop, "curTop", 1.2);
AddColumn(curBot, "curBot", 1.2);



some of the colomun not show the correct value and some empty colmun .

any help to fix the code please .

thank you

This topic was automatically closed 100 days after the last reply. New replies are no longer allowed.