Work on charting

This commit is contained in:
7u83 2017-01-02 01:17:57 +01:00
parent 14127f08b5
commit d6b975eea2
6 changed files with 223 additions and 174 deletions

View File

@ -3,4 +3,4 @@ do.depend=false
do.jar=true do.jar=true
javac.debug=true javac.debug=true
javadoc.preview=true javadoc.preview=true
user.properties.file=/home/tobias/.netbeans/8.1/build.properties user.properties.file=/home/tube/.netbeans/8.1/build.properties

View File

@ -3,17 +3,39 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/> <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"> <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group> <group>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/AskBook.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/additional/README.txt</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Traders/RandomTraderConfig.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Trader.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/Chart.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Locker.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Traders/RandomTrader.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Order.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/Gui/MainWin.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/ControlPanel.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/Exchange.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Quote.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/configs/Sesim.properties</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/MainWin.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/configs/JWS_generated.properties</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBook.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/AutoTraderLIst.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/manifest.mf</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/TraderConfig.java</file>
<file>file:/home/tobias/NetBeansProjects/SeSim/nbproject/build-impl.xml</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> </group>
</open-files> </open-files>
</project-private> </project-private>

View File

@ -25,6 +25,8 @@
*/ */
package Gui; package Gui;
import SeSim.Exchange.*;
import SeSim.*;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.io.BufferedReader; 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.OHLCDataItem;
import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYDataset;
import SeSim.Exchange.*;
import SeSim.Quote; import SeSim.Quote;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
@ -68,8 +69,8 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
public Chart() { public Chart() {
initComponents(); initComponents();
// String stockSymbol = "Schliemanz Koch AG"; String stockSymbol = "Schliemanz Koch AG";
String stockSymbol = "MSFT"; //String stockSymbol = "MSFT";
DateAxis domainAxis = new DateAxis("Date"); DateAxis domainAxis = new DateAxis("Date");
NumberAxis rangeAxis = new NumberAxis("Price"); 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 //Now create the chart and chart panel
JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false); JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false);
ChartPanel chartPanel = new ChartPanel(chart); ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270)); chartPanel.setPreferredSize(new Dimension(500, 270));
add(chartPanel); add(chartPanel);
@ -115,65 +117,51 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
return result; return result;
} }
protected OHLCDataItem getOhlcData(long first, long last, SortedSet<Quote> quotes) {
Quote s = new Quote();
s.time = first;
protected OHLCDataItem getOhlcData(long first, long last, SortedSet <Quote> quotes ){ SortedSet<Quote> l = quotes.tailSet(s);
Quote e=new Quote();
e.time=first;
e.id=0;
Quote qq = quotes.first(); double open = 0;
System.out.print(String.format double high = 0;
("Quote First %f %d %d \n", qq.price,qq.time,qq.id) double low = 0;
); double close = 0;
double volume=0;
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);
double open=0;
double high=0;
double low=0;
double close=0;
double volume;
Iterator <Quote>it = l.iterator();
Iterator<Quote> it = l.iterator();
Quote q; Quote q;
if (it.hasNext()) {
q = it.next(); q = it.next();
open=q.price; open = q.price;
high=q.price;
low=q.price;
volume = q.volume;
while (it.hasNext() && q.time<last){
q = it.next();
if (q.price>high)
high = q.price; high = q.price;
if (q.price<low) low = 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) {
high = q.price;
}
if (q.price < low) {
low = q.price;
}
volume += q.volume; volume += q.volume;
} }
close=q.price; close = q.price;
Date date = new Date(first); Date date = new Date(first);
return new OHLCDataItem( return new OHLCDataItem(
@ -181,46 +169,23 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
); );
} }
protected OHLCDataItem[] getData() { protected OHLCDataItem[] getData() {
List<OHLCDataItem> data = new ArrayList<>(); List<OHLCDataItem> data = new ArrayList<>();
SortedSet <Quote>s = MainWin.se.getQuoteHistory(60); long ct;
this.getOhlcData(0, System.currentTimeMillis(), s); 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()]); return data.toArray(new OHLCDataItem[data.size()]);
} }
@ -292,12 +257,12 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
public void UpdateQuote(Quote q) { public void UpdateQuote(Quote q) {
return; return;
//q.print(); //q.print();
/* SortedSet s = MainWin.se.getQuoteHistory(60); /* SortedSet h = MainWin.se.getQuoteHistory(60);
System.out.print( System.out.print(
"SortedSet size:" "SortedSet size:"
+ s.size() + h.size()
+ "\n" + "\n"
); );
*/ */
} }
} }

View File

@ -27,23 +27,89 @@ package Gui;
import java.util.*; import java.util.*;
/** /**
* *
* @author tobias * @author tobias
*/ */
public class test { public class test {
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"); static class Problem {
SortedSet <String> ts2 = ts.tailSet("n"); 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[]) {
NoProblem p = new NoProblem();
p.run();
System.out.print(String.format("First: %s\n", ts2.first()));
} }
} }

View File

