Indicator · Pine Script v5 · On the chart

CDC ActionZone V3 2020 + EMA

by msongkiet· code credited to piriya33

This indicator calculates trend direction and market zones using exponential moving average crossovers combined with a secondary baseline.

View on GitHub

GitHub stars16on the repository
Pine versionv5runs as is
Lines of code273
Settings16inputs
LicenceNone statedfile: MPL-2.0
Last update2 years ago31 Aug 2024

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

273 lines of Pine Script v5 from CDC_V3_EMA200.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

CDC_V3_EMA200.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © piriya33
// Added Labels and alert conditions and other quality of life feature
// Updated compatability with pine script v4
// Based on improvements from "Kitti-Playbook Action Zone V.4.2.0.3 for Stock Market"

//@version=5
indicator('CDC ActionZone V3 2020 + EMA', overlay=true, precision=6)
//****************************************************************************//
// CDC Action Zone is based on a simple EMA crossover 
// between [default] EMA12 and EMA26
// The zones are defined by the relative position of 
// price in relation to the two EMA lines
// Different zones can be use to activate / deactivate 
// other trading strategies
// The strategy can also be used on its own with 
// acceptable result, buy on the first green candle
// and sell on the first red candle
//****************************************************************************//
//****************************************************************************//
// Define User Input Variables

xsrc = input.source(title='Source Data', defval=close)
xprd1 = input.int(title='Fast EMA period', defval=12)
xprd2 = input.int(title='Slow EMA period', defval=26)
xsmooth = input.int(title='Smoothing period (1 = no smoothing)', defval=1)
fillSW = input.bool(title='Paint Bar Colors', defval=true)
fastSW = input.bool(title='Show fast moving average line', defval=true)
slowSW = input.bool(title='Show slow moving average line', defval=true)
labelSwitch = input.bool(title='Turn on assistive text', defval=true)
plotSigsw = input.bool(title='Plot Buy/Sell Signals? ', defval=true)
plotRibsw = input.bool(title='Plot Buy/Sell Ribbon', defval=false)
plotRibbonPos = input.string(title='Ribbon Position', options=['Top', 'Bottom'], defval='Top')

xfixtf = input.bool(title='** Use Fixed time frame Mode (advanced) **', defval=false)
xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D')

plotSig2sw = input.bool(title='Plot momentum based Buy/Sell Signals? ', defval=false)
plotSig2lv = input.int(title='Set signal threshold (higher = stricter)', defval=1, minval=0, maxval=1)

//****************************************************************************//
//Calculate Indicators

f_secureSecurity(_symbol, _res, _src) => request.security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on) // Using f_secureSecurity to avoid repainting

xPrice = ta.ema(xsrc, xsmooth)

 
FastMA = xfixtf ? 
 ta.ema(f_secureSecurity(syminfo.tickerid, xtf, ta.ema(xsrc, xprd1)), xsmooth) 
 :
 ta.ema(xPrice, xprd1)


SlowMA = xfixtf ?
 ta.ema(f_secureSecurity(syminfo.tickerid, xtf, ta.ema(xsrc, xprd2)), xsmooth)
 : 
 ta.ema(xPrice, xprd2)

Bull = FastMA > SlowMA
Bear = FastMA < SlowMA

//****************************************************************************//
// Define Color Zones

Green = Bull and xPrice > FastMA  // Buy
Blue = Bear and xPrice > FastMA and xPrice > SlowMA  //Pre Buy 2
LBlue = Bear and xPrice > FastMA and xPrice < SlowMA  //Pre Buy 1

Red = Bear and xPrice < FastMA  // Sell
Orange = Bull and xPrice < FastMA and xPrice < SlowMA  // Pre Sell 2
Yellow = Bull and xPrice < FastMA and xPrice > SlowMA  // Pre Sell 1

//****************************************************************************//
// Display color on chart


bColor = Green ? color.green :
 Blue ? color.blue : 
 LBlue ? color.aqua :
 Red ? color.red : 
 Orange ? color.orange : 
 Yellow ? color.yellow : 
 color.black
barcolor(color=fillSW ? bColor : na)

//****************************************************************************//
// Display MA lines

FastL = plot(fastSW ? FastMA : na, 'Fast EMA', color=color.new(color.red, 0), style = xfixtf ? plot.style_stepline : plot.style_line)
SlowL = plot(slowSW ? SlowMA : na, 'Slow EMA', color=color.new(color.blue, 0), style = xfixtf ? plot.style_stepline : plot.style_line)
fillcolor = Bull ? color.new(color.green,90) : Bear ? color.new(color.red,90) : color.new(color.black,90) // fillcolor = Bull ? color.green : Bear ? color.red : color.black
fill(FastL, SlowL, fillcolor) // fill(FastL, SlowL, fillcolor, transp=90)

