Work on charting
This commit is contained in:
parent
14127f08b5
commit
d6b975eea2
@ -3,4 +3,4 @@ do.depend=false
|
||||
do.jar=true
|
||||
javac.debug=true
|
||||
javadoc.preview=true
|
||||
user.properties.file=/home/tobias/.netbeans/8.1/build.properties
|
||||
user.properties.file=/home/tube/.netbeans/8.1/build.properties
|
||||
|
@ -3,17 +3,39 @@
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||
<group>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/AskBook.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Traders/RandomTraderConfig.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/Chart.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Traders/RandomTrader.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/MainWin.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/Exchange.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/configs/Sesim.properties</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/configs/JWS_generated.properties</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/AutoTraderLIst.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file>
|
||||
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/build-impl.xml</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/additional/README.txt</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Trader.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Locker.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Order.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/ControlPanel.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Quote.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/MainWin.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBook.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/manifest.mf</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/TraderConfig.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Account.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/QuotePanel.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Exchange.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/NewPanel.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/Chart.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/RandomTraderConfig.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/AskBook.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/AutoTrader.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/BidBook.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/SwitchingTrader.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/build.xml</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBookPanel.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/RandomTrader.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/test.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/AutoTraderLIst.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/BuyOrder.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/ManTrader.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/README.md</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/CandlestickDemo.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Logger.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/SwitchingTraderConfig.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/LICENSE</file>
|
||||
</group>
|
||||
</open-files>
|
||||
</project-private>
|
||||
|
@ -25,6 +25,8 @@
|
||||
*/
|
||||
package Gui;
|
||||
|
||||
import SeSim.Exchange.*;
|
||||
import SeSim.*;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.io.BufferedReader;
|
||||
@ -51,7 +53,6 @@ import org.jfree.data.xy.DefaultOHLCDataset;
|
||||
import org.jfree.data.xy.OHLCDataItem;
|
||||
import org.jfree.data.xy.XYDataset;
|
||||
|
||||
import SeSim.Exchange.*;
|
||||
import SeSim.Quote;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
@ -68,8 +69,8 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
||||
public Chart() {
|
||||
initComponents();
|
||||
|
||||
// String stockSymbol = "Schliemanz Koch AG";
|
||||
String stockSymbol = "MSFT";
|
||||
String stockSymbol = "Schliemanz Koch AG";
|
||||
//String stockSymbol = "MSFT";
|
||||
|
||||
DateAxis domainAxis = new DateAxis("Date");
|
||||
NumberAxis rangeAxis = new NumberAxis("Price");
|
||||
@ -87,6 +88,7 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
||||
//Now create the chart and chart panel
|
||||
JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false);
|
||||
ChartPanel chartPanel = new ChartPanel(chart);
|
||||
|
||||
chartPanel.setPreferredSize(new Dimension(500, 270));
|
||||
|
||||
add(chartPanel);
|
||||
@ -115,60 +117,46 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
protected OHLCDataItem getOhlcData(long first, long last, SortedSet<Quote> quotes) {
|
||||
Quote e=new Quote();
|
||||
e.time=first;
|
||||
e.id=0;
|
||||
|
||||
Quote qq = quotes.first();
|
||||
System.out.print(String.format
|
||||
("Quote First %f %d %d \n", qq.price,qq.time,qq.id)
|
||||
);
|
||||
Quote s = new Quote();
|
||||
|
||||
s.time = first;
|
||||
|
||||
System.out.print("Qzitesn"+quotes.size() +"\n");
|
||||
|
||||
|
||||
|
||||
|
||||
Quote z = new Quote();
|
||||
z.id=-1;
|
||||
z.time=0;
|
||||
|
||||
|
||||
SortedSet<Quote> l = quotes.tailSet(z);
|
||||
|
||||
System.exit(0);
|
||||
SortedSet<Quote> l = quotes.tailSet(s);
|
||||
|
||||
double open = 0;
|
||||
double high = 0;
|
||||
double low = 0;
|
||||
double close = 0;
|
||||
double volume;
|
||||
double volume=0;
|
||||
|
||||
Iterator<Quote> it = l.iterator();
|
||||
|
||||
|
||||
Quote q;
|
||||
|
||||
|
||||
if (it.hasNext()) {
|
||||
q = it.next();
|
||||
open = q.price;
|
||||
|
||||
high = q.price;
|
||||
low = q.price;
|
||||
volume = q.volume;
|
||||
}
|
||||
else {
|
||||
q = new Quote();
|
||||
}
|
||||
|
||||
|
||||
while (it.hasNext() && q.time < last) {
|
||||
q = it.next();
|
||||
|
||||
|
||||
if (q.price>high)
|
||||
if (q.price > high) {
|
||||
high = q.price;
|
||||
if (q.price<low)
|
||||
}
|
||||
if (q.price < low) {
|
||||
low = q.price;
|
||||
}
|
||||
|
||||
volume += q.volume;
|
||||
|
||||
@ -181,46 +169,23 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected OHLCDataItem[] getData() {
|
||||
|
||||
List<OHLCDataItem> data = new ArrayList<>();
|
||||
|
||||
SortedSet <Quote>s = MainWin.se.getQuoteHistory(60);
|
||||
this.getOhlcData(0, System.currentTimeMillis(), s);
|
||||
long ct;
|
||||
ct = Exchange.getCurrentTimeSeconds(10);
|
||||
|
||||
SortedSet<Quote> h = MainWin.se.getQuoteHistory(ct - 60);
|
||||
|
||||
for (long i = (ct - 60)*1000; i < (ct + 10)*1000; i += 10*1000) {
|
||||
OHLCDataItem d = getOhlcData(i, i + 10*1000, h);
|
||||
data.add(d);
|
||||
}
|
||||
|
||||
Iterator <Quote>i = s.iterator();
|
||||
System.out.print(data.size() + "\n");
|
||||
// System.exit(0);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// OHLCDataItem item = new OHLCDataItem();
|
||||
|
||||
|
||||
long t=0;
|
||||
// if ()
|
||||
|
||||
|
||||
// Quote q = i.next();
|
||||
// OHLCDataItem item = new OHLCDataItem(
|
||||
// date, open, high, low, close, volume);
|
||||
|
||||
/* double open =
|
||||
double high =
|
||||
double low =
|
||||
double close =
|
||||
double volume = Double.parseDouble(st.nextToken());
|
||||
double adjClose = Double.parseDouble(st.nextToken());
|
||||
*/
|
||||
|
||||
// data.add(item);
|
||||
|
||||
|
||||
|
||||
//return data.toArray(new <OHLCDataItem> rdata[]);
|
||||
return data.toArray(new OHLCDataItem[data.size()]);
|
||||
|
||||
}
|
||||
@ -292,10 +257,10 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
||||
public void UpdateQuote(Quote q) {
|
||||
return;
|
||||
//q.print();
|
||||
/* SortedSet s = MainWin.se.getQuoteHistory(60);
|
||||
/* SortedSet h = MainWin.se.getQuoteHistory(60);
|
||||
System.out.print(
|
||||
"SortedSet size:"
|
||||
+ s.size()
|
||||
+ h.size()
|
||||
+ "\n"
|
||||
);
|
||||
*/
|
||||
|
@ -27,23 +27,89 @@ package Gui;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tobias
|
||||
*/
|
||||
public class test {
|
||||
|
||||
static class Problem {
|
||||
|
||||
class Elem implements Comparable {
|
||||
|
||||
public int id;
|
||||
|
||||
public Elem(int id) {
|
||||
this.id = id;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Object o) {
|
||||
Elem e = (Elem) o;
|
||||
return id - e.id;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void run() {
|
||||
SortedSet<Elem> s = new TreeSet<>();
|
||||
s.add(new Elem(1));
|
||||
s.add(new Elem(7));
|
||||
s.add(new Elem(12));
|
||||
Elem e = new Elem(5);
|
||||
|
||||
SortedSet<Elem> ts = exclusiveTailSet(s, e);
|
||||
|
||||
Elem e2 = new Elem(0);
|
||||
|
||||
// SortedSet<Elem> ts2 = exclusiveTailSet(ts,e);
|
||||
SortedSet<Elem> ts2 = ts.tailSet(e2);
|
||||
|
||||
e.id = 99;
|
||||
|
||||
System.out.print(String.format("First: %s\n", ts.first().id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static class NoProblem {
|
||||
public void run(){
|
||||
SortedSet<Integer> s=new TreeSet<>();
|
||||
|
||||
s.add(10);
|
||||
s.add(20);
|
||||
s.add(30);
|
||||
s.add(40);
|
||||
s.add(50);
|
||||
s.add(60);
|
||||
|
||||
int e1 = 15;
|
||||
SortedSet l1 = s.tailSet(e1);
|
||||
|
||||
int e2 = -1;
|
||||
|
||||
SortedSet l2 = l1.tailSet(e2);
|
||||
|
||||
System.out.print("First:"+l2.first()+"\n");
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static <Ta> SortedSet<Ta> exclusiveTailSet(SortedSet<Ta> ts, Ta elem) {
|
||||
Iterator<Ta> iter = ts.tailSet(elem).iterator();
|
||||
|
||||
return ts.tailSet(iter.next());
|
||||
}
|
||||
|
||||
public static void main(String args[]) {
|
||||
SortedSet <String>s = new TreeSet<>();
|
||||
s.add("b");
|
||||
s.add("e");
|
||||
s.add("z");
|
||||
|
||||
SortedSet <String> ts = s.tailSet("d");
|
||||
|
||||
SortedSet <String> ts2 = ts.tailSet("n");
|
||||
NoProblem p = new NoProblem();
|
||||
p.run();
|
||||
|
||||
|
||||
System.out.print(String.format("First: %s\n", ts2.first()));
|
||||
}
|
||||
}
|
||||
|
@ -27,36 +27,36 @@ public class Exchange extends Thread {
|
||||
|
||||
}
|
||||
|
||||
public SortedSet <Quote> getQuoteHistory(int seconds){
|
||||
Quote last = quoteHistory.last();
|
||||
long ct = last.time - seconds * 1000;
|
||||
Quote e = new Quote();
|
||||
e.time=ct;
|
||||
e.time=-1;
|
||||
e.id=3;
|
||||
SortedSet <Quote> qqq =this.quoteHistory;
|
||||
public static long getCurrentTimeSeconds(long div) {
|
||||
long ct = System.currentTimeMillis() / 1000*div;
|
||||
return ct * div;
|
||||
}
|
||||
|
||||
public static long getCurrentTimeSeconds(){
|
||||
return getCurrentTimeSeconds(1);
|
||||
}
|
||||
|
||||
SortedSet<Quote> l = quoteHistory.tailSet(e);
|
||||
e.id=-1;
|
||||
SortedSet<Quote> ll = l.tailSet(e);
|
||||
public SortedSet<Quote> getQuoteHistory(long start) {
|
||||
|
||||
int size = qqq.size();
|
||||
long fid = qqq.first().id;
|
||||
Quote s = new Quote();
|
||||
s.time = start;
|
||||
s.time = 2;
|
||||
s.id = 2;
|
||||
|
||||
System.out.print("SS0: "+qqq.first().id+"\n");
|
||||
TreeSet<Quote> result = new TreeSet<>();
|
||||
result.addAll(this.quoteHistory.tailSet(s));
|
||||
|
||||
|
||||
return ll;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* public SortedSet<Quote> getQuoteHistory(int seconds) {
|
||||
Quote last = quoteHistory.last();
|
||||
return this.getQuoteHistory(seconds, last.time);
|
||||
}
|
||||
*/
|
||||
|
||||
// Class to describe an executed order
|
||||
|
||||
|
||||
// QuoteReceiver has to be implemented by objects that wants
|
||||
// to receive quote updates
|
||||
public interface QuoteReceiver {
|
||||
@ -105,7 +105,6 @@ public class Exchange extends Thread {
|
||||
System.out.println("I was Interrupted");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Here we store the list of quote receivers
|
||||
@ -137,12 +136,15 @@ public class Exchange extends Thread {
|
||||
public TreeSet<Order> bid;
|
||||
public TreeSet<Order> ask;
|
||||
|
||||
private Locker tradelock = new Locker();
|
||||
|
||||
/*
|
||||
private final Semaphore available = new Semaphore(1, true);
|
||||
|
||||
private void Lock() {
|
||||
try {
|
||||
available.acquire();
|
||||
} catch (InterruptedException e) {
|
||||
} catch (InterruptedException s) {
|
||||
System.out.println("Interrupted\n");
|
||||
}
|
||||
|
||||
@ -151,7 +153,7 @@ public class Exchange extends Thread {
|
||||
private void Unlock() {
|
||||
available.release();
|
||||
}
|
||||
|
||||
*/
|
||||
private TreeSet<Order> selectOrderBook(OrderType t) {
|
||||
|
||||
switch (t) {
|
||||
@ -222,13 +224,13 @@ public class Exchange extends Thread {
|
||||
}
|
||||
|
||||
public void cancelOrder(Order o) {
|
||||
Lock();
|
||||
tradelock.lock();
|
||||
TreeSet<Order> book = this.selectOrderBook(o.type);
|
||||
book.remove(o);
|
||||
this.updateBookReceivers(o.type);
|
||||
o.account.pending.remove(o);
|
||||
o.status = OrderStatus.canceled;
|
||||
Unlock();
|
||||
tradelock.unlock();
|
||||
|
||||
}
|
||||
|
||||
@ -320,13 +322,10 @@ public class Exchange extends Thread {
|
||||
q.price = price;
|
||||
q.time = System.currentTimeMillis();
|
||||
|
||||
|
||||
|
||||
q.ask = a.limit;
|
||||
q.bid = b.limit;
|
||||
q.id = nextQuoteId++;
|
||||
|
||||
|
||||
this.updateQuoteReceivers(q);
|
||||
this.updateBookReceivers(OrderType.bid);
|
||||
this.updateBookReceivers(OrderType.ask);
|
||||
@ -339,7 +338,6 @@ public class Exchange extends Thread {
|
||||
+ "\n"
|
||||
);
|
||||
*/
|
||||
|
||||
quoteHistory.add(q);
|
||||
continue;
|
||||
|
||||
@ -378,7 +376,6 @@ public class Exchange extends Thread {
|
||||
if (ret) {
|
||||
this.updateBookReceivers(o.type);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -389,14 +386,13 @@ public class Exchange extends Thread {
|
||||
return null;
|
||||
}
|
||||
|
||||
Lock();
|
||||
tradelock.lock();
|
||||
o.timestamp = System.currentTimeMillis();
|
||||
//System.out.print(o.timestamp + " TS:\n");
|
||||
o.id = orderid++;
|
||||
addOrder(o);
|
||||
o.account.pending.add(o);
|
||||
OrderMatching();
|
||||
Unlock();
|
||||
tradelock.unlock();
|
||||
|
||||
return o;
|
||||
}
|
||||
@ -438,10 +434,10 @@ public class Exchange extends Thread {
|
||||
return lastprice;
|
||||
}
|
||||
|
||||
public double sendOrder(Account o) {
|
||||
/* public double sendOrder(Account o) {
|
||||
return 0.7;
|
||||
}
|
||||
|
||||
*/
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -61,10 +61,10 @@ public class Quote implements Comparable {
|
||||
int ret;
|
||||
Quote q = (Quote)o;
|
||||
|
||||
/* ret = (int)(this.time-q.time);
|
||||
ret = (int)(this.time-q.time);
|
||||
if (ret !=0)
|
||||
return ret;
|
||||
*/
|
||||
|
||||
return (int)(this.id-q.id);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user