@ -27,36 +27,36 @@ public class Exchange extends Thread {
} }
public SortedSet <Quote> getQuoteHistory(int seconds){ public static long getCurrentTimeSeconds(long div) {
Quote last = quoteHistory.last(); long ct = System.currentTimeMillis() / 1000*div;
long ct = last.time - seconds * 1000; return ct * div;
Quote e = new Quote(); }
e.time=ct;
e.time=-1;
e.id=3;
SortedSet <Quote> qqq =this.quoteHistory;
public static long getCurrentTimeSeconds(){
return getCurrentTimeSeconds(1);
}
SortedSet<Quote> l = quoteHistory.tailSet(e); public SortedSet<Quote> getQuoteHistory(long start) {
e.id=-1;
SortedSet<Quote> ll = l.tailSet(e);
int size = qqq.size(); Quote s = new Quote();
long fid = qqq.first().id; 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 result;
return ll;
} }
/* public SortedSet<Quote> getQuoteHistory(int seconds) {
Quote last = quoteHistory.last();
return this.getQuoteHistory(seconds, last.time);
}
*/
// Class to describe an executed order // Class to describe an executed order
// QuoteReceiver has to be implemented by objects that wants // QuoteReceiver has to be implemented by objects that wants
// to receive quote updates // to receive quote updates
public interface QuoteReceiver { public interface QuoteReceiver {
@ -105,7 +105,6 @@ public class Exchange extends Thread {
System.out.println("I was Interrupted"); System.out.println("I was Interrupted");
} }
} }
// Here we store the list of quote receivers // Here we store the list of quote receivers
@ -137,12 +136,15 @@ public class Exchange extends Thread {
public TreeSet<Order> bid; public TreeSet<Order> bid;
public TreeSet<Order> ask; public TreeSet<Order> ask;
private Locker tradelock = new Locker();
/*
private final Semaphore available = new Semaphore(1, true); private final Semaphore available = new Semaphore(1, true);
private void Lock() { private void Lock() {
try { try {
available.acquire(); available.acquire();
} catch (InterruptedException e) { } catch (InterruptedException s) {
System.out.println("Interrupted\n"); System.out.println("Interrupted\n");
} }
@ -151,7 +153,7 @@ public class Exchange extends Thread {
private void Unlock() { private void Unlock() {
available.release(); available.release();
} }
*/
private TreeSet<Order> selectOrderBook(OrderType t) { private TreeSet<Order> selectOrderBook(OrderType t) {
switch (t) { switch (t) {
@ -222,13 +224,13 @@ public class Exchange extends Thread {
} }
public void cancelOrder(Order o) { public void cancelOrder(Order o) {
Lock(); tradelock.lock();
TreeSet<Order> book = this.selectOrderBook(o.type); TreeSet<Order> book = this.selectOrderBook(o.type);
book.remove(o); book.remove(o);
this.updateBookReceivers(o.type); this.updateBookReceivers(o.type);
o.account.pending.remove(o); o.account.pending.remove(o);
o.status = OrderStatus.canceled; o.status = OrderStatus.canceled;
Unlock(); tradelock.unlock();
} }
@ -247,7 +249,7 @@ public class Exchange extends Thread {
src.money += price * volume; src.money += price * volume;
} }
long nextQuoteId=0; long nextQuoteId = 0;
public void OrderMatching() { public void OrderMatching() {
@ -320,18 +322,15 @@ public class Exchange extends Thread {
q.price = price; q.price = price;
q.time = System.currentTimeMillis(); q.time = System.currentTimeMillis();
q.ask = a.limit;
q.bid = b.limit;
q.ask=a.limit;
q.bid=b.limit;
q.id = nextQuoteId++; q.id = nextQuoteId++;
this.updateQuoteReceivers(q); this.updateQuoteReceivers(q);
this.updateBookReceivers(OrderType.bid); this.updateBookReceivers(OrderType.bid);
this.updateBookReceivers(OrderType.ask); this.updateBookReceivers(OrderType.ask);
/* System.out.print( /* System.out.print(
"Executed: " "Executed: "
+ q.price + q.price
+ " / " + " / "
@ -339,7 +338,6 @@ public class Exchange extends Thread {
+ "\n" + "\n"
); );
*/ */
quoteHistory.add(q); quoteHistory.add(q);
continue; continue;
@ -378,7 +376,6 @@ public class Exchange extends Thread {
if (ret) { if (ret) {
this.updateBookReceivers(o.type); this.updateBookReceivers(o.type);
} }
return ret; return ret;
} }
@ -389,14 +386,13 @@ public class Exchange extends Thread {
return null; return null;
} }
Lock(); tradelock.lock();
o.timestamp = System.currentTimeMillis(); o.timestamp = System.currentTimeMillis();
//System.out.print(o.timestamp + " TS:\n");
o.id = orderid++; o.id = orderid++;
addOrder(o); addOrder(o);
o.account.pending.add(o); o.account.pending.add(o);
OrderMatching(); OrderMatching();
Unlock(); tradelock.unlock();
return o; return o;
} }
@ -438,10 +434,10 @@ public class Exchange extends Thread {
return lastprice; return lastprice;
} }
public double sendOrder(Account o) { /* public double sendOrder(Account o) {
return 0.7; return 0.7;
} }
*/
/** /**
* *
*/ */

View File

@ -61,10 +61,10 @@ public class Quote implements Comparable {
int ret; int ret;
Quote q = (Quote)o; Quote q = (Quote)o;
/* ret = (int)(this.time-q.time); ret = (int)(this.time-q.time);
if (ret !=0) if (ret !=0)
return ret; return ret;
*/
return (int)(this.id-q.id); return (int)(this.id-q.id);
} }