//****************************************************************************//
// Define Buy and Sell condition
// This is only for thebasic usage of CDC Actionzone (EMA Crossover) 
// ie. Buy on first green bar and sell on first red bar

buycond = Green and Green[1] == 0
sellcond = Red and Red[1] == 0

bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)

buy = bearish[1] and buycond
sell = bullish[1] and sellcond

bColor_BullBear = bullish ? color.green : bearish ? color.red : color.black

//****************************************************************************//
// Plot Buy and Sell point on chart

plotshape(plotSigsw ? buy : na,
 style=shape.circle,
 title='Buy Signal', 
 location=location.belowbar, 
 color=color.new(color.green, 0))
plotshape(plotSigsw ? sell : na, 
 style=shape.circle, 
 title='Sell Signal', 
 location=location.abovebar, 
 color=color.new(color.red, 0))

// Display Buy/Sell Ribbon


plotshape(plotRibsw ? plotRibbonPos == 'Top' ? close : na : na, 
 style=shape.square, 
 title='Buy/Sell Ribbon', 
 location=location.top, 
 color=bColor_BullBear)

plotshape(plotRibsw ? plotRibbonPos == 'Bottom' ? close : na : na,
 style=shape.square, 
 title='Buy/Sell Ribbon', 
 location=location.bottom, 
 color=bColor_BullBear)


//****************************************************************************//
// Label

labelstyle = close > SlowMA ? label.style_label_down : label.style_label_up
labelyloc = close > SlowMA ? yloc.abovebar : yloc.belowbar
labeltcolor = buy ? color.black : 
 sell ? color.white :
 close > close[1] ? color.green : 
 color.red
labelbgcolor = buy ? color.green : sell ? color.red : color.silver
labeltext = buy ? 'BUY next bar\n' : sell ? 'SELL next bar\n' : ' '
trendText = bullish ? 'bullish' : bearish ? 'bearish' : 'sideways'


l1 = label.new(bar_index, na,
 text=labeltext + syminfo.ticker + ' ' + str.tostring(close) + ' ' + syminfo.currency + '\n currently in a ' + trendText + ' trend \n', 
 color=labelbgcolor, 
 textcolor=labeltcolor, 
 yloc=labelyloc, 
 style=labelstyle)

label.delete(labelSwitch ? l1[1] : l1)

// Momentum Signal using StochRSI

// Adds a momentum based signal following trends to the script
// Default is hidden, only use with caution
// Parameters for STOCH RSI is hard-coded to avoid cluttering the input screen further
// If you need to change anything, make a copy of the code and change it.
// Inputs are commented out, to enable them comment out the hard coded variables first!

// fixed inputs //

smoothK = 3
smoothD = 3
RSIlen = 14
STOlen = 14
SRsrc = close
OSlevel = 30
OBlevel = 70

// User inputs // // COMMENT ABOVE VARIABLES FIRST!! 

// smoothK = input(3,"StochRSI smooth K",type=input.integer,minval=1)
// smoothD = input(3,"StochRSI smooth D",type=input.integer,minval=1)
// RSIlen = input(14,"RSI length",type=input.integer,minval=1)
// STOlen = input(14,"Stochastic length",type=input.integer,minval=1)
// SRsrc = input(close,"Source for StochasticRSI",type=input.source)
// OSlevel = input(30,"Oversold Threshold",type=input.float,minval=0.00)
// OBlevel = input(70,"Oversold Threshold",type=input.float,minval=0.00)

// calculations //
rsi1 = ta.rsi(SRsrc, RSIlen)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, STOlen), smoothK)
d = ta.sma(k, smoothD)

// storsiBuySig =  if bullish
//     if (d < OSlevel and crossover(k,d))
//         3
//     else if crossover(k,OSlevel)
//         2
//     else if d > OSlevel and crossover(k,d)
//         1
//     else
//         0
// else
//     0

crossover_1 = ta.crossover(k, d)
crossover_2 = ta.crossover(k, d)
iff_1 = d > OSlevel and crossover_2 ?
 1 : 0
iff_2 = d < OSlevel and crossover_1 ?
 2 : iff_1
storsiBuySig = bullish ? iff_2 : 0

crossunder_1 = ta.crossunder(k, d)
crossunder_2 = ta.crossunder(k, d)
iff_3 = d < OBlevel and crossunder_2 ? 
 1 : 0
iff_4 = d > OBlevel and crossunder_1 ? 
 2 : iff_3
storsiSellSig = bearish ? iff_4 : 0

plotshape(plotSig2sw ? storsiBuySig > plotSig2lv ? storsiBuySig : na : na, 
 'Buy more signals', style=shape.triangleup, 
  location=location.belowbar, color=color.new(color.teal, 0))
