0% found this document useful (0 votes)
722 views11 pages

Nphamalgo v3.1

The document is a TradingView Pine Script for a trading algorithm called 'nphamAlgo v3.1'. It includes various inputs for trading settings, moving average types, and dashboard display options, and it calculates buy and sell signals based on crossover strategies. Additionally, it tracks trade statistics such as total trades, successful trades, and profit/loss metrics.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
722 views11 pages

Nphamalgo v3.1

The document is a TradingView Pine Script for a trading algorithm called 'nphamAlgo v3.1'. It includes various inputs for trading settings, moving average types, and dashboard display options, and it calculates buy and sell signals based on crossover strategies. Additionally, it tracks trade statistics such as total trades, successful trades, and profit/loss metrics.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 11

//@version=6

indicator("nphamAlgo v3.1", overlay=true, max_labels_count = 100, max_bars_back =


100, dynamic_requests = true)

import npham_270888/nphamAlgo_grad/1
import npham_270888/nphamAlgo_Signal_Strength/1
import npham_270888/nphamAlgo_Sessions/3

useRes = input(defval=true, title='Use Alternate Resolution?')


intRes = input(defval=8, title='Multiplier for Alternate Resolution')
// useRef = input.bool(false, "Refresh For Clean Signal")
// intRef = input.int(12, "Refresh Length")
stratRes = timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes,
'###M') : timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes,
'###W') : timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes, '###D') :
timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes, '####') : '60'
basisType = str.upper(input(defval='ALMA', title='MA Type(no repainting)'))
basisLen = input.int(defval=2, title='MA Period', minval=1)
offsetSigma = input.int(defval=5, title='Sigma for ALMA', minval=0)
offsetALMA = input.float(defval=0.85, title='Offset for ALMA', minval=0, step=0.01)

trade_gr = "Trading Setting"

lotSize_input = input.float(0.05, title="Lot Size", group = trade_gr, display =


display.none)
initialLiquidity = input.float(10, title="Account Balance", group = trade_gr,
display = display.none)
spread_input = input.float(0.11, "Simulate Spread", group = trade_gr, display =
display.none)

lotSize = syminfo.type == "crypto" ? lotSize_input / 100 : lotSize_input

spread = syminfo.type == "crypto" and (syminfo.ticker == "BTCUSDT" or


syminfo.ticker == "BTCUSD.P") ? spread_input * 100 : syminfo.type == "crypto" ?
spread_input * 10 : spread_input

dsbgr = "Dashboard"

showdsb = input.bool(true, "Show Dashboard", group = dsbgr, inline = "1")


fast_update = input.bool(false, "Fast Update", group = dsbgr, inline = "1")
tablePosition = input.string("Top Right", title="Dashboard Position", options=["Top
Right", "Top Left", "Bottom Right", "Bottom Left", "Top Center", "Bottom Center",
"Middle Left", "Middle Right"], group = dsbgr, display = display.none)
showfun = input.string("OFF", "Change Fun Mode", options = ["OFF", "Random Colors",
"Volume Percent"], group = dsbgr, display = display.none)
textSize = str.lower(input.string("Auto", title = "Size", options = ["Tiny",
"Small", "Normal", "Auto"], group = dsbgr, display = display.none))
dsb_mode = input.string(title="Dashboard Display Mode", defval="Simple",
options=["Simple", "Colorful"], display = display.none, inline = "2")
colorStrength = input.float(65, "", minval = 0.00, maxval = 100, step= 0.01,
display = display.none, inline = "2")

GREEN = color.rgb(29, 255, 40)


RED = color.rgb(255, 0, 0)
TRANSPARENT = color.rgb(0, 0, 0, 100)

label_size = str.lower(input.string('Normal', 'Label Size', options=['Huge',


'Large', 'Normal', 'Small', 'Tiny'], group='Cosmetic', display = display.none))
label_style = str.lower(input.string('Text Bubble', 'Label Style', ['Text Bubble',
'Triangle', 'Arrow'], group='Cosmetic', display = display.none))
buy_label_color = input(GREEN, 'BUY Label Color', inline='Highlight',
group='Cosmetic', display = display.none)
sell_label_color = input(RED, 'SELL Label Color', inline='Highlight',
group='Cosmetic', display = display.none)
label_text_color = input(color.white, 'Label Text Color', inline='Highlight',
group='Cosmetic', display = display.none)

get_pos(tablePosition) =>

var labelPosition = position.top_right

if tablePosition == "Top Right"


