work on internal accounts
This commit is contained in:
parent
0952c7b591
commit
aae927ae82
3
.gitignore
vendored
3
.gitignore
vendored
@ -12,4 +12,5 @@
|
||||
hs_err_pid*
|
||||
/dist/
|
||||
/build/
|
||||
/target/
|
||||
/target/
|
||||
/nbproject/
|
12
pom.xml
12
pom.xml
@ -11,6 +11,18 @@
|
||||
<artifactId>jfreechart</artifactId>
|
||||
<version>1.0.19</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
@ -12,6 +12,36 @@ import sesim.Order.OrderType;
|
||||
*/
|
||||
public class Exchange extends Thread {
|
||||
|
||||
private class iAccount implements Comparable {
|
||||
|
||||
protected double id;
|
||||
protected double shares;
|
||||
protected double money;
|
||||
|
||||
@Override
|
||||
public int compareTo(Object a) {
|
||||
iAccount account = (iAccount) a;
|
||||
return this.id - account.id < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
iAccount(double money, double shares) {
|
||||
next_account_id_locker.lock();
|
||||
id = (Math.random() + (next_account_id++));
|
||||
next_account_id_locker.unlock();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static int next_account_id;
|
||||
Locker next_account_id_locker = new Locker();
|
||||
TreeSet<iAccount> accounts;
|
||||
|
||||
double createAccount(double money, double shares) {
|
||||
iAccount a = new iAccount(money, shares);
|
||||
accounts.add(a);
|
||||
return a.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Histrory of quotes
|
||||
*/
|
||||
@ -221,6 +251,13 @@ public class Exchange extends Thread {
|
||||
|
||||
}
|
||||
|
||||
protected void transferMoneyAndShares(Account src, Account dst, double money, long shares) {
|
||||
src.money -= money;
|
||||
dst.money += money;
|
||||
src.shares -= shares;
|
||||
dst.shares += shares;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param o
|
||||
@ -268,10 +305,11 @@ public class Exchange extends Thread {
|
||||
return;
|
||||
}
|
||||
|
||||
// There is a match, build price and volume
|
||||
double price = b.id < a.id ? b.limit : a.limit;
|
||||
long volume = b.volume>=a.volume ? a.volume : b.volume;
|
||||
|
||||
long volume = b.volume >= a.volume ? a.volume : b.volume;
|
||||
|
||||
transferMoneyAndShares(b.account, a.account, volume * price, -volume);
|
||||
|
||||
if (a.volume == 0) {
|
||||
// This order is fully executed, remove
|
||||
@ -305,8 +343,6 @@ public class Exchange extends Thread {
|
||||
price = a.limit;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
if (b.volume >= a.volume) {
|
||||
volume = a.volume;
|
||||
} else {
|
||||
@ -336,7 +372,6 @@ public class Exchange extends Thread {
|
||||
this.updateBookReceivers(OrderType.bid);
|
||||
this.updateBookReceivers(OrderType.ask);
|
||||
|
||||
|
||||
quoteHistory.add(q);
|
||||
continue;
|
||||
|
||||
|
300
src/test/java/sesim/ExchangeTest.java
Normal file
300
src/test/java/sesim/ExchangeTest.java
Normal file
@ -0,0 +1,300 @@
|
||||
/*
|
||||
* Copyright (c) 2017, tobias
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package sesim;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.SortedSet;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tobias
|
||||
*/
|
||||
public class ExchangeTest {
|
||||
|
||||
public ExchangeTest() {
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpClass() {
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownClass() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of createAccount method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testCreateAccount() {
|
||||
System.out.println("createAccount");
|
||||
double money = 0.0;
|
||||
double shares = 0.0;
|
||||
Exchange instance = new Exchange();
|
||||
double expResult = 0.0;
|
||||
double result = instance.createAccount(money, shares);
|
||||
assertEquals(expResult, result, 0.0);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getCurrentTimeSeconds method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetCurrentTimeSeconds() {
|
||||
System.out.println("getCurrentTimeSeconds");
|
||||
long expResult = 0L;
|
||||
long result = Exchange.getCurrentTimeSeconds();
|
||||
assertEquals(expResult, result);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getQuoteHistory method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetQuoteHistory() {
|
||||
System.out.println("getQuoteHistory");
|
||||
long start = 0L;
|
||||
Exchange instance = new Exchange();
|
||||
SortedSet<Quote> expResult = null;
|
||||
SortedSet<Quote> result = instance.getQuoteHistory(start);
|
||||
assertEquals(expResult, result);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of addBookReceiver method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testAddBookReceiver() {
|
||||
System.out.println("addBookReceiver");
|
||||
Order.OrderType t = null;
|
||||
Exchange.BookReceiver br = null;
|
||||
Exchange instance = new Exchange();
|
||||
instance.addBookReceiver(t, br);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of updateBookReceivers method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testUpdateBookReceivers() {
|
||||
System.out.println("updateBookReceivers");
|
||||
Order.OrderType t = null;
|
||||
Exchange instance = new Exchange();
|
||||
instance.updateBookReceivers(t);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of addQuoteReceiver method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testAddQuoteReceiver() {
|
||||
System.out.println("addQuoteReceiver");
|
||||
Exchange.QuoteReceiver qr = null;
|
||||
Exchange instance = new Exchange();
|
||||
instance.addQuoteReceiver(qr);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getOrderBook method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetOrderBook() {
|
||||
System.out.println("getOrderBook");
|
||||
Order.OrderType t = null;
|
||||
int depth = 0;
|
||||
Exchange instance = new Exchange();
|
||||
ArrayList<Order> expResult = null;
|
||||
ArrayList<Order> result = instance.getOrderBook(t, depth);
|
||||
assertEquals(expResult, result);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of print_current method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testPrint_current() {
|
||||
System.out.println("print_current");
|
||||
Exchange instance = new Exchange();
|
||||
instance.print_current();
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of transferMoney method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testTransferMoney() {
|
||||
System.out.println("transferMoney");
|
||||
Account src = null;
|
||||
Account dst = null;
|
||||
double money = 0.0;
|
||||
Exchange instance = new Exchange();
|
||||
instance.transferMoney(src, dst, money);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of transferMoneyAndShares method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testTransferMoneyAndShares() {
|
||||
System.out.println("transferMoneyAndShares");
|
||||
Account src = null;
|
||||
Account dst = null;
|
||||
double money = 0.0;
|
||||
long shares = 0L;
|
||||
Exchange instance = new Exchange();
|
||||
instance.transferMoneyAndShares(src, dst, money, shares);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of cancelOrder method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testCancelOrder() {
|
||||
System.out.println("cancelOrder");
|
||||
Order o = null;
|
||||
Exchange instance = new Exchange();
|
||||
instance.cancelOrder(o);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of transferShares method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testTransferShares() {
|
||||
System.out.println("transferShares");
|
||||
Account src = null;
|
||||
Account dst = null;
|
||||
long volume = 0L;
|
||||
double price = 0.0;
|
||||
Exchange instance = new Exchange();
|
||||
instance.transferShares(src, dst, volume, price);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of executeOrders method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testExecuteOrders() {
|
||||
System.out.println("executeOrders");
|
||||
Exchange instance = new Exchange();
|
||||
instance.executeOrders();
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of ExecuteOrder method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testExecuteOrder() {
|
||||
System.out.println("ExecuteOrder");
|
||||
BuyOrder o = null;
|
||||
Exchange instance = new Exchange();
|
||||
instance.ExecuteOrder(o);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of SendOrder method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testSendOrder() {
|
||||
System.out.println("SendOrder");
|
||||
Order o = null;
|
||||
Exchange instance = new Exchange();
|
||||
Order expResult = null;
|
||||
Order result = instance.SendOrder(o);
|
||||
assertEquals(expResult, result);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getlastprice method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetlastprice() {
|
||||
System.out.println("getlastprice");
|
||||
Exchange instance = new Exchange();
|
||||
double expResult = 0.0;
|
||||
double result = instance.getlastprice();
|
||||
assertEquals(expResult, result, 0.0);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of run method, of class Exchange.
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testRun() {
|
||||
System.out.println("run");
|
||||
Exchange instance = new Exchange();
|
||||
instance.run();
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
}
|
51
src/test/java/sesim/Test.java
Normal file
51
src/test/java/sesim/Test.java
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2017, tobias
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package sesim;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tobias
|
||||
*/
|
||||
public class Test {
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
Exchange se = new Exchange();
|
||||
|
||||
double aid;
|
||||
aid = se.createAccount(100, 110);
|
||||
System.out.print(aid);
|
||||
System.out.print("\n");
|
||||
|
||||
aid = se.createAccount(100, 110);
|
||||
System.out.print(aid);
|
||||
System.out.print("\n");
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user