plotshape(plotSig2sw ? storsiSellSig > plotSig2lv ? storsiSellSig : na : na,
 'Sell more signals', style=shape.triangledown, 
  location=location.abovebar, color=color.new(color.orange, 0))


//****************************************************************************//
// Alert conditions

alertcondition(buy, 
 title='*Buy Alert', 
 message='Buy {{exchange}}:{{ticker}}')

alertcondition(sell,
 title='*Sell Alert',
 message='Sell {{exchange}}:{{ticker}}')

alertcondition(bullish,
 title='is Bullish')

alertcondition(bearish,
 title='is Bearish')

alertcondition(Green,
 title='is Green')

alertcondition(Blue, 
 title='is Blue (Strong Rally)')

alertcondition(LBlue,
 title='is Light Blue (Rally)')

alertcondition(Red,
 title='is Red')

alertcondition(Orange, 
 title='is Orange (Strong Dip)')

alertcondition(Yellow, 
 title='is Yellow (Dip)')


//****************************************************************************//

emaPeriod = input.int(defval = 200,title = "Slow EMA")
slowEma = ta.ema(close,length = emaPeriod)
plot(slowEma,linewidth = 2,color = color.blue,style = plot.style_line)

Overview

CDC ActionZone V3 2020 + EMA identifies various bull and bear conditions based on the relative position of price and the fast and slow averages, coloring price bars or plotting lines directly on the price chart. Main settings allow customization of fast and slow periods, smoothing, fixed time frame selection, and visual display options like bar coloring and buy or sell signals.

Details

Published by

msongkiet on GitHub

Code credit

piriya33, as written in the script's header

Type

Indicator, Pine Script v5

Draws

On the price chart

Category

Trend, Moving averages

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Source Datasourceclosexsrc
Fast EMA periodint12xprd1
Slow EMA periodint26xprd2
Smoothing period (1 = no smoothing)int1xsmooth
Paint Bar ColorsbooltruefillSW
Show fast moving average linebooltruefastSW
Show slow moving average linebooltrueslowSW
Turn on assistive textbooltruelabelSwitch
Plot Buy/Sell Signals? booltrueplotSigsw
Plot Buy/Sell RibbonboolfalseplotRibsw
Ribbon PositionstringTopplotRibbonPos
** Use Fixed time frame Mode (advanced) **boolfalsexfixtf
Show all 16 settings
SettingTypeDefaultVariable
** Fix chart to which time frame ? **)timeframeDxtf
Plot momentum based Buy/Sell Signals? boolfalseplotSig2sw
Set signal threshold (higher = stricter)int1plotSig2lv
Slow EMAint200emaPeriod
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

948 stars

The Adaptive Laguerre Filter calculates a smoothed, dynamically adjusted trendline plotted directly on the main price chart. It dynamically adjusts its damping factor (alpha) based on recent price range variations and median percentile calculations over a spec

Indicator v4 TrendMoving averages
Updated 10 days ago · GPL-3.0 GitHub repository of Adaptive Laguerre Filter
330 stars

This script plots three moving averages on the price chart: a fast EMA or SMA with 10 periods, a slow EMA or SMA with 20 periods, and a trend EMA or SMA with 100 periods. It signals trend changes by drawing a white cross when the fast moving average crosses ab

Indicator v4 TrendMoving averages
Updated 2 months ago · None stated GitHub repository of 3 EMA/SMA + Cross [Alorse]
318 stars

This indicator plots four customizable moving averages directly on the main price chart using default lengths of 3, 8, 21, and 50 periods. It fills the space between adjacent averages in green or maroon depending on trend alignment. Additionally, it computes B

Indicator v5 Moving averagesTrend
Updated 2 months ago · MIT GitHub repository of Multiple Moving Averages

NVDA Trend Ribbon

by longsurf-ai
277 stars

This indicator plots three exponential moving averages and ATR volatility envelopes on the price chart. It compares the fast and slow EMAs to shade a trend ribbon and marks confirmed upward and downward crossovers with triangle labels. Settings change the thre

Indicator v6 TrendMoving averages
Updated yesterday · MIT GitHub repository of NVDA Trend Ribbon
257 stars

Donald SPX - Options Trading is an overlay indicator designed for intraday SPX analysis. It plots a 200-period Weighted Moving Average (WMA) on the price chart while evaluating multi-timeframe market structure across Daily, 15-minute, 5-minute, and 2-minute ba

Indicator v5 Moving averagesTrend Repaints
Updated 6 weeks ago · None stated GitHub repository of Donald SPX - Options Trading

60K均線

by TaichiS
219 stars

This multi-timeframe indicator calculates and plots 20-period and 60-period simple moving averages from the 60-minute timeframe directly onto the price chart. The 20-period average displays as a green line, while the 60-period average appears in blue. It serve

Indicator v4 Moving averagesTrend Repaints
Updated 5 years ago · None stated GitHub repository of 60K均線

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers