# API ChartStyles Community Components Community Indicators IndexDefinitions Knowledge Base Misc Optimizers Pending Deletion PosSizers Providers Standard Indicators TASC Traders Tips TASCIndicators Tutorial Videos Visualizers Quick Search
»

# DSS

### Syntax

```public DSS(Bars bars, int period1, int period2, int stochP, string description)
public static DSS Series(Bars bars, int period1, int period2, int stochP)
```

### Parameter Description

 period1 1st Exponential Moving Average period period2 2nd Exponential Moving Average period stochP Stochastic %K period

### Description

The Double Smoothed Stochastic indicator was created by William Blau. It applies Exponential Moving Averages (EMAs) of two different periods to a standard Stochastic %K, StochK. The components that construct the Stochastic Oscillator are first smoothed with the two EMAs. Then, the smoothed components are plugged into the standard Stochastic formula to calculate the indicator.

### Interpretation

DSS ranges from 0 to 100, like the standard Stochastic Oscillator. The same rules of interpretation that you use for Stochastics can be applied to DSS, although DSS offers a much smoother curve than the raw Stochastic.

### Calculation

DSS = ( C-L1 / H-L1 ) * 100

where,
HH = Highest High in Lookback period
LL = Lowest Low in Lookback period
C-L = Close minus LL
H-L = HH minus LL
C-L2 = EMA( C-L, period2 )
H-L2 = EMA( H-L, period2 )
C-L1 = EMA( C-L2, period1 )
H-L1 + EMA( H-L2, period1 )

### Example

```using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
// Buy when DSS turns up from an oversold level
DataSeries dss = DSS.Series( Bars, 10, 20, 5 );
ChartPane DSSPane = CreatePane( 50, true, true );
PlotSeries( DSSPane, dss, Color.Crimson, LineStyle.Solid, 2 );

// DSS is considered "unstable" due to the inner use of EMA
for(int bar = 60; bar < Bars.Count; bar++)
{
if (!IsLastPositionActive)
{
if( ( TurnUp( bar, dss ) ) & ( dss[bar-1] < 24 ) )
}
else
{
if( TurnDown( bar, dss ) )
SellAtMarket( bar+1, LastPosition, "DSS" );
}
}
}
}
}```