labelPosition := position.top_right
else if tablePosition == "Top Left"
labelPosition := position.top_left
else if tablePosition == "Bottom Right"
labelPosition := position.bottom_right
else if tablePosition == "Bottom Left"
labelPosition := position.bottom_left
else if tablePosition == "Top Center"
labelPosition := position.top_center
else if tablePosition == "Bottom Center"
labelPosition := position.bottom_center
else if tablePosition == "Middle Left"
labelPosition := position.middle_left
else if tablePosition == "Middle Right"
labelPosition := position.middle_right

h = hour(time, "GMT+7")
m = minute(time, "GMT+7")
s = second(time, "GMT+7")

variant(type, src, len, offSig, offALMA) =>


v1 = ta.alma(src, len, offALMA, offSig) // Arnaud Legoux
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple
Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
v7 = 0.0
sma_1 = ta.sma(src, len) // Smoothed
v7 := na(v7[1]) ? sma_1 : (v7[1] * (len - 1) + src) / len
v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len),
math.round(math.sqrt(len))) // Hull
v9 = ta.linreg(src, len, offSig) // Least Squares
v10 = ta.sma(src, len) // Simple
v11 = ta.sma(v1, len) // Triangular (extreme smooth)
// SuperSmoother filter
a1 = math.exp(-1.414 * 3.14159 / len)
b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len)
c2 = b1
c3 = -a1 * a1
c1 = 1 - c2 - c3
v12 = 0.0
v12 := c1 * (src + nz(src[1])) / 2 + c2 * nz(v12[1]) + c3 * nz(v12[2])
type == 'EMA' ? v2 : type == 'DEMA' ? v3 : type == 'TEMA' ? v4 : type ==
'WMA' ? v5 : type == 'VWMA' ? v6 : type == 'SMMA' ? v7 : type == 'HMA' ? v8 : type
== 'LSMA' ? v9 : type == 'SMA' ? v10 : type == 'TMA' ? v11 : type == 'SSMA' ? v12 :
v1

reso(exp, use, res) =>


