Looking for help with syntax error

Trying to add signals to this indicator and I’m getting syntax error -(264:42): Unexpected token (264:42)
{

here is the script i am very green to this any advice would be appreciated!

const predef = require(“./tools/predef”);
const meta = require(“./tools/meta”);
const EMA = require(“./tools/EMA”);
const SMA = require(“./tools/SMA”);
const WMA = require(“./tools/WMA”);
const MMA = require(‘./tools/MMA’);
const HMA = require(‘./HMA’);
const p = require(“./tools/plotting”);

const ma = {
simple: SMA,
exponential: EMA,
weighted: WMA,
modified: MMA,
hull: HMA
};

class atrTrailStop_wTargets {
init() {
this.smaMA = SMA(this.props.atrPeriod);
this.atrMA = mathis.props.movingAverageType;
this.trailStop = null;
this.fib1 = null;
this.fib2 = null;
this.fib3 = null;
this.trend = null;
this.trendUp = null;
this.trendDown = null;
this.ex = null;
this.currClose = undefined;
this.currHigh = undefined;
this.currLow = undefined;
this.switchVal = null;
this.diff = null;
this.prevHigh = null;
this.prevLow = null;
this.prevCumulativeDeltaHigh = null;
this.prevCumulativeDeltaLow = null;
this.buySignal = false;
this.sellSignal = false;
}

map(d, i, history) {
    // Initialize Variables
    const prevd = i > 0 ? history.prior() : d;
    const prevClose = prevd.close();
    const prevHigh = prevd.high();
    const prevLow = prevd.low();

    const currClose = d.close();
    const currHigh = d.high();
    const currLow = d.low();
    const cumulativeDelta = d.volume(); // Assuming volume represents cumulative delta

    // True Range Calculations
    const HiLo = Math.min((currHigh - currLow), 1.5 * this.smaMA(currHigh - currLow));
    const HRef = currLow <= prevHigh ? currHigh - prevClose : (currHigh - prevClose) - 0.5 * (currLow - prevHigh);
    const LRef = currHigh >= prevLow ? prevClose - currLow : (prevClose - currLow) - 0.5 * (prevLow - currHigh);
    const trueRange = this.props.trailType == "modified" ? Math.max(HiLo, Math.max(HRef, LRef)) : Math.max(currHigh - currLow, Math.max(Math.abs(currHigh - prevClose), Math.abs(currLow - prevClose)));

    // Trend Logic
    const loss = this.props.ATRFactor * this.atrMA(trueRange);
    const up = currClose - loss;
    const down = currClose + loss;

    const prevTrend = this.trend;
    const prevTrendUp = this.trendUp;
    const prevTrendDown = this.trendDown;

    this.trendUp = prevClose > prevTrendUp ? Math.max(up, prevTrendUp) : up;
    this.trendDown = prevClose < prevTrendDown ? Math.min(down, prevTrendDown) : down;
    this.trend = currClose > prevTrendDown ? 1 : currClose < prevTrendUp ? -1 : prevTrend;

    this.trailStop = this.trend == 1 ? this.trendUp : this.trendDown;

    // Extremum Logic
    const prevEx = this.ex;
    this.ex = (this.trend > 0 && prevTrend < 0) ? currHigh : (this.trend < 0 && prevTrend > 0) ? currLow : this.trend == 1 ? Math.max(prevEx, currHigh) : this.trend == -1 ? Math.min(prevEx, currLow) : prevEx;

    // Fibonacci Level Logic
    this.fib1 = this.ex + (this.trailStop - this.ex) * this.props.Fib1Level / 100;
    this.fib2 = this.ex + (this.trailStop - this.ex) * this.props.Fib2Level / 100;
    this.fib3 = this.ex + (this.trailStop - this.ex) * this.props.Fib3Level / 100;
    const l100 = this.trailStop + 0;

    // Fib Targets
    const prevSwitchVal = this.switchVal;
    const prevDiff = this.diff;
    const trendChange = this.trend == prevTrend ? false : true;
    this.switchVal = trendChange ? this.trailStop : prevSwitchVal;
    this.diff = trendChange ? d.close() - this.switchVal : prevDiff;

    let fibTgt1 = this.switchVal + (this.diff * 1.618);
    let fibTgt2 = this.switchVal + (this.diff * 2.618);
    let fibTgt3 = this.switchVal + (this.diff * 4.23);

    // Buy/Sell Signals
    this.buySignal = false;
    this.sellSignal = false;

    if (this.prevHigh !== null && currHigh > this.prevHigh && cumulativeDelta < this.prevCumulativeDeltaHigh) {
        this.buySignal = true;
    }

    if (this.prevLow !== null && currLow < this.prevLow && cumulativeDelta > this.prevCumulativeDeltaLow) {
        this.sellSignal = true;
    }

    // Update previous values
    if (this.prevHigh === null || currHigh > this.prevHigh) {
        this.prevHigh = currHigh;
        this.prevCumulativeDeltaHigh = cumulativeDelta;
    }

    if (this.prevLow === null || currLow < this.prevLow) {
        this.prevLow = currLow;
        this.prevCumulativeDeltaLow = cumulativeDelta;
    }

    return {
        trend: this.trend,
        trendUp: this.trendUp,
        trendDown: this.trendDown,
        ex: this.ex,
        fib1: this.fib1,
        fib2: this.fib2,
        fib3: this.fib3,
        l100: l100,
        trailStop: this.trailStop,
        switchVal: this.switchVal,
        diff: this.diff,
        fibTgt1,
        fibTgt2,
        fibTgt3,
        trendChange,
        buySignal: this.buySignal,
        sellSignal: this.sellSignal
    };
}

}

function drawATR_TrailStop(canvas, indicatorInstance, history) {
let item1;

for (let i = 0; i < history.data.length; ++i) {
    const item = history.get(i);

    if (i > 0 && item.trend !== undefined && item.trailStop !== undefined && item.fib1 !== undefined && item.fib2 !== undefined && item.fib3 !== undefined && item.l100 !== undefined) {
        const x = p.x.get(item);
        const x1 = p.x.get(item1);

        canvas.drawLine(
            p.offset(x1, item1.trailStop),
            p.offset(x, item.trailStop),
            {
                color: item.trend == 1 ? "Green" : item.trend == -1 ? "Red" : "White",
                relativeWidth: 0.5,
                opacity: indicatorInstance.props.lineOpacity / 100,
            });
    }

    item1 = item;
}

}

function colorATR_TrailStop(canvas, indicatorInstance, history) {
for (let i = 0; i < history.data.length; ++i) {
const item = history.get(i);

    if (item.trend !== undefined && item.trailStop !== undefined && item.fib1 !== undefined && item.fib2 !== undefined && item.fib3 !== undefined && item.l100 !== undefined) {
        if (indicatorInstance.props.colorZones) {
            const x = p.x.get(item);
            canvas.drawLine(
                p.offset(x, item.fib1),
                p.offset(x, item.fib2),
                {
                    color: item.trend == 1 ? "LightGreen" : item.trend == -1 ? "Salmon" : "White",
                    relativeWidth: 1.0,
                    opacity: indicatorInstance.props.fillOpacity / 100,
                }
            );
            canvas.drawLine(
                p.offset(x, item.fib2),
                p.offset(x, item.fib3),
                {
                    color: item.trend == 1 ? "Green" : item.trend == -1 ? "Red" : "White",
                    relativeWidth: 1.0,
                    opacity: indicatorInstance.props.fillOpacity / 100,
                }
            );
            canvas.drawLine(
                p.offset(x, item.fib3),
                p.offset(x, item.l100),
                {
                    color: item.trend == 1 ? "DarkGreen" : item.trend == -1 ? "DarkRed" : "White",
                    relativeWidth: 1.0,
                    opacity: indicatorInstance.props.fillOpacity / 100,
                }
            );
        }
    }
}

}

function drawFibTargets(canvas, indicatorInstance, history) {
let item1;

for (let i = 0; i < history.data.length; ++i) {
    const item = history.get(i);

    if (i > 0 && item.trend !== undefined && item.trailStop !== undefined && item.fib1 !== undefined && item.fib2 !== undefined && item.fib3 !== undefined && item.l100 !== undefined) {
        if (indicatorInstance.props.showFibTargets) {
            const x = p.x.get(item);
            const x1 = p.x.get(item1);... if (((item.trend == 1 && item.fibTgt1 > item.trailStop) || (item.trend == -1 && item.fibTgt1 < item.trailStop)) && item.trendChange === false) {
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt1),
                    p.offset(x, item.fibTgt1),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 0.4,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
            }
            if (((item.trend == 1 && item.fibTgt2 > item.trailStop) || (item.trend == -1 && item.fibTgt2 < item.trailStop)) && item.trendChange === false) {
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt2),
                    p.offset(x, item.fibTgt2),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 0.4,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
            }
            if (((item.trend == 1 && item.fibTgt3 > item.trailStop) || (item.trend == -1 && item.fibTgt3 < item.trailStop)) && item.trendChange === false) {
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt3),
                    p.offset(x, item.fibTgt3),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 0.4,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
            }
            if (item1.trendChange === true) {
                //canvas.drawText("TEST", p.offset(x, item.fibTgt1),{color: "White",}),
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt1),
                    p.offset(x, item.fibTgt1),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 1,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt2),
                    p.offset(x, item.fibTgt2),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 1,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
                canvas.drawLine(
                    p.offset(x1, item1.fibTgt3),
                    p.offset(x, item.fibTgt3),
                    {
                        color: item.trend == 1 ? "Red" : item.trend == -1 ? "Green" : "White",
                        relativeWidth: 1,
                        opacity: indicatorInstance.props.lineOpacity / 100,
                    });
            }
        }
    }

    item1 = item;
}

}

