Indicator example
Triangle Moving Average
Readonly source from tests/EasyLanguage/David_EasyLanguage, generated Pine Script v6, and an expiry-free example EX5.
Original EasyLanguage
{ Search Tag: WA-Mov Avg Triangular }inputs:Price( Close ) [DisplayName = "Price",ToolTip = "Enter an EasyLanguage expression to use in the triangular moving average calculation."],Length( 9 ) [DisplayName = "Length",ToolTip = "Enter the number of bars used in the calculation of the triangular moving average."],Displace( 0 ) [DisplayName = "Displace",ToolTip = "Displacement. Enter the number of bars by which plots will be displaced. Displacement may be positive (left) or negative (right)."];variables:AvgTriangular( 0 );AvgTriangular = TriAverage( Price, Length );if Displace >= 0 or CurrentBar > AbsValue( Displace ) thenbeginPlot1[Displace]( AvgTriangular, !( "AvgTri" ) );{ alert criteria }if AlertEnabled and Displace <= 0 thenbeginif Price > AvgTriangular and AvgTriangular > AvgTriangular[1]and AvgTriangular[1] <= AvgTriangular[2] thenbeginAlert( !( "Indicator turning up" ) ) ;endelse if Price < AvgTriangularand AvgTriangular < AvgTriangular[1]and AvgTriangular[1] >= AvgTriangular[2] thenbeginAlert( !( "Indicator turning down" ) );end;end;end;{ ** Copyright © TradeStation Technologies, Inc. All Rights Reserved **** TradeStation reserves the right to modify or overwrite this analysis techniquewith each release. ** }
Generated Pine Script v6
//@version=6indicator("MovAvgTriangleIndicator", overlay=true)// dependencies:__el_triangular_average(float source, int length) =>int firstLength = int(math.ceil((length + 1) / 2.0))int secondLength = int(math.floor((length + 1) / 2.0))ta.sma(ta.sma(source, firstLength), secondLength)price = input.source(close, "price")length = input.float(9.0, "length")displace = input.float(0.0, "displace")var float avgtriangular = 0float __el_plot1 = nacolor __el_plot1_color = color.blue__el_call1 = __el_triangular_average(price, int(length))if bar_index >= 8avgtriangular := __el_call1if displace >= 0 or bar_index + 1 > math.abs(displace)__el_plot1 := avgtriangularif true and displace <= 0if price > avgtriangular and avgtriangular > avgtriangular[1] and avgtriangular[1] <= avgtriangular[2]alert("Indicator turning up", alert.freq_once_per_bar)elseif price < avgtriangular and avgtriangular < avgtriangular[1] and avgtriangular[1] >= avgtriangular[2]alert("Indicator turning down", alert.freq_once_per_bar)plot(__el_plot1, title="AvgTri", color=__el_plot1_color, offset=int(displace))
Compiled MetaTrader 5 example
The EX5 uses the original script filename stem and has no PineAnywhere expiration guard.