//security_1 = request.security(syminfo.tickerid, res,
exp[barstate.isrealtime ? 1 : 0] , gaps=barmerge.gaps_off,
lookahead=barmerge.lookahead_off)
security_1 = request.security(syminfo.tickerid, res, exp,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
use ? security_1 : exp

var float closeSeriesAlt = na


var float openSeriesAlt = na

closeSeries = variant(basisType, close, basisLen, offsetSigma, offsetALMA)


openSeries = variant(basisType, open, basisLen, offsetSigma, offsetALMA)

closeSeriesAlt := reso(closeSeries, useRes, stratRes)


openSeriesAlt := reso(openSeries, useRes, stratRes)

buySignal = ta.crossover(closeSeriesAlt, openSeriesAlt) and


barstate.isconfirmed //and trading_range
sellSignal = ta.crossunder(closeSeriesAlt, openSeriesAlt) and
barstate.isconfirmed //and trading_range

trendColour = closeSeriesAlt > openSeriesAlt ? color.green : color.red


plot(math.avg(closeSeriesAlt, openSeriesAlt), title = "v3.1 Main Lines", color =
trendColour, display = display.none)

var int currentDay = na


var float entryPrice = na
var float maxPriceDuringTrade = na
var float minPriceDuringTrade = na
var float buyMaxProfit = 0.0
var float sellMaxProfit = na
var float maxDrawdownPerTrade = 0.0
var float totalDrawdown = 0.0
var int totalTrades = 0
var int successfulTrades = 0
var int unsuccessfulTrades = 0
var float totalProfitUSD = 0.0
var bool accountBurned = false
var float liquidity = initialLiquidity
var string entry = ""
var float highp = 0.0
var float lowp = 0.0

Price = ta.valuewhen((buySignal or sellSignal) and barstate.isconfirmed, close, 0)


entryTime = ta.valuewhen((buySignal or sellSignal) and barstate.isconfirmed, time,
0)

var float currentProfitUSD = na

bars = nz((bar_index) - ta.valuewhen(entry == "🟢" or entry == "🔴", bar_index, 0))

bar = bars <= 0 ? 1 : bars


maxprofit(signal) =>

float maxprofit_intrade = na

if signal == 'Buy'

buyMax = (ta.highest(high, bar) - (Price + spread)) * lotSize * 100

maxprofit_intrade := math.max(maxprofit_intrade, buyMax)

else if signal == "Sell"

sellMax = ((Price - spread) - ta.lowest(low, bar)) * lotSize * 100

maxprofit_intrade := math.max(maxprofit_intrade, sellMax)

maxprofit_intrade

if entry == "🟢" //and barstate.isconfirmed


currentProfitUSD := (close - (Price + spread)) * lotSize * 100
drawdown = ((Price + spread) - ta.lowest(low, bar)) * lotSize * 100
maxDrawdownPerTrade := math.max(maxDrawdownPerTrade, drawdown)

buyMaxProfit := maxprofit("Sell")

// buyMax = (ta.highest(high, bar) - (Price + spread)) * lotSize * 100


// buyMaxProfit := math.max(buyMaxProfit, buyMax)

else if entry == "🔴" //and barstate.isconfirmed


currentProfitUSD := ((Price - spread) - close) * lotSize * 100
drawdown = (ta.highest(high, bar) - (Price - spread)) * lotSize * 100
maxDrawdownPerTrade := math.max(maxDrawdownPerTrade, drawdown)

sellMaxProfit := maxprofit("Sell")

// sellMax = ((Price - spread) - ta.lowest(low, bar)) * lotSize * 100


// sellMaxProfit := math.max(sellMaxProfit, sellMax)

protfit = ta.valuewhen(buySignal or sellSignal and barstate.isconfirmed,


currentProfitUSD[1], 0)

//prebalance = 0.0

if buySignal
totalTrades += 1
if Price + spread < Price[1] - spread
successfulTrades += 1
else if Price + spread > Price[1] - spread
unsuccessfulTrades += 1
entry := "🟢"
profitUSD = ((Price[1] - spread) - close) * lotSize * 100

liquidity += profitUSD

// totalDrawdown += drawdown

if protfit < 0
if -profitUSD[1] > liquidity
accountBurned := true

if sellSignal
totalTrades += 1
if Price - spread > Price[1] + spread
successfulTrades += 1
else if Price - spread < Price[1] + spread
unsuccessfulTrades += 1
entry := "🔴"
profitUSD = (close - (Price[1] + spread)) * lotSize * 100

liquidity += profitUSD

// totalDrawdown += drawdown

if protfit < 0
if -profitUSD[1] > liquidity
accountBurned := true

winrate = (totalTrades > 0) ? 100.0 * (successfulTrades / totalTrades) : 0.0


averageProfitUSD = (totalTrades > 0) ? totalProfitUSD / totalTrades : 0.0

accountEquid = liquidity + currentProfitUSD


totalProfitUSD := liquidity - initialLiquidity

pips = currentProfitUSD / (lotSize_input * 10)

var float timeSinceEntry = na


if not na(entryTime)
timeSinceEntry := (timenow - entryTime) / 1000

var int hours = na


var int minutes = na
var int seconds = na

if not na(timeSinceEntry)
hours := int(timeSinceEntry / 3600)
minutes := int((timeSinceEntry % 3600) / 60)
seconds := int(timeSinceEntry % 60)

string timeFormatted = ""


if hours == 0
timeFormatted := str.tostring(minutes, "00") + ":" + str.tostring(seconds,
"00") // Hiển thị phút:giây nếu giờ = 0
else
timeFormatted := str.tostring(hours, "00") + ":" + str.tostring(minutes, "00")
// Hiển thị giờ:phút nếu giờ khác 0

k = ta.ema(ta.stoch(close, high, low, 20), 12)


Gs_240 = ""
var color color1 = na

if (k <= 75 and k >= 25)


Gs_240 := "SAFE TRADE"
color1 := dsb_mode == "Simple" ? color.new(color.green, 20) :
color.new(color.green, colorStrength)
else
if (k > 75 and k <= 88)
Gs_240 := "S/R AREA"
color1 := dsb_mode == "Simple" ? color.new(color.yellow, 20) :
color.new(color.yellow, colorStrength)
else
if (k < 25 and k >= 12)
Gs_240 := "S/R AREA"
color1 := dsb_mode == "Simple" ? color.new(color.yellow, 20) :
color.new(color.yellow, colorStrength)
else
if (k > 88)
Gs_240 := "HIGH RISK⚠️"
color1 := dsb_mode == "Simple" ? color.new(color.red, 20) :
color.new(color.red, colorStrength)
else
if (k < 12)
Gs_240 := "HIGH RISK⚠️"
color1 := dsb_mode == "Simple" ? color.new(color.red, 20) :
color.new(color.red, colorStrength)

icon = entry != "" ? "🚀" : ""


entrycolor = entry == "🟢" ? color.new(color.rgb(29, 255, 40), colorStrength) :
color.new(color.rgb(255, 0, 0), colorStrength)
entry_s_color = entry == "🟢" ? color.green : color.red

bgSimple = #3b3b3b43
bgColorfulBlue = color.new(color.blue, colorStrength)
bgColorfulGreen = color.new(color.green, colorStrength)
bgColorfulRed = color.new(color.red, colorStrength)
bgColorfulOrange = color.new(color.orange, colorStrength)
bgColorfulPurple = color.new(color.purple, colorStrength)

var table tb = table.new(get_pos(tablePosition), 3, 11


, border_color = color.black
, border_width = 1
, frame_width = 1)

dashboard() =>

tb.cell(0, 0, "📅" + str.tostring(year(time, 'GMT+7')) + "-" +


str.tostring(month(time, 'GMT+7')) + "-" + str.tostring(dayofmonth(time, 'GMT+7')),
text_color = color.white, bgcolor = bgSimple, text_size = textSize)
tb.merge_cells(0, 0, 1, 0)
//tb.cell(1, 0, nphamAlgo_grad_100.clock_icon(hour(time, 'GMT+7')) +
str.tostring(hour(time, 'GMT+7')) + "h" + str.tostring(minute(time, "GMT+7")),
text_color = color.white, bgcolor = bgSimple, text_size = textSize)