function drawBuySellSignals(canvas, indicatorInstance, history) {
for (let i = 0; i < history.data.length; ++i) {
const item = history.get(i);
const x = p.x.get(item);

    if (item.buySignal) {
        canvas.drawTriangle(
            x,
            item.trailStop, // Use item.trailStop directly
            7,
            "Green",
            "up"
        );
    }

    if (item.sellSignal) {
        canvas.drawTriangle(
            x,
            item.trailStop, // Use item.trailStop directly
            7,
            "Red",
            "down"
        );
    }
}

}

module.exports = {
name: “atrTrailStop_wTargets”,
description: “ATR TrailStop w/Fib Targets”,
calculator: atrTrailStop_wTargets,
params: {
trailType: predef.paramSpecs.enum({
modified: “Modified”,
unmodified: “Unmodified”,
}, “modified”),
movingAverageType: predef.paramSpecs.enum({
simple: “Simple”,
exponential: “Exponential”,
hull: “Hull”,
modified: “Wilder’s”,
weighted: “Weighted”,
}, “modified”),
atrPeriod: predef.paramSpecs.period(5),
ATRFactor: predef.paramSpecs.number(3.5, 0.1),
Fib1Level: predef.paramSpecs.number(61.8, 0.1),
Fib2Level: predef.paramSpecs.number(78.6, 0.1),
Fib3Level: predef.paramSpecs.number(88.6, 0.1),
colorZones: {
type: “boolean”,
def: false,
},
showFibTargets: {
type: “boolean”,
def: true,
},
lineOpacity: predef.paramSpecs.percent(65, 1, 1, 100),
fillOpacity: predef.paramSpecs.percent(30, 1, 1, 100),
},
inputType: meta.InputType.BARS,
plots: {
trailStop: { title: “TrailStop” },
fib1: { title: “Fib1” },
fib2: { title: “Fib2” },
fib3: { title: “Fib3” },
fibTgt1: { title: “Target 1” },
fibTgt2: { title: “Target 2” },
fibTgt3: { title: “Target 3” },
buySignal: { title: “Buy Signal” },
sellSignal: { title: “Sell Signal” },
},
plotter: [
predef.plotters.custom(colorATR_TrailStop),
predef.plotters.custom(drawATR_TrailStop),
predef.plotters.singleline(“fib1”),
predef.plotters.singleline(“fib2”),
predef.plotters.singleline(“fib3”),
predef.plotters.custom(drawFibTargets),
predef.plotters.custom(drawBuySellSignals)
],
tags: [predef.tags.Volatility],
schemeStyles: {
dark: {
fib1: { color: “white”, lineWidth: 1, lineStyle: 1, opacity: 65 },
fib2: { color: “white”, lineWidth: 1, lineStyle: 1, opacity: 65 },
fib3: { color: “white”, lineWidth: 2, lineStyle: 1, opacity: 65 },
trailStop: { color: “red” },
fibTgt1: { color: “magenta” },
fibTgt2: { color: “magenta” },
fibTgt3: { color: “magenta” },
},
light: {
fib1: { color: “gray”, lineWidth: 1, lineStyle: 1, opacity: 65 },
fib2: { color: “gray”, lineWidth: 1, lineStyle: 1, opacity: 65 },
fib3: { color: “gray”, lineWidth: 2, lineStyle: 1, opacity: 65 },
trailStop: { color: “red” },
fibTgt1: { color: “magenta” },
fibTgt2: { color: “magenta” },
fibTgt3: { color: “magenta” },
}
}
};

feel im missing alot here

Also is there a place/market for pros who can code for $

Hi Alexander, I am code developer and can help you with your coding and indicators/strategy. please drop me an email on: timmfain@gmail.com

also with regards to your code, the syntax error you’re encountering is likely due to the use of curly quotation marks (“ ”) instead of straight quotation marks (" "). JavaScript (and most programming languages) require straight quotation marks for strings.

also I dont understand this part: this.atrMA = mathis.props.movingAverageType;

it seems there is a typo?

i’m tradovate indicator/strategy coder. contact me at obacommunication@gmail.com