diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/edu/brown/cs/student/term/Main.java | 3 | ||||
-rw-r--r-- | src/main/java/edu/brown/cs/student/term/ProfitCalculation.java | 96 |
2 files changed, 67 insertions, 32 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/Main.java b/src/main/java/edu/brown/cs/student/term/Main.java index fd352f7..3124ea4 100644 --- a/src/main/java/edu/brown/cs/student/term/Main.java +++ b/src/main/java/edu/brown/cs/student/term/Main.java @@ -48,7 +48,7 @@ public final class Main { } - ProfitCalculation person = new ProfitCalculation(null, "Vincent", new Date(1515629591000L), new Date(1715507898000L)); + ProfitCalculation person = new ProfitCalculation(null, "Sophie", new Date(1515629591000L), new Date(1715507898000L)); try { person.setConnection("./data/mock_tradeClarks.sqlite3"); } catch(Exception e) { @@ -56,6 +56,7 @@ public final class Main { } person.calculateGains(); + person.compareToNASDAQ(); // HashMap<String, Command> commandHashMap = new HashMap<>(); // /** add commands to map here! */ diff --git a/src/main/java/edu/brown/cs/student/term/ProfitCalculation.java b/src/main/java/edu/brown/cs/student/term/ProfitCalculation.java index 021e48b..6510194 100644 --- a/src/main/java/edu/brown/cs/student/term/ProfitCalculation.java +++ b/src/main/java/edu/brown/cs/student/term/ProfitCalculation.java @@ -1,6 +1,7 @@ package edu.brown.cs.student.term; +import org.json.JSONArray; import org.json.JSONObject; @@ -33,6 +34,11 @@ public class ProfitCalculation { private Date startTime; private Date endTime; + private String BASE_URL = "https://data.alpaca.markets/v1"; + + private String API_KEY = "PKT53Z9QW0TMSSC9XNPQ"; + private String SECRET_KEY = "udvetWCvwyVmZgrjgCPfX3W0nprKBrbunh5wNnCv"; + //map of stock to list of buy orders, first element in list is oldest private Map<String, LinkedList<OrderTuple>> buyHistoryMap; @@ -141,23 +147,28 @@ public class ProfitCalculation { int sharesToSell = sell.getShares(); //sell off through list of buys - while (sharesToSell > 0 && !buys.isEmpty() && - !sell.getDate().after(buys.getFirst().getDate())) { - OrderTuple buyBundle = buys.removeFirst(); - int sharesAtBundlePrice; - - //the buy has more shares than we want to sell - if (buyBundle.getShares() > sharesToSell) { - sharesAtBundlePrice = sharesToSell; - sharesToSell = 0; - //add back the holdings that were not sold - buyBundle.setShares(buyBundle.getShares() - sharesAtBundlePrice); - buys.addFirst(buyBundle); + while (sharesToSell > 0 && !buys.isEmpty()) { + //dont sell from buys which didn't exist at the time. + if (sell.getDate().after(buys.getFirst().getDate())) { + OrderTuple buyBundle = buys.removeFirst(); + int sharesAtBundlePrice; + //the buy has more shares than we want to sell + if (buyBundle.getShares() > sharesToSell) { + sharesAtBundlePrice = sharesToSell; + sharesToSell = 0; + //add back the holdings that were not sold + buyBundle.setShares(buyBundle.getShares() - sharesAtBundlePrice); + buys.addFirst(buyBundle); + } else { + sharesToSell -= buyBundle.getShares(); + sharesAtBundlePrice = buyBundle.getShares(); + } + realizedGain += sharesAtBundlePrice * (sell.getCost() - buyBundle.getCost()); } else { - sharesToSell -= buyBundle.getShares(); - sharesAtBundlePrice = buyBundle.getShares(); + break; } - realizedGain += sharesAtBundlePrice * (sell.getCost() - buyBundle.getCost()); + + } } @@ -213,17 +224,8 @@ public class ProfitCalculation { } public double getCurrentPrice(String ticker) { - //get request for body string - //convert body to JSONObject - //object.getDouble("price") - - String BASE_URL = "https://data.alpaca.markets/v1"; String PRICE_URL = BASE_URL + "/last/stocks/" + ticker; - - String API_KEY = "PKT53Z9QW0TMSSC9XNPQ"; - String SECRET_KEY = "udvetWCvwyVmZgrjgCPfX3W0nprKBrbunh5wNnCv"; - HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(PRICE_URL)).setHeader("APCA-API-KEY-ID", API_KEY) @@ -262,11 +264,50 @@ public class ProfitCalculation { double totalGains = unrealizedGains + realizedGains; + System.out.println("Money In: " + moneyInput); + System.out.println("Money Out: " + (moneyInput + totalGains)); + System.out.println("NASDAQ on money In: " + (moneyInput * compareToSP500())); System.out.println( "Total: " + totalGains + "| unrealized: " + unrealizedGains + " | realized: " + realizedGains); } + /** + * return percent change in SPY (SP 500) over the time period. + */ + public double compareToSP500() { + String url = "https://data.alpaca.markets/v1/bars/" + + "day?" + + "symbols=SPY" + + "&start=" + startTime + + "&end=" + endTime; + + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)).setHeader("APCA-API-KEY-ID", API_KEY) + .setHeader("APCA-API-SECRET-KEY", SECRET_KEY) + .build(); + + HttpResponse<String> response = null; + try { + response = client.send(request, + HttpResponse.BodyHandlers.ofString()); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + JSONArray object = new JSONObject(response.body()).getJSONArray("SPY"); + + //get close price of start SPY at start time + double startPrice = object.getJSONObject(0).getDouble("c"); + double endPrice = object.getJSONObject(object.length() - 1).getDouble("c"); + //get percent change + //end - start /start + return 1 + ((endPrice - startPrice) /startPrice); + + } public void setConnection(String filename) throws SQLException, ClassNotFoundException { @@ -279,11 +320,4 @@ public class ProfitCalculation { stat.executeUpdate("PRAGMA foreign_keys=ON;"); } - - //TODO: HELPER METHODS - //organizeOrders() - //getRealizedGains() - //getUnrealizedGains() - - } |