tb.cell(0, 1, "Total Trades", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulBlue), text_size = textSize)
tb.cell(1, 1, accountBurned ? "❌" : str.tostring(totalTrades) + icon,
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple : bgColorfulBlue),
text_size = textSize)

tb.cell(0, 2, "✅ Trades", text_color=color.white, bgcolor=(dsb_mode == "Simple"


? bgSimple : bgColorfulGreen), text_size = textSize)
tb.cell(1, 2, accountBurned ? "❌" : str.tostring(successfulTrades),
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple :
bgColorfulGreen), text_size = textSize)
tb.cell(0, 3, "❌ Trades", text_color=color.white, bgcolor=(dsb_mode == "Simple"
? bgSimple : bgColorfulRed), text_size = textSize)
tb.cell(1, 3, accountBurned ? "❌" : str.tostring(unsuccessfulTrades),
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple : bgColorfulRed),
text_size = textSize)

// tb.cell(0, 4, "All Profit (USD)", text_color=color.white, bgcolor=(dsb_mode


== "Simple" ? bgSimple : bgColorfulBlue), text_size = textSize)
// tb.cell(1, 4, str.tostring(totalProfitUSD, "#.##"), text_color=color.white,
bgcolor=(dsb_mode == "Simple" ? bgSimple : bgColorfulBlue), text_size = textSize)

tb.cell(0, 4, "Max 📉 (USD)", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulOrange), text_size = textSize)
tb.cell(1, 4, str.tostring(maxDrawdownPerTrade, "#.##"),
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple :
bgColorfulOrange), text_size = textSize)

tb.cell(0, 5, "Winrate (%)", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulGreen), text_size = textSize)
tb.cell(1, 5, str.tostring(winrate, "#.##"), text_color=color.white,
bgcolor=(dsb_mode == "Simple" ? bgSimple : bgColorfulGreen), text_size = textSize)

// tb.cell(0, 7, "Avg 📈 (USD)", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulBlue), text_size = textSize)
// tb.cell(1, 7, str.tostring(averageProfitUSD, "#.##"),
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple : bgColorfulBlue),
text_size = textSize)

tb.cell(0, 6, "Profit (USD)", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulPurple), text_size = textSize)
tb.cell(1, 6, accountBurned ? "❌" : str.tostring(currentProfitUSD, "#.##"),
text_color=currentProfitUSD < 0 ? color.red : color.white, bgcolor=(dsb_mode ==
"Simple" ? bgSimple : bgColorfulPurple), text_size = textSize)

tb.cell(0, 7, "Balance (USD)", text_color=color.white, bgcolor=(dsb_mode ==


"Simple" ? bgSimple : bgColorfulPurple), text_size = textSize)
tb.cell(1, 7, accountBurned ? "❌" : str.tostring(accountEquid, "#.##"),
text_color=color.white, bgcolor=(dsb_mode == "Simple" ? bgSimple :
bgColorfulPurple), text_size = textSize)

tb.cell(0, 8, entry + str.tostring(Price), text_color=color.white, bgcolor =


dsb_mode == "Simple" ? entry_s_color : entrycolor, text_size = textSize)
tb.cell(1, 8, timeFormatted, text_color=color.white, bgcolor = dsb_mode ==
"Simple" ? entry_s_color : entrycolor, text_size = textSize)

