neophyte321
Guest
here's a routine I coded awhile back ... may be some use to fellow data junkies ...
public Period getPeriod(String symbol,int tdays, MarketDay[] tradedays, Period prevPeriod){
Period period = new Period(symbol,tdays,prevPeriod);
float prevmax = 0;
float prevmin = 0;
float prevclose = 0;
float prevopen = 0;
long prevvol = 0;
float prevrs = 0;
float prevrsi = 0;
float prevrsigain = 0;
float prevrsiloss = 0;
float prevendvol = 0;
period.DX = 0;
period.ADX = 0;
period.symbol = symbol;
if (prevPeriod.Exists){
prevmax = prevPeriod.startmax;
prevmin = prevPeriod.startmin;
prevclose = prevPeriod.startclose;
prevopen = prevPeriod.startopen;
prevvol = prevPeriod.startvol;
prevrs = prevPeriod.RS;
prevrsi = prevPeriod.RSI;
prevrsigain = prevPeriod.RSIGAIN;
prevrsiloss = prevPeriod.RSILOSS;
}
try{
int up = 0;
int down = 0;
float vols = 0;
float pvols = 0;
float posDI = 0;
float negDI = 0;
float posSDI = 0;
float negSDI = 0;
float sma = 0;
float ema = 0;
float recs = 0;
float momntm = 0;
float loss = 0;
float gain = 0;
float days = tdays;
float TR = 0;
float posDM = 0;
float negDM = 0;
float curmax = 0;
float curmin = 0;
float curclose = 0;
float curopen = 0;
String curdate;
int curvol = 0;
float accm = 0;
float[] cl = new float[tdays];
int dy = 0;
float sumtypicals = 0;
float[] typicals = new float[tdays];
float sATR = 0;
period.ATR = 0 ;
period.SWA = 0;
period.SMA = 0;
period.EMA = 0;
int hiday = 0;
int loday = 0;
int newhghs = 0;
int newlws = 0;
int gns = 0;
int lss = 0;
int dnm = 0;
for (int i = 1; i<tdays+1; i++){
dnm += i;
}
float pbpp = 0;
float nbpp = 0;
int h,l;
double X = 0;
for (int i = 0; i<tdays; i++){
posDM = 0;
negDM = 0;
curdate = tradedays.qdate;
curopen = tradedays.open;
curclose = tradedays.close;
curmax = tradedays.maxprice;
curmin = tradedays.minprice;
curvol = tradedays.volume;
if ((period.minprice==0) || (period.minprice>curmin)){
period.minprice = curmin;
h = i+1;
}
if (period.maxprice<curmax){
period.maxprice = curmax;
l = i+1;
}
if (i==0){
period.sdate = curdate;
period.startdate = sdf.parse(curdate);
period.startopen = curopen;
period.startclose = curclose;
period.startmax = curmax;
period.startmin = curmin;
period.startvol = curvol;
}
if (i==tdays-1){
period.edate = curdate;
period.enddate = sdf.parse(curdate);
period.endopen = curopen;
period.endclose = curclose;
period.endmax = curmax;
period.endmin = curmin;
period.endvol = curvol;
}
period.volume += curvol;
if (prevPeriod.Exists){
//SET BPP ================================
if (i>0){
if ((curclose > prevclose)){
period.PBPP += (float)(i+1)/dnm*100;
}else{
period.NBPP += (float)(i+1)/dnm*100;
}
}else{
if ((curclose > prevPeriod.startclose)){
period.PBPP += (float)(i+1)/dnm*100;
}else{
period.NBPP += (float)(i+1)/dnm*100;
}
}
//SET DX===========================
if (curmax>prevmax){
posDM = (curmax - prevmax);
}
if (curmin<prevmin){
negDM = (prevmin - curmin);
}
if (posDM>negDM){
negDM = 0;
}else if (posDM < negDM){
posDM = 0;
}else{
posDM = negDM = 0;
}
//==================================
//SET ATR===========================
float a = Math.abs(curmin - prevclose);
float b = Math.abs(curmax - prevclose);
float c = Math.abs(curmax - curmin);
float d = 0;
if (a>b){
if (a>c){d = a;
}else{d = c;}
}else{
if (b>c){d = b;
}else{d = c;}
}
TR = d;
sATR +=TR;
//==================================
//SET DX============================
if (TR != 0){
posSDI += posDM;
negSDI += negDM;
}
//==================================
//SET RSI===========================
if (curclose>prevclose){
gain += (curclose-prevclose);
}else{
loss += (prevclose-curclose);
}
//===================================
period.velocity += curclose - prevclose;
//SET ACCUMULATION===================
if (curmax != curmin){
period.accumulation += Math.abs(curvol * ((curclose - curmin) - (curmax - curclose))/(curmax-curmin));
}
//===================================
//SET CCI============================
cl[dy] = curclose;
typicals[dy] = (curmax+curmin+curclose)/3;
sumtypicals += typicals[dy];
dy++;
//====================================
//SET HVA============================
X += Math.log((double)(curclose/prevclose));
//===============================
}
//SET SMA, WMA==========================
sma += curclose;
vols += curvol;
pvols += ((Math.abs(curclose-curopen)/2)+curopen) * curvol;
//set prev as cur
prevmax = curmax;
prevmin = curmin;
prevclose = curclose;
prevopen = curopen;
prevvol = curvol;
}
// end loop through period Quotes=====================
period.dvolume = period.volume/tdays;
//SET AROONUP=========================
//ARNUP = (float)h/(tdays*100);
//====================================
//SET AROONDWN========================
//ARNDWN = (float)l/(tdays*100);
//====================================
//ARNOS = ARNUP - ARNDWN;
//====================================
// set stochastics ===================================
if (period.maxprice!=period.minprice){
period.stochk = 100 * (period.endclose - period.minprice) / (period.maxprice - period.minprice);
}
if (!prevPeriod.Exists){
period.stochs[0] =period.stochk;
}
int sint = 3;
for (int i = sint-1; i>0; i--){
period.stochs = prevPeriod.stochs[i-1];
}
period.stochs[0] = period.stochk;
float sd = 0;
boolean b = true;
for (int j=0; j<sint; j++){
if (period.stochs[j] == 0){
b = false;
}
sd += period.stochs[j];
}
if (b){
period.stochd = sd / sint;
}
//====================================================
if (period.endclose>period.startclose){
period.uptrend = true;
}else{
period.uptrend = false;
}
if (period.startclose!=0){
period.momentum = (period.endclose/period.startclose) * 100;
}
//SET SWA=============================
if (vols!=0){
period.SWA = pvols / vols;
}else{
period.SWA = 0;
}
//====================================
//SET SMA=============================
period.SMA = sma / days;
//====================================
if (!prevPeriod.Exists){
//SET EMA as SMA for first period
period.EMA = period.SMA;
}
public Period getPeriod(String symbol,int tdays, MarketDay[] tradedays, Period prevPeriod){
Period period = new Period(symbol,tdays,prevPeriod);
float prevmax = 0;
float prevmin = 0;
float prevclose = 0;
float prevopen = 0;
long prevvol = 0;
float prevrs = 0;
float prevrsi = 0;
float prevrsigain = 0;
float prevrsiloss = 0;
float prevendvol = 0;
period.DX = 0;
period.ADX = 0;
period.symbol = symbol;
if (prevPeriod.Exists){
prevmax = prevPeriod.startmax;
prevmin = prevPeriod.startmin;
prevclose = prevPeriod.startclose;
prevopen = prevPeriod.startopen;
prevvol = prevPeriod.startvol;
prevrs = prevPeriod.RS;
prevrsi = prevPeriod.RSI;
prevrsigain = prevPeriod.RSIGAIN;
prevrsiloss = prevPeriod.RSILOSS;
}
try{
int up = 0;
int down = 0;
float vols = 0;
float pvols = 0;
float posDI = 0;
float negDI = 0;
float posSDI = 0;
float negSDI = 0;
float sma = 0;
float ema = 0;
float recs = 0;
float momntm = 0;
float loss = 0;
float gain = 0;
float days = tdays;
float TR = 0;
float posDM = 0;
float negDM = 0;
float curmax = 0;
float curmin = 0;
float curclose = 0;
float curopen = 0;
String curdate;
int curvol = 0;
float accm = 0;
float[] cl = new float[tdays];
int dy = 0;
float sumtypicals = 0;
float[] typicals = new float[tdays];
float sATR = 0;
period.ATR = 0 ;
period.SWA = 0;
period.SMA = 0;
period.EMA = 0;
int hiday = 0;
int loday = 0;
int newhghs = 0;
int newlws = 0;
int gns = 0;
int lss = 0;
int dnm = 0;
for (int i = 1; i<tdays+1; i++){
dnm += i;
}
float pbpp = 0;
float nbpp = 0;
int h,l;
double X = 0;
for (int i = 0; i<tdays; i++){
posDM = 0;
negDM = 0;
curdate = tradedays.qdate;
curopen = tradedays.open;
curclose = tradedays.close;
curmax = tradedays.maxprice;
curmin = tradedays.minprice;
curvol = tradedays.volume;
if ((period.minprice==0) || (period.minprice>curmin)){
period.minprice = curmin;
h = i+1;
}
if (period.maxprice<curmax){
period.maxprice = curmax;
l = i+1;
}
if (i==0){
period.sdate = curdate;
period.startdate = sdf.parse(curdate);
period.startopen = curopen;
period.startclose = curclose;
period.startmax = curmax;
period.startmin = curmin;
period.startvol = curvol;
}
if (i==tdays-1){
period.edate = curdate;
period.enddate = sdf.parse(curdate);
period.endopen = curopen;
period.endclose = curclose;
period.endmax = curmax;
period.endmin = curmin;
period.endvol = curvol;
}
period.volume += curvol;
if (prevPeriod.Exists){
//SET BPP ================================
if (i>0){
if ((curclose > prevclose)){
period.PBPP += (float)(i+1)/dnm*100;
}else{
period.NBPP += (float)(i+1)/dnm*100;
}
}else{
if ((curclose > prevPeriod.startclose)){
period.PBPP += (float)(i+1)/dnm*100;
}else{
period.NBPP += (float)(i+1)/dnm*100;
}
}
//SET DX===========================
if (curmax>prevmax){
posDM = (curmax - prevmax);
}
if (curmin<prevmin){
negDM = (prevmin - curmin);
}
if (posDM>negDM){
negDM = 0;
}else if (posDM < negDM){
posDM = 0;
}else{
posDM = negDM = 0;
}
//==================================
//SET ATR===========================
float a = Math.abs(curmin - prevclose);
float b = Math.abs(curmax - prevclose);
float c = Math.abs(curmax - curmin);
float d = 0;
if (a>b){
if (a>c){d = a;
}else{d = c;}
}else{
if (b>c){d = b;
}else{d = c;}
}
TR = d;
sATR +=TR;
//==================================
//SET DX============================
if (TR != 0){
posSDI += posDM;
negSDI += negDM;
}
//==================================
//SET RSI===========================
if (curclose>prevclose){
gain += (curclose-prevclose);
}else{
loss += (prevclose-curclose);
}
//===================================
period.velocity += curclose - prevclose;
//SET ACCUMULATION===================
if (curmax != curmin){
period.accumulation += Math.abs(curvol * ((curclose - curmin) - (curmax - curclose))/(curmax-curmin));
}
//===================================
//SET CCI============================
cl[dy] = curclose;
typicals[dy] = (curmax+curmin+curclose)/3;
sumtypicals += typicals[dy];
dy++;
//====================================
//SET HVA============================
X += Math.log((double)(curclose/prevclose));
//===============================
}
//SET SMA, WMA==========================
sma += curclose;
vols += curvol;
pvols += ((Math.abs(curclose-curopen)/2)+curopen) * curvol;
//set prev as cur
prevmax = curmax;
prevmin = curmin;
prevclose = curclose;
prevopen = curopen;
prevvol = curvol;
}
// end loop through period Quotes=====================
period.dvolume = period.volume/tdays;
//SET AROONUP=========================
//ARNUP = (float)h/(tdays*100);
//====================================
//SET AROONDWN========================
//ARNDWN = (float)l/(tdays*100);
//====================================
//ARNOS = ARNUP - ARNDWN;
//====================================
// set stochastics ===================================
if (period.maxprice!=period.minprice){
period.stochk = 100 * (period.endclose - period.minprice) / (period.maxprice - period.minprice);
}
if (!prevPeriod.Exists){
period.stochs[0] =period.stochk;
}
int sint = 3;
for (int i = sint-1; i>0; i--){
period.stochs = prevPeriod.stochs[i-1];
}
period.stochs[0] = period.stochk;
float sd = 0;
boolean b = true;
for (int j=0; j<sint; j++){
if (period.stochs[j] == 0){
b = false;
}
sd += period.stochs[j];
}
if (b){
period.stochd = sd / sint;
}
//====================================================
if (period.endclose>period.startclose){
period.uptrend = true;
}else{
period.uptrend = false;
}
if (period.startclose!=0){
period.momentum = (period.endclose/period.startclose) * 100;
}
//SET SWA=============================
if (vols!=0){
period.SWA = pvols / vols;
}else{
period.SWA = 0;
}
//====================================
//SET SMA=============================
period.SMA = sma / days;
//====================================
if (!prevPeriod.Exists){
//SET EMA as SMA for first period
period.EMA = period.SMA;
}