Initial commit
This commit is contained in:
parent
a7858e2959
commit
c1e3e2162c
58
src/StockExchange/Account.java
Normal file
58
src/StockExchange/Account.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public class Account {
|
||||||
|
public long shares=0; // number of shares
|
||||||
|
public double money=0; // amount of money
|
||||||
|
public String name="";
|
||||||
|
public boolean orderpending=false;
|
||||||
|
|
||||||
|
private double bound_money;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void print_current(){
|
||||||
|
System.out.printf("%s shares: %d credit: %.2f\n",
|
||||||
|
name, shares,money
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SellOrder Sell (long size, double limit, Exchange ex){
|
||||||
|
SellOrder o = new SellOrder();
|
||||||
|
o.account=this;
|
||||||
|
o.limit=limit;
|
||||||
|
o.size=size;
|
||||||
|
|
||||||
|
orderpending=true;
|
||||||
|
ex.SendOrder(o);
|
||||||
|
return o;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public BuyOrder Buy (long size, double limit, Exchange ex ){
|
||||||
|
if (size * limit > money)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
BuyOrder o = new BuyOrder();
|
||||||
|
o.limit=limit;
|
||||||
|
o.size=size;
|
||||||
|
o.account=this;
|
||||||
|
orderpending=true;
|
||||||
|
ex.SendOrder(o);
|
||||||
|
return o;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Buy( Account a,long size, double price)
|
||||||
|
{
|
||||||
|
shares+=size;
|
||||||
|
money-= price * size;
|
||||||
|
a.shares-=size;
|
||||||
|
a.money+=price * size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
21
src/StockExchange/BuyOrder.java
Normal file
21
src/StockExchange/BuyOrder.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public class BuyOrder extends Order implements Comparable<Order>{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public int compareTo(Order o){
|
||||||
|
|
||||||
|
if (o.limit < limit)
|
||||||
|
{
|
||||||
|
//System.out.println("return 1");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (o.limit > limit){
|
||||||
|
//System.out.println("return -1");
|
||||||
|
return +1;
|
||||||
|
}
|
||||||
|
// System.out.println("0000000000000000000000");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
21
src/StockExchange/Logger.java
Normal file
21
src/StockExchange/Logger.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public class Logger {
|
||||||
|
|
||||||
|
static boolean dbg=true;
|
||||||
|
static boolean info=true;
|
||||||
|
|
||||||
|
static void dbg(String s){
|
||||||
|
if (!dbg)
|
||||||
|
return;
|
||||||
|
System.out.print("DBG: ");
|
||||||
|
System.out.println(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void info(String s){
|
||||||
|
if (!info)
|
||||||
|
return;
|
||||||
|
System.out.print("INFO: ");
|
||||||
|
System.out.println(s);
|
||||||
|
}
|
||||||
|
}
|
88
src/StockExchange/MTrader.java
Normal file
88
src/StockExchange/MTrader.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class MTrader implements Trader {
|
||||||
|
Exchange ex;
|
||||||
|
Random rand;
|
||||||
|
|
||||||
|
public MTrader (Exchange ex1, long shares, double money){
|
||||||
|
account.money=money;
|
||||||
|
account.shares=shares;
|
||||||
|
this.ex=ex;
|
||||||
|
rand = new Random();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoBuy()
|
||||||
|
{
|
||||||
|
// System.out.println("AAA");
|
||||||
|
|
||||||
|
if (account.orderpending)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (account.money <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
double perc = rand.nextDouble() * 1.0;
|
||||||
|
double lp = ex.lastprice;
|
||||||
|
double limit = lp/100 * perc + lp;
|
||||||
|
|
||||||
|
// System.out.println("HW");
|
||||||
|
long size = (int)(account.money/limit);
|
||||||
|
|
||||||
|
|
||||||
|
account.Buy(size, limit, ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoSell()
|
||||||
|
{
|
||||||
|
// System.out.println("SoSell");
|
||||||
|
|
||||||
|
if (account.orderpending)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (account.shares<=0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
double perc = rand.nextDouble() * 1.0;
|
||||||
|
double lp = ex.lastprice;
|
||||||
|
double limit = lp - lp/100 * perc;
|
||||||
|
|
||||||
|
long size = (int)(account.shares);
|
||||||
|
|
||||||
|
|
||||||
|
account.Sell(size, limit, ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void trade(){
|
||||||
|
|
||||||
|
|
||||||
|
// What to do?
|
||||||
|
int action = rand.nextInt(3);
|
||||||
|
// System.out.print("Action");
|
||||||
|
// System.out.println(action);
|
||||||
|
if (action==0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (action == 1)
|
||||||
|
{
|
||||||
|
DoBuy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == 2)
|
||||||
|
{
|
||||||
|
DoSell();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//System.out.printf("MyPrice: %.2f\n",price);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/StockExchange/Order.java
Normal file
41
src/StockExchange/Order.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class Order implements Comparable<Order>{
|
||||||
|
public long timestamp=0;
|
||||||
|
public long size;
|
||||||
|
public double limit;
|
||||||
|
// long time;
|
||||||
|
double money=0;
|
||||||
|
// public long shares=0;
|
||||||
|
public long id=0;
|
||||||
|
public Account account=null;
|
||||||
|
|
||||||
|
|
||||||
|
enum OrderStatus {
|
||||||
|
open,executed,canceled
|
||||||
|
}
|
||||||
|
|
||||||
|
OrderStatus status=OrderStatus.open;
|
||||||
|
|
||||||
|
public long getAge(){
|
||||||
|
if (timestamp==0)
|
||||||
|
return 0;
|
||||||
|
return System.currentTimeMillis()-timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
String format_limit(){
|
||||||
|
if (limit <0.0){
|
||||||
|
return "n.a.";
|
||||||
|
}
|
||||||
|
return String.format("%.2f",limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
String format_size(){
|
||||||
|
return String.format("%d", size);
|
||||||
|
}
|
||||||
|
|
||||||
|
Order(){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
146
src/StockExchange/RandomTrader.java
Normal file
146
src/StockExchange/RandomTrader.java
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
import StockExchange.Order.OrderStatus;
|
||||||
|
|
||||||
|
public class RandomTrader extends ThreadedTrader{
|
||||||
|
|
||||||
|
// public Account account=new Account();
|
||||||
|
Exchange ex=null;
|
||||||
|
Random rand = new Random();
|
||||||
|
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
// my current order
|
||||||
|
private Order myorder=null;
|
||||||
|
|
||||||
|
|
||||||
|
public RandomTrader (Exchange ex, long shares, double money){
|
||||||
|
account.money=money;
|
||||||
|
account.shares=shares;
|
||||||
|
this.ex=ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoBuy()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (myorder!=null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (account.money <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
double perc = rand.nextDouble() * 1.0;
|
||||||
|
double lp = ex.lastprice;
|
||||||
|
double limit = lp/100 * perc + lp;
|
||||||
|
|
||||||
|
|
||||||
|
long size = (int)(account.money/(limit*1));
|
||||||
|
|
||||||
|
|
||||||
|
myorder = account.Buy(size, limit, ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoSell()
|
||||||
|
{
|
||||||
|
if (myorder!=null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (account.shares<=0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
double perc = rand.nextDouble() * 1.0;
|
||||||
|
double lp = ex.lastprice;
|
||||||
|
double limit = lp - lp/100 * perc;
|
||||||
|
|
||||||
|
long size = (int)(account.shares);
|
||||||
|
|
||||||
|
|
||||||
|
myorder= account.Sell(size, limit, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void trade(){
|
||||||
|
|
||||||
|
if (myorder != null)
|
||||||
|
{
|
||||||
|
long age = myorder.getAge();
|
||||||
|
if (myorder.status == OrderStatus.executed)
|
||||||
|
{
|
||||||
|
myorder=null;
|
||||||
|
// System.out.println(name);
|
||||||
|
// System.out.println("----------------------");
|
||||||
|
// account.print_current();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (myorder.getAge()>10){
|
||||||
|
//System.out.println("Shall cancel now");
|
||||||
|
//System.out.println(myorder.status);
|
||||||
|
ex.CancelOrder(myorder);
|
||||||
|
myorder=null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// What to do?
|
||||||
|
int action = rand.nextInt(3);
|
||||||
|
/* System.out.print(name);
|
||||||
|
System.out.println("---------------------------");
|
||||||
|
System.out.print("Action:");
|
||||||
|
System.out.println(action);
|
||||||
|
*/
|
||||||
|
/* if (action==0)
|
||||||
|
{
|
||||||
|
DoSell();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (action == 1)
|
||||||
|
{
|
||||||
|
DoBuy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == 2)
|
||||||
|
{
|
||||||
|
DoSell();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* public void run(){
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
sleep(200);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
System.out.println("Interrupted");
|
||||||
|
}
|
||||||
|
// System.out.println("Trader has slept");
|
||||||
|
trade();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
15
src/StockExchange/SellOrder.java
Normal file
15
src/StockExchange/SellOrder.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public class SellOrder extends Order {
|
||||||
|
|
||||||
|
public int compareTo(Order o) {
|
||||||
|
|
||||||
|
if (o.limit < limit) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (o.limit > limit) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
26
src/StockExchange/ThreadedTrader.java
Normal file
26
src/StockExchange/ThreadedTrader.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public abstract class ThreadedTrader extends Thread implements Trader {
|
||||||
|
|
||||||
|
protected long sleeptime=100;
|
||||||
|
|
||||||
|
public void RandomTrader (Exchange ex, long shares, double money){
|
||||||
|
// this.ex=ex;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run(){
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
sleep(sleeptime);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
System.out.println("Interrupted");
|
||||||
|
}
|
||||||
|
trade();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
10
src/StockExchange/Trader.java
Normal file
10
src/StockExchange/Trader.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
|
||||||
|
public interface Trader{
|
||||||
|
String name = null;
|
||||||
|
public void trade();
|
||||||
|
public Account account=new Account();
|
||||||
|
// public Exchange ex=null;
|
||||||
|
|
||||||
|
};
|
37
src/StockExchange/TraderRun.java
Normal file
37
src/StockExchange/TraderRun.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package StockExchange;
|
||||||
|
|
||||||
|
public class TraderRun extends Thread{
|
||||||
|
public String tname = "";
|
||||||
|
public Exchange ex;
|
||||||
|
|
||||||
|
public void run(){
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
sleep(100);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
System.out.println("Interrupted");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
System.out.printf("%s locking\n", tname);
|
||||||
|
ex.Lock();
|
||||||
|
System.out.printf("%s locked\n", tname);
|
||||||
|
|
||||||
|
try{
|
||||||
|
sleep(1000);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {
|
||||||
|
System.out.println("Interrupted");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.printf("%s unlocking\n", tname);
|
||||||
|
// ex.Free();
|
||||||
|
System.out.printf("%s unlocked\n", tname);
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user