tb.cell(0, 9, Gs_240, text_color=color.white, bgcolor=color1, text_size =


textSize)
tb.cell(1, 9, str.tostring(k, "#.##"), text_color=color.white,
bgcolor=nphamAlgo_grad.grad_random(k), text_size = textSize)

random() =>

var color[] colors = array.new_color(11)

for i = 0 to 10

array.set(colors, i, color.new(color.rgb(math.random(0, 255),


math.random(0, 255), math.random(0, 255)), 0))

vert_widths = textSize == "normal" ? 0.5 : 0.25

vert_height = 1

tb.cell(2, i, bgcolor=array.get(colors, i), width = vert_widths, height =


vert_height)

volume_indi() =>

C_Up = #42bda8

C_Down = #c2185b

buy_vol = volume * (close - low) / (high - low)

sell_vol = volume - buy_vol

totalbuyPercentC_ = buy_vol / (buy_vol + sell_vol) * 100

vert_widths = textSize == "normal" ? 0.5 : 0.25

vert_height = 1

cellCount = 10 // 4 columns x 5 rows = 20 cells

filledCells = 0

for r = 10 to 0

if filledCells < cellCount * (totalbuyPercentC_ / 100)

tb.cell(2, r, text = "", bgcolor = C_Up, width = vert_widths, height =


vert_height)

else

tb.cell(2, r, text = "", bgcolor = C_Down, width = vert_widths, height


= vert_height)

filledCells := filledCells + 1

if fast_update

close_btc = request.security("BINANCE:BTCUSD.P","1", close)// ,


gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_eth = request.security("BINANCE:ETHUSDT","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_xrp = request.security("BINANCE:XRPUSDT","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_ltc = request.security("BINANCE:LTCUSDT","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_bnb = request.security("BINANCE:BNBUSDT","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)

close_gbpjpy = request.security("OANDA:GBPJPY","1", close)// ,


gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_eurjpy = request.security("OANDA:EURJPY","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_gbpaud = request.security("OANDA:GBPAUD","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_gbpnzd = request.security("OANDA:GBPNZD","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
close_euraud = request.security("OANDA:EURAUD","1", close)// ,
gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)

if bool(ta.change(close_btc)) or bool(ta.change(close_eth)) or
bool(ta.change(close_xrp)) or bool(ta.change(close_ltc)) or
bool(ta.change(close_bnb)) or
bool(ta.change(close_gbpjpy)) or bool(ta.change(close_eurjpy)) or
bool(ta.change(close_gbpaud)) or bool(ta.change(close_gbpnzd))

if showdsb

dashboard()

if showfun == "Random Colors"

random()

if showfun == "Volume Percent"

volume_indi()

if showdsb

dashboard()

if showfun == "Random Colors"

random()

if showfun == "Volume Percent"

volume_indi()

alert_messages = "Daily Summary:\n" +


"Total Trades: " + str.tostring(totalTrades) + "\n" +
"✅ Trades: " + str.tostring(successfulTrades) + "\n" +
"❌ Trades: " + str.tostring(unsuccessfulTrades) + "\n" +
"All Profit (USD): " + str.tostring(totalProfitUSD, "#.##") + "\n" +
"Max Drawdown (USD): " + str.tostring(maxDrawdownPerTrade, "#.##") + "\n"
+
"Winrate (%): " + str.tostring(winrate, "#.##") + "\n" +
"Avg Profit (USD): " + str.tostring(averageProfitUSD, "#.##") + "\n" +
"End Day Balance (USD): " + str.tostring(accountEquid, "#.##")

//if h == 3 and m == 55 and s == 00


if session.islastbar
alert(alert_messages, alert.freq_once_per_bar)
totalTrades := 0
successfulTrades := 0
unsuccessfulTrades := 0
totalProfitUSD := 0.0
maxDrawdownPerTrade := 0.0
totalDrawdown := 0.0
accountBurned := false
liquidity := initialLiquidity
//table.delete(backtestDisplay)

// tb.cell(0, 10, "Account Burned", text_color=color.white,


bgcolor=color.new(color.red, colorStrength), text_size = textSize)
// tb.cell(1, 10, accountBurned ? "Yes" : "No", text_color=color.white,
bgcolor=color.new(color.red, colorStrength), text_size = textSize)

predictedtext2 = nphamAlgo_Signal_Strength.signal_strength()

