package dailyBot.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.TreeMap;
import dailyBot.analysis.SignalHistoryRecord;
import dailyBot.control.DailyProperties;
import dailyBot.control.connection.ChatConnection;
import dailyBot.control.connection.EmailConnection;
import dailyBot.control.connection.zulutrade.ZulutradeConnection;
import dailyBot.model.Strategy.StrategyId;
import dailyBot.model.dailyFx.DailyFXStrategySystem;
public class Utils
{
public static StrategySignal[] getAllSignals()
{
ArrayList <StrategySignal> allSignals = new ArrayList <StrategySignal>();
for(StrategyId strategyId : StrategyId.values())
allSignals.addAll(strategyId.strategy().duplicateSignals());
return allSignals.toArray(new StrategySignal[0]);
}
public static String sendTable(String[] labels, String[][] contents, int limit)
{
StringBuilder answer = new StringBuilder("<html><body><table border=\"1\"><tr>");
for(String label : labels)
answer.append("<th>").append(label).append("</th>");
answer.append("</tr>");
for(String[] row : contents)
{
answer.append("<tr>");
for(String cell : row)
answer.append("<td>").append((cell == null) ? "N/A" : cell).append("</td>");
answer.append("</tr>");
}
answer.append("</table></body></html>");
if(limit != 0)
EmailConnection.sendEmail("DailyBot-info", answer.toString(), EmailConnection.SUPERADMINS);
else
EmailConnection.sendEmail("DailyBot-info", answer.toString(), (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) ? (EmailConnection.ADMINS | EmailConnection.WATCHERS | EmailConnection.SUPERADMINS) : EmailConnection.WATCHERS);
return Arrays.deepToString(labels) + "\n\n" + Arrays.deepToString(contents);
}
public static String sendSignalTable(List <StrategySignal> signals, int limit)
{
TreeMap <String, Integer> labelsMap = new TreeMap <String, Integer>();
ArrayList <String> allLabels = new ArrayList <String>();
allLabels.add("STRATEGYID");
allLabels.add("IS_BUY");
allLabels.add("LOTS");
allLabels.add("PAIR");
allLabels.add("ENTRY");
allLabels.add("STOP");
allLabels.add("STOP_DAILY");
allLabels.add("PROFIT");
allLabels.add("STOPDISTANCE");
allLabels.add("ISIGNORED");
for(StrategySignal signal : signals)
{
for(String key : signal.getUniqueIdsMap().keySet())
if(!labelsMap.containsKey(key))
{
labelsMap.put(key, allLabels.size());
allLabels.add(key);
}
}
String[][] signalTable = new String[signals.size()][allLabels.size()];
int index = 0;
for(StrategySignal signal : signals)
{
signalTable[index][0] = String.valueOf(signal.getStrategyId());
signalTable[index][1] = String.valueOf(signal.isBuy());
signalTable[index][2] = String.valueOf(signal.getLotNumber());
signalTable[index][3] = String.valueOf(signal.getPair());
signalTable[index][4] = String.valueOf(signal.getEntryPrice());
signalTable[index][5] = String.valueOf(signal.getStop());
signalTable[index][6] = String.valueOf(signal.stopDaily());
signalTable[index][7] = String.valueOf(signal.getPair().differenceInPips(signal.getEntryPrice(),
signal.isBuy()));
signalTable[index][8] = String.valueOf(signal.getPair().differenceInPips(signal.getStop(), signal.isBuy()));
signalTable[index][9] = String.valueOf(signal.isIgnoreSignal());
for(String key : signal.getUniqueIdsMap().keySet())
signalTable[index][labelsMap.get(key)] = String.valueOf(key.contains("time") ? (System
.currentTimeMillis() - signal.getUniqueId(key)) : signal.getUniqueId(key));
index++;
}
return sendTable(allLabels.toArray(new String[0]), signalTable, limit);
}
public static String checkSignals(String key, int limit)
{
ArrayList <StrategySignal> signals = new ArrayList <StrategySignal>();
for(StrategySignal signal : getAllSignals())
if(signal.getUniqueId(key) != 0)
signals.add(signal);
return (signals.isEmpty() ? "NO SIGNALS" : sendSignalTable(signals, limit)) + "\n";
}
public static String checkSignals(StrategyId id, int limit)
{
ArrayList <StrategySignal> signals = new ArrayList <StrategySignal>();
if(id == null)
signals.addAll(Arrays.asList(getAllSignals()));
else
signals.addAll(id.strategy().duplicateSignals());
return (signals.isEmpty() ? "NO SIGNALS" : sendSignalTable(signals, limit)) + "\n";
}
public static void makeCheck(SignalProvider provider)
{
String message = "";
message += "DailyBot last read: " + (System.currentTimeMillis() - DailyFXStrategySystem.lastReadTime.get()) + " ms ago\n";
message += "DailyBot last change: " + (System.currentTimeMillis() - DailyFXStrategySystem.lastChangeTime.get()) + " ms ago\n";
message += provider.id + " profit: " + provider.getProfit() + "\n";
message += "Zulutrade last check: " + (System.currentTimeMillis() - ZulutradeConnection.lastCheckTime.get()) + " ms ago\n";
message += "Zulutrade last change: " + (System.currentTimeMillis() - ZulutradeConnection.lastChangeTime.get()) + " ms ago\n";
ChatConnection.sendMessage(message, true, (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) ? (ChatConnection.ADMINS | ChatConnection.WATCHERS) : ChatConnection.WATCHERS);
}
public static int getId(StrategyId strategy, Pair pair, boolean buy)
{
return strategy.ordinal() * 1000000 + pair.ordinal() * 100 + (buy ? 1 : 0);
}
public static int getId(SignalHistoryRecord record)
{
return getId(record.id, record.pair, record.buy);
}
public static List <Integer> getSendHours()
{
try
{
String[] hours = DailyProperties.getProperty("dailyBot.model.Utils.checkhours").split(",");
ArrayList <Integer> hoursList = new ArrayList <Integer> ();
for(String h : hours)
hoursList.add(Integer.parseInt(h));
return hoursList;
}
catch(Exception e)
{
return Arrays.asList(19);
}
}
}