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
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

View File

@ -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>

View File

@ -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,112 +117,75 @@ 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)
);
System.out.print("Qzitesn"+quotes.size() +"\n");
protected OHLCDataItem getOhlcData(long first, long last, SortedSet<Quote> quotes) {
Quote s = new Quote();
s.time = first;
SortedSet<Quote> l = quotes.tailSet(s);
double open = 0;
double high = 0;
double low = 0;
double close = 0;
double volume=0;
Iterator<Quote> it = l.iterator();
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();
Quote q;
q = it.next();
open=q.price;
high=q.price;
low=q.price;
volume = q.volume;
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){
while (it.hasNext() && q.time < last) {
q = it.next();
if (q.price>high)
if (q.price > high) {
high = q.price;
if (q.price<low)
low=q.price;
}
if (q.price < low) {
low = q.price;
}
volume += q.volume;
}
close=q.price;
close = q.price;
Date date = new Date(first);
return new OHLCDataItem(
date, open, high, low, close, volume
);
}
protected OHLCDataItem[] getData() {
List<OHLCDataItem> data = new ArrayList<>();
SortedSet <Quote>s = MainWin.se.getQuoteHistory(60);
this.getOhlcData(0, System.currentTimeMillis(), s);
Iterator <Quote>i = s.iterator();
// 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);
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);
}
System.out.print(data.size() + "\n");
// System.exit(0);
//return data.toArray(new <OHLCDataItem> rdata[]);
return data.toArray(new OHLCDataItem[data.size()]);
}
@ -260,7 +225,7 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
//Convert the list into an array
OHLCDataItem[] data = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
System.out.print("Return oghls old data items\n");
return data;
@ -292,12 +257,12 @@ 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"
);
*/
*/
}
}

View File

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

View File

@ -24,39 +24,39 @@ public class Exchange extends Thread {
this.ask = new TreeSet<>();
this.bid = new TreeSet<>();
this.qrlist = new ArrayList<>();
}
public static long getCurrentTimeSeconds(long div) {
long ct = System.currentTimeMillis() / 1000*div;
return ct * div;
}
public SortedSet <Quote> getQuoteHistory(int seconds){
public static long getCurrentTimeSeconds(){
return getCurrentTimeSeconds(1);
}
public SortedSet<Quote> getQuoteHistory(long start) {
Quote s = new Quote();
s.time = start;
s.time = 2;
s.id = 2;
TreeSet<Quote> result = new TreeSet<>();
result.addAll(this.quoteHistory.tailSet(s));
return result;
}
/* 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;
SortedSet<Quote> l = quoteHistory.tailSet(e);
e.id=-1;
SortedSet<Quote> ll = l.tailSet(e);
int size = qqq.size();
long fid = qqq.first().id;
System.out.print("SS0: "+qqq.first().id+"\n");
return ll;
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 {
@ -100,12 +100,11 @@ public class Exchange extends Thread {
i.next().UpdateOrderBook();
}
try {
sleep(10);
} catch (InterruptedException e) {
System.out.println("I was Interrupted");
}
sleep(10);
} catch (InterruptedException e) {
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();
}
@ -247,8 +249,8 @@ public class Exchange extends Thread {
src.money += price * volume;
}
long nextQuoteId=0;
long nextQuoteId = 0;
public void OrderMatching() {
while (true) {
@ -319,27 +321,23 @@ public class Exchange extends Thread {
q.volume = volume;
q.price = price;
q.time = System.currentTimeMillis();
q.ask=a.limit;
q.bid=b.limit;
q.ask = a.limit;
q.bid = b.limit;
q.id = nextQuoteId++;
this.updateQuoteReceivers(q);
this.updateBookReceivers(OrderType.bid);
this.updateBookReceivers(OrderType.ask);
/* System.out.print(
/* System.out.print(
"Executed: "
+ q.price
+ " / "
+ q.volume
+ "\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;
}
*/
/**
*
*/

View File

@ -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);
}