textt = not na(predictedtext2) ? str.tostring(predictedtext2) : "⚠️"

alert_message = "Last Trade Summary:\n" +


"Total Trades: " + str.tostring(totalTrades[1]) + "\n" +
"✅ Trades: " + str.tostring(successfulTrades[1]) + "\n" +
"❌ Trades: " + str.tostring(unsuccessfulTrades[1]) + "\n" +
"All Profit (USD): " + str.tostring(totalProfitUSD[1], "#.##") + "\n" +
"Max Drawdown (USD): " + str.tostring(maxDrawdownPerTrade, "#.##") + "\n"
+
"Winrate (%): " + str.tostring(winrate, "#.##") + "\n" +
"Profit (USD): " + str.tostring(currentProfitUSD[1], "#.##") + "\n" +
"Profit In Pips (Pips): " + str.tostring(pips[1]) + "\n" +
"Avg Profit (USD): " + str.tostring(averageProfitUSD, "#.##") + "\n" +
"Balance (USD): " + str.tostring(accountEquid, "#.##")

string last_signal = ""

label label_txt = na

if buySignal and (last_signal != 'buy' ? true : false)


if label_style == 'text bubble'
label_txt := label.new(buySignal ? bar_index : na, low, 'BUY ' + textt,
color = buy_label_color, style = label.style_label_up, textcolor =
label_text_color, size = label_size, tooltip = alert_message)
else if label_style == 'triangle'
label_txt := label.new(buySignal ? bar_index : na, low, 'BUY ' + textt,
yloc = yloc.belowbar, color = buy_label_color, style = label.style_triangleup,
textcolor = TRANSPARENT, size = label_size, tooltip = alert_message)
else if label_style == 'arrow'
label_txt := label.new(buySignal ? bar_index : na, low, 'BUY ' + textt,
yloc = yloc.belowbar, color = buy_label_color, style = label.style_arrowup,
textcolor = TRANSPARENT, size = label_size, tooltip = alert_message)
last_signal := 'buy'
if sellSignal and (last_signal != 'sell' ? true : false)
if label_style == 'text bubble'
label_txt := label.new(sellSignal ? bar_index : na, high, 'SELL ' + textt,
color = sell_label_color, style = label.style_label_down, textcolor =
label_text_color, size = label_size, tooltip = alert_message)
else if label_style == 'triangle'
label_txt := label.new(sellSignal ? bar_index : na, high, 'SELL ' + textt,
yloc = yloc.abovebar, color = sell_label_color, style = label.style_triangledown,
textcolor = TRANSPARENT, size = label_size, tooltip = alert_message)
else if label_style == 'arrow'
label_txt := label.new(sellSignal ? bar_index : na, high, 'SELL ' + textt,
yloc = yloc.abovebar, color = sell_label_color, style = label.style_arrowdown,
textcolor = TRANSPARENT, size = label_size, tooltip = alert_message)
last_signal := 'sell'

plotshape(bool(ta.change(time('D'))) ? h : na, style = shape.labelup, title = "New


Day", location = location.bottom, color = color.rgb(0, 225, 255), text = 'New Day',
size = size.auto, display = display.pane)

plotchar(bool(ta.change(maxDrawdownPerTrade)) ? maxDrawdownPerTrade : na, title =


"Max Drawdown", char = '📉', location = location.bottom, size = size.auto, color =
color.red)

// plotchar(bool(ta.change(buyMaxProfit or sellMaxProfit)) ? entry == '🟢' ?


buyMaxProfit : sellMaxProfit : na, char = '📈', location = location.bottom, size =
size.auto, color = color.green)

if buySignal
alert("nphamAlgo V3 Buy 🟢 Signals With Signal Strength Level " + textt + " And
Status " + Gs_240 + " At " + str.tostring(close) + ".", alert.freq_once_per_bar)
else if sellSignal
alert("nphamAlgo V3 Sell 🔴 Signals With Signal Strength Level " + textt + " And
Status " + Gs_240 + " At " + str.tostring(close) + ".", alert.freq_once_per_bar)

ath_price = request.security(syminfo.tickerid, "12M", ta.highest(high, 1),


gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)

ath_label = label.new(bar_index, ath_price, 'ATH: ' + str.tostring(ath_price),


color = color.green, style = label.style_label_left, textcolor = label_text_color,
size = size.normal, tooltip = alert_message)

label.delete(ath_label[1])

plot(ath_price, title = "ATH", color = color.green, display = display.pane)

You might also like