DSS (double smoothed stochastic)

If you need an Indicator or Signal developed or translated from other language, please post all Indicator development REQUESTS to this section here.

Moderator: admin

DSS (double smoothed stochastic)

Postby jefftrader » Wed Aug 18, 2010 3:07 am

Could this be converted to lua? Here is the mt4 code followed by the code from eSignal:
(if this has already been done please provide a link).

thanks for all your support.

JeffTrader


Here is the code:

/********************** Meta Trader DSS *********************/

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 3
#property indicator_color1 OrangeRed
#property indicator_width1 3
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Red
#property indicator_width3 2
#property indicator_level1 20
#property indicator_level2 80


extern int EMA_period=8;
extern int Stochastic_period=13;


double DssBuffer[];
double MitBuffer[];
double DssBuffer_UP[];
double DssBuffer_DW[];


double smooth_coefficient;


int init()
{
IndicatorBuffers(4);
SetIndexBuffer(0,DssBuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(1,DssBuffer_UP);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexBuffer(2,DssBuffer_DW);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,159);

SetIndexBuffer(3,MitBuffer);

SetIndexEmptyValue(0, 0.0);
SetIndexLabel(0, "DSS");
SetIndexEmptyValue(1, 0.0);
SetIndexLabel(1, "DSS Up");
SetIndexEmptyValue(2, 0.0);
SetIndexLabel(2, "DSS Down");

IndicatorShortName ("DSS("+EMA_period+","+Stochastic_period+")");

smooth_coefficient = 2.0 / (1.0 + EMA_period);
return(0);
}


int start()
{
int i, limit, counted_bars=IndicatorCounted(), Bar_OK;
if (counted_bars == 0) limit = Bars - Stochastic_period;
if (counted_bars > 0) limit = Bars - counted_bars;

double HighRange, LowRange;
double delta, MIT;
for (i = limit; i >= 0; i--)
{
HighRange = High[iHighest(NULL,0,MODE_HIGH,Stochastic_period,i)];
LowRange = Low[iLowest(NULL,0,MODE_LOW,Stochastic_period,i)];
delta = Close[i] - LowRange;
MIT = delta/(HighRange - LowRange)*100.0;
MitBuffer[i] = smooth_coefficient * (MIT - MitBuffer[i+1]) + MitBuffer[i+1];
}

double DSS;
for (i = limit; i >= 0; i--)
{
HighRange = MitBuffer[ArrayMaximum(MitBuffer, Stochastic_period, i)];
LowRange = MitBuffer[ArrayMinimum(MitBuffer, Stochastic_period, i)];
delta = MitBuffer[i] - LowRange;
DSS = delta/(HighRange - LowRange)*100.0;
DssBuffer[i] = smooth_coefficient * (DSS - DssBuffer[i+1]) + DssBuffer[i+1];
}

for (i = limit; i >= 0; i--)
{
//DssBuffer_UP[i]=EMPTY_VALUE;
//DssBuffer_DW[i]=EMPTY_VALUE;
Bar_OK=0;

if(DssBuffer[i]>DssBuffer[i+1])
{
DssBuffer_UP[i]=DssBuffer[i];
Bar_OK=1;
DssBuffer_DW[i] = 0.0;
}

if(DssBuffer[i]<DssBuffer[i+1])
{
DssBuffer_DW[i]=DssBuffer[i];
Bar_OK=1;
DssBuffer_UP[i] = 0.0;
}

if(Bar_OK==0)
{
DssBuffer_UP[i]=DssBuffer_UP[i+1];
DssBuffer_DW[i]=DssBuffer_DW[i+1];
}
}

return(0);
}

/********************* End Meta Trader DSS **********************/





/********************* Esignal version of DSS Bressert's Double Smoothed Stochastic ***********/
function preMain()
{
setStudyTitle("DSS Bressert");
setCursorLabelName("DSS", 0);
setCursorLabelName("Trigger", 1);
setCursorLabelName("Overbought", 2);
setCursorLabelName("Oversold", 3);
setDefaultBarFgColor(Color.blue, 0);
setDefaultBarFgColor(Color.red, 1);
setDefaultBarFgColor(Color.grey, 2);
setDefaultBarFgColor(Color.grey, 3);
}

var EMA_1 = 0;
var EMA1_1 = 0;
var EMA2_1 = 0;
vAA = new Array();

function main(pds,slw,triggerLen,overbought,oversold,emalen){
if (pds == null)
pds = 10;
if (slw == null)
slw = 3;
if (triggerLen == null)
triggerLen = 5;
if (overbought == null)
overbought = 80;
if (oversold == null)
oversold = 20;
if (emalen == null)
emalen = 9;
var vHigh = getValue("High",0,-pds);
var vLow = getValue("Low",0,-pds);
var dClose = getValue("Close");
var K = 2 / (emalen + 1);
var K2 = 2 / (triggerLen + 1);
var aa = 0;
var dss = 0;
var High = 0;
var Low = getValue("Low");
var aHigh = 0;
var aLow = 10000000;
var EMA1 = 0;
var EMA = 0;

for (i = 0; i < pds; i++){
if (High < vHigh[i])
High = vHigh[i];
if (Low > vLow[i])
Low = vLow[i];
}
if((High - Low) != 0)
EMA = K * ( (dClose - Low) / (High - Low) ) + (1 - K) * EMA_1;
else
EMA = EMA_1;
if (getBarState() == BARSTATE_NEWBAR)
EMA_1 = EMA;
aa = EMA * 100;
for(i = pds - 1; i > 0; i--)
vAA[i] = vAA[i - 1];
vAA[0] = aa;
for (i = 0; i < pds; i++){
if (aHigh < vAA[i])
aHigh = vAA[i];
if (aLow > vAA[i])
aLow = vAA[i];
}
if (aHigh - aLow != 0)
EMA1 = K * ( (aa - aLow) / (aHigh - aLow) ) + (1 - K) * EMA1_1;
else
EMA1 = EMA1_1;
if (getBarState() == BARSTATE_NEWBAR)
EMA1_1 = EMA1;
dss = EMA1 * 100;
var EMA2 = K2 * dss + (1 - K) * EMA2_1;
if (getBarState() == BARSTATE_NEWBAR)
EMA2_1 = EMA2;
return new Array(dss,EMA2,overbought,oversold);
}
/*******************************************************************/
jefftrader
 
Posts: 28
Joined: Tue Jul 13, 2010 4:13 pm



Re: DSS (double smoothed stochastic)

Postby jefftrader » Wed Aug 18, 2010 4:44 pm

thanks so much for your quick support.

jefftrader
jefftrader
 
Posts: 28
Joined: Tue Jul 13, 2010 4:13 pm


Return to Indicator and Signal Requests

Who is online

Users browsing this forum: No registered users and 25 guests