}
}
};
+
+ private int parseQty(String str) {
+ if (str.equals(">1000")) {
+ return 1001;
+ } else {
+ return Integer.parseInt(str);
+ }
+ }
/**
* An abstract market offer, entailing a commodity being bought or sold by
commodity = commodId.intValue();
price = Integer.parseInt(record.get(priceIndex));
String qty = record.get(priceIndex+1);
- if(qty.equals(">1000")) {
- quantity = 1001;
- } else {
- quantity = Integer.parseInt(record.get(priceIndex+1));
- }
+ quantity = parseQty(qty);
shoppe = stallMap.get(record.get(1)).intValue();
}
ArrayList<ArrayList<String>> data = getData(accesstable);
+ if (false) {
+ calculateArbitrage(data);
+ }
+
if (uploadToYarrg && yarrgts != null) {
pm.setNote("Yarrg: Preparing data");
pm.setProgress(10);
}
return true;
}
+
+ private int calculateArbitrageCommodity(ArrayList<SortedSet<int[]>> arb_bs) {
+ System.out.println("ARBITRAGE?");
+ int profit = 0;
+ SortedSet<int[]> buys = arb_bs.get(0);
+ SortedSet<int[]> sells = arb_bs.get(1);
+ while (true) {
+ int[] buy, sell;
+ try {
+ buy = buys.first();
+ sell = sells.last();
+ } catch (NoSuchElementException e) {
+ break;
+ }
+ int count = buy[1] < sell[1] ? buy[1] : sell[1];
+ System.out.println(" buy @"+buy[0]+" x"+buy[1]+" sell @"+sell[0]+" x"+sell[1]+" => x"+count);
+ profit += count * (buy[0] - sell[0]);
+ buy[1] -= count;
+ sell[1] -= count;
+ if (buy[1]==0) buys.remove(buy);
+ if (sell[1]==0) buys.remove(sell);
+ }
+ return profit;
+ }
+
+ private class arbitrageOfferComparator implements Comparator {
+ public int compare(Object o1, Object o2) {
+ int p1 = ((int[])o1)[0];
+ int p2 = ((int[])o2)[0];
+ return p2 - p1;
+ }
+ }
+
+ private @SuppressWarnings("unchecked") void calculateArbitrage(ArrayList<ArrayList<String>> data)
+ {
+ int arbitrage = 0;
+ ArrayList<SortedSet<int[]>> arb_bs = null;
+ String lastcommod = null;
+ Comparator compar = new arbitrageOfferComparator();
+
+ for (ArrayList<String> row : data) {
+ String thiscommod = row.get(0);
+ System.out.println("ROW "+row.toString());
+ if (lastcommod == null || !thiscommod.equals(lastcommod)) {
+ if (lastcommod != null)
+ arbitrage += calculateArbitrageCommodity(arb_bs);
+ //System.out.println("ROW rdy");
+ arb_bs = new ArrayList<SortedSet<int[]>>(2);
+ arb_bs.add(0, new TreeSet<int[]>(compar));
+ arb_bs.add(1, new TreeSet<int[]>(compar));
+ System.out.println("ROW init");
+ lastcommod = thiscommod;
+ }
+ for (int bs = 0; bs < 2; bs++) {
+ String pricestr = row.get(bs*2 + 2);
+ if (pricestr == null)
+ continue;
+ int[] entry = new int[2];
+ //System.out.println("ROW BS "+bs);
+ entry[0] = parseQty(pricestr);
+ entry[1] = parseQty(row.get(bs*2 + 3));
+ arb_bs.get(bs).add(entry);
+ }
+ }
+ arbitrage += calculateArbitrageCommodity(arb_bs);
+ }
}