aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/edu/brown/cs/student/term/Main.java3
-rw-r--r--src/main/java/edu/brown/cs/student/term/ProfitCalculation.java96
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()
-
-
}