﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>RightEdge Forums / Trading / Technical Indicators  / Building Custom Indicator / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>RightEdge Forums</description><link>http://www.rightedgesystems.com/forums/</link><webMaster>rightedge@yyesoftware.com</webMaster><lastBuildDate>Wed, 08 Feb 2012 15:37:36 GMT</lastBuildDate><ttl>20</ttl><item><title>Building Custom Indicator</title><link>http://www.rightedgesystems.com/forums/Topic9739-10-1.aspx</link><description>I'd started building some code for a custom indicator but ran  into problems as a userseries cannot be used as input to an indicator.&lt;br&gt;Here's what I had so far but where do I go from here?  Appreciate any help..&lt;br&gt;&lt;br&gt;Public Class MySymbolScript&lt;br&gt;	Inherits MySymbolScriptBase&lt;br&gt;	&lt;br&gt;	&lt;br&gt;	Private Constant100 As ConstantSeries&lt;br&gt;	Private Constant2 As ConstantSeries&lt;br&gt;	Private Constant1 As ConstantSeries&lt;br&gt;	&lt;br&gt;	Private TH As UserSeries&lt;br&gt;	Private TL As UserSeries&lt;br&gt;	Private TR As SubtractSeries&lt;br&gt;		&lt;br&gt;	Private PlusDM As UserSeries&lt;br&gt;	Private PlusDIDen As WildersSmoothing&lt;br&gt;	Private PlusDINum As WildersSmoothing&lt;br&gt;	Private PlusDIDiv As DivideSeries&lt;br&gt;	Private PlusDI As MultiplySeries&lt;br&gt;	Private MinusDM As UserSeries&lt;br&gt;	Private MinusDIDen As WildersSmoothing&lt;br&gt;	Private MinusDINum As WildersSmoothing&lt;br&gt;	Private MinusDIDiv As DivideSeries&lt;br&gt;	Private MinusDI As MultiplySeries&lt;br&gt;	&lt;br&gt;	Private DIDifInput As SubtractSeries&lt;br&gt;	Private DIDif As AbsoluteValue&lt;br&gt;	Private DISum As AddSeries&lt;br&gt;	&lt;br&gt;	Private ADXFinalVarInp As DivideSeries&lt;br&gt;	Private ADXFinalVar As WildersSmoothing&lt;br&gt;	Private ADXFinal As MultiplySeries &lt;br&gt;	Private ADXFinalShift As Shift&lt;br&gt;	Private ADXRAdd As AddSeries&lt;br&gt;	Private ADXRCustom As DivideSeries&lt;br&gt;	Private _ADX As UserSeries&lt;br&gt;	&lt;br&gt;	Private EMAIndex As UserSeries&lt;br&gt;	Private HighVAl As Highest&lt;br&gt;	Private LowVAl As Lowest&lt;br&gt;	Private Diff As SubtractSeries&lt;br&gt;	Private MyConst As UserSeries&lt;br&gt;	Private VarMASeriesSub As SubtractSeries&lt;br&gt;	Private VarMASeriesMult1 As MultiplySeries&lt;br&gt;	Private VarMASeriesMult2 As MultiplySeries&lt;br&gt;	Private VarMASeries As AddSeries&lt;br&gt;	Private SMASeries As SMA&lt;br&gt;	Private VarMA As UserSeries&lt;br&gt;	Private VarMAShift As Shift&lt;br&gt;		&lt;br&gt;	'Private ADX8 As ADX	&lt;br&gt;	'Private baseEMA4 As VariableMA&lt;br&gt;	&lt;br&gt;	&lt;br&gt;	&lt;br&gt;	Public Overloads Overrides Sub Startup()&lt;br&gt;		' Perform initialization here&lt;br&gt;		Dim ADXPr As Integer = 8&lt;br&gt;		&lt;br&gt;		TH = New UserSeries()&lt;br&gt;		TL = New UserSeries()&lt;br&gt;		TR = New SubtractSeries&lt;br&gt;		TR.SetInputs(TH,TL)&lt;br&gt;		&lt;br&gt;		PlusDM = New UserSeries&lt;br&gt;		MinusDM = New UserSeries&lt;br&gt;		&lt;br&gt;		Constant100 = New ConstantSeries(100)&lt;br&gt;		Constant2 = New ConstantSeries(2)&lt;br&gt;		Constant1 = New ConstantSeries(1)&lt;br&gt;		&lt;br&gt;		PlusDIDen = New WildersSmoothing(ADXPr,Tr)&lt;br&gt;		PlusDINum = New WildersSmoothing(ADXPr,PlusDM)&lt;br&gt;		PlusDIDiv = New DivideSeries&lt;br&gt;		PlusDIDiv.SetInputs(PlusDINum,PlusDIDen)&lt;br&gt;		PlusDI = New MultiplySeries&lt;br&gt;		PlusDI.SetInputs(Constant100,PlusDIDiv)&lt;br&gt;		&lt;br&gt;		MinusDIDen = New WildersSmoothing(ADXPr,Tr)&lt;br&gt;		MinusDINum = New WildersSmoothing(ADXPr,MinusDM)&lt;br&gt;		MinusDIDiv = New DivideSeries&lt;br&gt;		MinusDIDiv.SetInputs(MinusDINum,MinusDIDen)&lt;br&gt;		MinusDI = New MultiplySeries&lt;br&gt;		MinusDI.SetInputs(Constant100,MinusDIDiv)&lt;br&gt;		&lt;br&gt;		DIDifInput = New SubtractSeries&lt;br&gt;		DIDifInput.SetInputs(PlusDI,MinusDI)&lt;br&gt;		DIDif = New AbsoluteValue&lt;br&gt;		DIDif.SetInputs(DIDifInput)&lt;br&gt;		DISum = New AddSeries&lt;br&gt;		DISum.SetInputs(PlusDI,MinusDI)&lt;br&gt;		&lt;br&gt;		ADXFinalVarInp = New DivideSeries&lt;br&gt;		ADXFinalVarInp.SetInputs(DIDif,DISum)&lt;br&gt;		ADXFInalVar = New WildersSmoothing(ADXPr,ADXFinalVarInp)&lt;br&gt;		ADXFinal = New MultiplySeries&lt;br&gt;		ADXFinalShift = New Shift(7)&lt;br&gt;		ADXFinal.SetInputs(Constant100,ADXFinalVar)&lt;br&gt;		&lt;br&gt;		ADXRAdd = New AddSeries&lt;br&gt;		ADXRAdd.SetInputs(ADXFinal,ADXFinalShift)&lt;br&gt;		ADXRCustom = New DivideSeries&lt;br&gt;		ADXRCustom.SetInputs(ADXRAdd,Constant2)&lt;br&gt;		_ADX = New UserSeries&lt;br&gt;		&lt;br&gt;		EMAIndex = New UserSeries&lt;br&gt;	    HighVal = New Highest(ADXPr,_ADX)&lt;br&gt;	    LowVal = New Lowest(ADXPr,_ADX)&lt;br&gt;	    Diff = New SubtractSeries&lt;br&gt;		Diff.SetInputs(HighVal,LowVal)&lt;br&gt;	    MyConst = New UserSeries&lt;br&gt;		&lt;br&gt;		VarMASeriesSub = New SubtractSeries&lt;br&gt;		VarMASeriesSub.SetInputs(Constant1,MyConst)&lt;br&gt;		VarMASeriesMult1 = New MultiplySeries&lt;br&gt;		VarMASeriesMult1.SetInputs(VarMASeriesSub,VarMAShift)&lt;br&gt;		VarMASeriesMult2 = New MultiplySeries&lt;br&gt;		VarMASeriesMult2.SetInputs(MyConst,Close)&lt;br&gt;	    VarMASeries = New AddSeries&lt;br&gt;		VarMASeries.SetInputs(VarMASeriesMult1,VarMASeriesMult2)&lt;br&gt;		SMASeries = New SMA(2,VarMASeries)&lt;br&gt;		VarMA = New UserSeries&lt;br&gt;		VarMAShift = New Shift(1)&lt;br&gt;&lt;br&gt;		VarMA.ChartSettings.Color = Color.Black&lt;br&gt;		VarMA.ChartSettings.LineSize = 2&lt;br&gt;&lt;br&gt;&lt;br&gt;	End Sub&lt;br&gt;&lt;br&gt;	Public Overloads Overrides Sub NewBar()&lt;br&gt;		' Put your trading code here &lt;br&gt;		Dim ADXType As Integer = 2    '2 is EMA, 0 is Simple MA&lt;br&gt;		Dim VarMAPr As Integer = 4&lt;br&gt;		Dim ADXPr As Integer = 8&lt;br&gt;&lt;br&gt;		&lt;br&gt;		'Build UserSeries here&lt;br&gt;		TH = IIf(Close.LookBack(1) &gt; High.Current,Close.LookBack(1),High.Current)&lt;br&gt;		TL = IIf(Close.LookBack(1) &lt; Low.Current,Close.LookBack(1),Low.Current)&lt;br&gt;		&lt;br&gt;		PlusDM = IIf(High.Current &gt; High.LookBack(1) And low.Current &gt;= low.LookBack(1),high.Current-high.LookBack(1), _&lt;br&gt;		             IIf(High.Current &gt; High.LookBack(1) And low.Current &lt; low.LookBack(1) And high.Current - high.LookBack(1) &gt; low.LookBack(1) - low.Current,high.Current-high.LookBack(1),0))&lt;br&gt;					&lt;br&gt;        MinusDM = IIf(Low.Current &lt; Low.LookBack(1) And High.Current &lt;= High.LookBack(1),Low.LookBack(1) - Low.Current, _&lt;br&gt;		             IIf(high.Current &gt; high.LookBack(1) And low.Current &lt; low.LookBack(1) And high.Current - high.LookBack(1) &lt; low.LookBack(1) - low.Current,Low.LookBack(1) - Low.Current,0))					&lt;br&gt;					&lt;br&gt;		'ADXRCustom = (ADXFinal.Current + ADXFinal.LookBack(7))/2&lt;br&gt;		_ADX = IIf(ADXType = 0,ADXFinal.Current,ADXRCustom.Current)	&lt;br&gt;		&lt;br&gt;		EMAIndex = IIf(VarMAPr &gt; 0,(2/(1+VarMAPr)),0.2)&lt;br&gt;		MyConst = IIf(Diff.Current &gt; 0,(_ADX.Current - LowVal.Current)/Diff.Current,EMAIndex.Current)&lt;br&gt;		MyConst = IIf(MyConst.Current &gt; EMAIndex.Current,EMAIndex.Current,MyConst.Current)&lt;br&gt;		'VarMASeries = ((1-MyConst.Current) * VarMA.LookBack(1)) + (MyConst.Current * Close.Current)&lt;br&gt;		VarMA = IIf(Bars.Count &lt; (ADXPr + (ADXPr*1.5)),Close.Current,SMASeries.Current)&lt;br&gt;					&lt;br&gt;				&lt;br&gt;&lt;br&gt;&lt;br&gt;	End Sub</description><pubDate>Mon, 19 Oct 2009 06:11:04 GMT</pubDate><dc:creator>blousetrader</dc:creator></item></channel></rss>
