Oderbook updates are now working.
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3,7 +3,7 @@ package SeSim;
|
||||
public class BuyOrder extends Order implements Comparable<Order> {
|
||||
|
||||
public BuyOrder(){
|
||||
type=OrderType.buy;
|
||||
type=OrderType.bid;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,6 @@ package SeSim;
|
||||
public class SellOrder extends Order {
|
||||
|
||||
public SellOrder(){
|
||||
type=OrderType.sell;
|
||||
type=OrderType.ask;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user