Oderbook updates are now working.

This commit is contained in:
7u83
2016-12-28 02:21:24 +01:00
parent da871d1a09
commit e699e376ac
16 changed files with 167 additions and 606 deletions

View File

@ -50,30 +50,25 @@ final public class Account {
TreeSet pending;
public SellOrder sell(long volume, double limit) {
public Order sell(long volume, double limit) {
SellOrder o = new SellOrder();
o.account = this;
o.limit = limit;
o.volume = volume;
orderpending = true;
se.SendOrder(o);
return o;
return se.SendOrder(o);
}
public BuyOrder Buy(long size, double limit, Exchange ex) {
if (size * limit > money) {
public Order buy(long volume, double limit) {
if (volume * limit > money) {
return null;
}
BuyOrder o = new BuyOrder();
o.limit = limit;
o.volume = size;
o.volume = volume;
o.account = this;
orderpending = true;
ex.SendOrder(o);
return o;
return se.SendOrder(o);
}
/*

View File

@ -3,7 +3,7 @@ package SeSim;
public class BuyOrder extends Order implements Comparable<Order> {
public BuyOrder(){
type=OrderType.buy;
type=OrderType.bid;
}
}

View File

@ -4,6 +4,7 @@ import java.util.*;
import java.util.concurrent.*;
import SeSim.Order.OrderStatus;
import SeSim.Order.OrderType;
/**
*
@ -47,12 +48,43 @@ public class Exchange extends Thread {
}
/**
*
* Bookreceiver Interface
*/
public interface BookReceiver {
void UpdateOrderBook();
}
private ArrayList<BookReceiver> ask_bookreceivers = new ArrayList<>();
private ArrayList<BookReceiver> bid_bookreceivers = new ArrayList<>();
private ArrayList <BookReceiver> selectBookReceiver(OrderType t){
switch (t){
case ask:
return ask_bookreceivers;
case bid:
return bid_bookreceivers;
}
return null;
}
public void addBookReceiver(OrderType t, BookReceiver br){
ArrayList <BookReceiver> bookreceivers;
bookreceivers = selectBookReceiver(t);
bookreceivers.add(br);
}
void UpdateBookReceivers(OrderType t) {
ArrayList <BookReceiver> bookreceivers;
bookreceivers = selectBookReceiver(t);
Iterator<BookReceiver> i = bookreceivers.iterator();
while (i.hasNext()) {
i.next().UpdateOrderBook();
}
}
// Here we store the list of quote receivers
private final TreeSet<QuoteReceiver> qrlist;
@ -98,7 +130,25 @@ public class Exchange extends Thread {
available.release();
}
private ArrayList<Order> getBook(TreeSet<Order> book, int depth) {
private TreeSet<Order> selectOrderBook(OrderType t){
switch(t){
case bid:
return this.bid;
case ask:
return this.ask;
}
return null;
}
public ArrayList<Order> getOrderBook(OrderType t, int depth) {
TreeSet <Order> book = selectOrderBook(t);
if (book==null)
return null;
ArrayList<Order> ret = new ArrayList<>();
Iterator<Order> it = book.iterator();
for (int i = 0; i < depth && it.hasNext(); i++) {
@ -112,26 +162,7 @@ public class Exchange extends Thread {
}
/**
* Get the "ask" orderbook
*
* @param depth Number oder Orders to retrieve from orderbook
* @return Orderbook
*/
public ArrayList<Order> getAskBook(int depth) {
return getBook(ask, depth);
}
/**
* Get the "bid" oderbook
*
* @param depth Number oder Orders to retrieve from orderbook
* @return Orderbook
*/
public ArrayList<Order> getBidBook(int depth) {
return getBook(bid, depth);
}
public void print_current() {
@ -282,29 +313,43 @@ public class Exchange extends Thread {
return true;
}
// Add an order to the orderbook
private boolean addOrder(Order o) {
boolean ret=false;
switch (o.type) {
case buy:
return bid.add(o);
case bid:
System.out.print("Exchange adding bid oder \n");
ret = bid.add(o);
break;
case sell:
return ask.add(o);
case ask:
System.out.print("Exchange adding ask oder \n");
ret = ask.add(o);
break;
}
return false;
if (ret)
this.UpdateBookReceivers(o.type);
return ret;
}
public void SendOrder(Order o) {
Lock();
o.timestamp = System.currentTimeMillis();
public Order SendOrder(Order o) {
boolean rc = InitOrder(o);
if (!rc)
return null;
Lock();
o.timestamp = System.currentTimeMillis();
System.out.print(o.timestamp + " TS:\n");
o.id = orderid++;
addOrder(o);
OrderMatching();
Unlock();
return o;
}
/*

View File

@ -36,7 +36,7 @@ public class MTrader extends Trader {
// System.out.println("HW");
long size = (int) (account.money / limit);
account.Buy(size, limit, ex);
account.buy(size, limit);
}

View File

@ -41,7 +41,7 @@ public abstract class Order implements Comparable<Order> {
if (r==0)
return 0;
if (type==OrderType.sell)
if (type==OrderType.ask)
return 1-r;
return r;
@ -82,8 +82,8 @@ public abstract class Order implements Comparable<Order> {
open, executed, canceled
}
enum OrderType {
buy,sell
public enum OrderType {
bid,ask
}
OrderStatus status = OrderStatus.open;

View File

@ -39,7 +39,7 @@ public class RandomTrader extends Trader {
long size = (int) (account.money / (limit * 1));
myorder = account.Buy(size, limit, ex);
myorder = account.buy(size, limit);
return;
}

View File

@ -3,6 +3,6 @@ package SeSim;
public class SellOrder extends Order {
public SellOrder(){
type=OrderType.sell;
type=OrderType.ask;
}
}

View File

@ -32,6 +32,10 @@ public abstract class Trader {
public abstract void trade();
public Account account;
public void sell(long shares, double limit){
account.sell(shares, limit);
}
/**
* Construct a Trader object
*/