package dailyBot.analysis;
import java.util.Calendar;
import java.util.Hashtable;
import dailyBot.analysis.Ranges.Range;
public enum Indicator
{
BUY(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
return record.buy ? 1 : 0;
}
}, new Range(0, 2, 0, 2), 1, true, new Object[][] { { 0, "venta" }, { 1, "compra" }, { 2, "ambos" } }),
TIME(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
Calendar date = Calendar.getInstance();
final long week = 1000L * 60 * 60 * 24 * 7;
final long month = 1000L * 60 * 60 * 24 * 30;
if(record.openDate > date.getTimeInMillis() - week)
return 0;
if(record.openDate > date.getTimeInMillis() - 2 * week)
return 1;
if(record.openDate > date.getTimeInMillis() - 3 * week)
return 2;
if(record.openDate > date.getTimeInMillis() - month)
return 3;
if(record.openDate > date.getTimeInMillis() - 2 * month)
return 4;
if(record.openDate > date.getTimeInMillis() - 3 * month)
return 5;
if(record.openDate > date.getTimeInMillis() - 6 * month)
return 6;
if(record.openDate > date.getTimeInMillis() - 12 * month)
return 7;
return 8;
}
}, new Range(0, 8, 0, 8), 1, true, new Object[][] { { 0, "1s" }, { 1, "2s" }, { 2, "3s" }, { 3, "1m" },
{ 4, "2m" }, { 5, "3m" }, { 6, "6m" }, { 7, "1a" }, { 8, "t" } }),
VIX(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
return record.VIX;
}
}, new Range(0, 50, 0, 50), 2, false),
SSI(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
return Utils.getSSI(record);
}
}, new Range(-500, 500, -500, 500), 50, false, new Object[][] { { -500, "-500" }, { 500, "500" } }),
ATR(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
return record.ATR;
}
}, new Range(0, 400, 0, 400), 25, false),
RSI(new Calculable()
{
@Override
public double calculate(SignalHistoryRecord record)
{
return record.RSI;
}
}, new Range(0, 100, 0, 100), 5, false);
private interface Calculable
{
double calculate(SignalHistoryRecord record);
}
Calculable calculable;
Range range;
int spaced;
boolean isInfo;
boolean hasLabels;
Hashtable<Integer, Object> labels;
private Indicator(Calculable calculable, Range range, int spaced, boolean isInfo)
{
this.calculable = calculable;
this.range = range;
this.spaced = spaced;
this.isInfo = isInfo;
hasLabels = false;
}
private Indicator(Calculable calculable, Range range, int spaced, boolean isInfo, Object[][] labelsArray)
{
this(calculable, range, spaced, isInfo);
hasLabels = true;
labels = new Hashtable<Integer, Object>();
for(Object[] l : labelsArray)
labels.put(new Integer((Integer) l[0]), l[1]);
}
public Range getRange()
{
return range;
}
public int getSpaced()
{
return spaced;
}
public Hashtable<Integer, Object> getLabels()
{
return labels;
}
public boolean hasLabels()
{
return hasLabels;
}
public double calculate(SignalHistoryRecord record)
{
double result = calculable.calculate(record);
double min = record.buy ? range.getMinBuy() : range.getMinSell();
double max = record.buy ? range.getMaxBuy() : range.getMaxSell();
if(result < min)
result = min;
if(result > max)
result = max;
return result;
}
}