From 1de297da368ea983995736e3f2d8812a2ded91bc Mon Sep 17 00:00:00 2001 From: 7u83 <7u83@maiol.ru> Date: Tue, 27 Dec 2016 20:16:56 +0100 Subject: [PATCH] Nice orderbook --- nbproject/build-impl.xml | 86 ++++++++++++----------------------- nbproject/genfiles.properties | 6 +-- nbproject/private/private.xml | 2 - nbproject/project.properties | 3 +- nbproject/project.xml | 1 - src/Gui/OrderBook.form | 7 +-- src/Gui/OrderBook.java | 68 +++++++++++++++++++++++++-- src/Gui/OrderBookPanel.form | 2 +- src/Gui/OrderBookPanel.java | 11 ++++- src/SeSim/BuyOrder.java | 15 +++--- src/SeSim/Exchange.java | 58 ++++++++++++++++++----- src/SeSim/Order.java | 64 +++++++++++++++++++++++++- src/SeSim/SellOrder.java | 22 +++++---- 13 files changed, 242 insertions(+), 103 deletions(-) diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml index e7a8288..d62f001 100644 --- a/nbproject/build-impl.xml +++ b/nbproject/build-impl.xml @@ -55,43 +55,7 @@ is divided into following sections: - - - - - - - - - - - - - - - - - - - - - - - - - - Must set platform.home - Must set platform.bootcp - Must set platform.java - Must set platform.javac - - The J2SE Platform is not correctly set up. - Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. - Either open the project in the IDE and setup the Platform with the same name or add it manually. - For example like this: - ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) - or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) - + @@ -220,6 +184,20 @@ is divided into following sections: + + + + + + + + + + + + + + @@ -289,7 +267,7 @@ is divided into following sections: - + @@ -329,7 +307,7 @@ is divided into following sections: - + @@ -410,7 +388,7 @@ is divided into following sections: - + @@ -433,7 +411,7 @@ is divided into following sections: - + @@ -472,7 +450,7 @@ is divided into following sections: - + @@ -552,7 +530,7 @@ is divided into following sections: - + @@ -577,7 +555,7 @@ is divided into following sections: - + @@ -757,9 +735,6 @@ is divided into following sections: - - - @@ -775,9 +750,7 @@ is divided into following sections: - - - + @@ -802,7 +775,7 @@ is divided into following sections: - + @@ -829,7 +802,7 @@ is divided into following sections: - + @@ -1027,7 +1000,7 @@ is divided into following sections: To run this application from the command line without Ant, try: - ${platform.java} -jar "${dist.jar.resolved}" + java -jar "${dist.jar.resolved}" @@ -1236,13 +1209,10 @@ is divided into following sections: - - - - + - + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties index 226336f..58bfaf6 100644 --- a/nbproject/genfiles.properties +++ b/nbproject/genfiles.properties @@ -1,8 +1,8 @@ -build.xml.data.CRC32=1799545a +build.xml.data.CRC32=56c4c4cc build.xml.script.CRC32=cbcf3329 build.xml.stylesheet.CRC32=8064a381@1.79.1.48 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=1799545a -nbproject/build-impl.xml.script.CRC32=71cc6074 +nbproject/build-impl.xml.data.CRC32=56c4c4cc +nbproject/build-impl.xml.script.CRC32=beaa60d7 nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48 diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index efc4e0b..7a84094 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -13,10 +13,8 @@ file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBook.java file:/home/tube/NetBeansProjects/SeSim/manifest.mf file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Account.java - file:/home/tube/NetBeansProjects/SeSim/nbproject/build-impl.xml file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Exchange.java file:/home/tube/NetBeansProjects/SeSim/src/Gui/Chart.java - file:/home/tube/NetBeansProjects/SeSim/nbproject/project.properties file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBookCell.java file:/home/tube/NetBeansProjects/SeSim/src/Gui/AskBook.java file:/home/tube/NetBeansProjects/SeSim/src/Gui/BidBook.java diff --git a/nbproject/project.properties b/nbproject/project.properties index 8c65bfa..1d64b4a 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -43,7 +43,7 @@ javac.classpath=\ ${file.reference.jfreechart-1.5.0.jar}:\ ${file.reference.jcommon-1.0.23.jar} # Space-separated list of extra javac options -javac.compilerargs= +javac.compilerargs=-Xlint:unchecked javac.deprecation=false javac.external.vm=true javac.processorpath=\ @@ -88,6 +88,7 @@ manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF mkdist.disabled=false platform.active=default_platform +#platforms.default_platform.home=${java.home} project.license=bsd run.classpath=\ ${javac.classpath}:\ diff --git a/nbproject/project.xml b/nbproject/project.xml index da48c83..f6b6657 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -10,7 +10,6 @@ SeSim - diff --git a/src/Gui/OrderBook.form b/src/Gui/OrderBook.form index 47d1711..b698c74 100644 --- a/src/Gui/OrderBook.form +++ b/src/Gui/OrderBook.form @@ -16,17 +16,17 @@ - + - + - + @@ -73,6 +73,7 @@ + diff --git a/src/Gui/OrderBook.java b/src/Gui/OrderBook.java index 788a824..d017d0a 100644 --- a/src/Gui/OrderBook.java +++ b/src/Gui/OrderBook.java @@ -29,6 +29,12 @@ import java.util.ArrayList; import java.util.Formatter; import java.util.concurrent.Callable; import javax.swing.table.AbstractTableModel; +import javax.swing.table.JTableHeader; + +import java.awt.*; +import javax.swing.*; +import javax.swing.table.*; + /** * @@ -37,6 +43,26 @@ import javax.swing.table.AbstractTableModel; public abstract class OrderBook extends javax.swing.JPanel { abstract ArrayList getArrayList(); + + public class DateCellRenderer extends DefaultTableCellRenderer { + + String pattern; + public DateCellRenderer(String pattern){ + this.pattern = pattern; + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + DefaultTableCellRenderer renderer = (DefaultTableCellRenderer)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + renderer.setBackground(hdr_color); + //renderer.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + // renderer.setText("Halloe"); + + return renderer; + } +} + Color hdr_color = Color.LIGHT_GRAY; boolean getDesc() { return false; @@ -104,11 +130,42 @@ public abstract class OrderBook extends javax.swing.JPanel { public OrderBook() { System.out.print("init Orderbook]\n"); initComponents(); + + this.setBorder(BorderFactory.createEmptyBorder()); + this.orderBookScroller.setBorder(BorderFactory.createBevelBorder(0)); if (MainWin.se == null) { return; } this.orderBookList.setModel(new SListModel()); + orderBookList.setBorder(BorderFactory.createEmptyBorder()); + + JTableHeader h = this.orderBookList.getTableHeader(); + h.setBackground(hdr_color); + + h.setForeground(Color.green); + + + + // h.setDefaultRenderer(this.orderBookList.getCellRenderer(0, 0)); +// h.setBorder(BorderFactory.createLineBorder(Color.yellow)); + + h.setDefaultRenderer(new DateCellRenderer("Hhu")); + + +/* h.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer(){ + @Override + public Component getTableCellRendererComponent( + JTable x, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + JComponent component = (JComponent)orderBookList.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(orderBookList, value, false, false, -1, -2); + component.setBackground(new Color(250, 250, 250)); + component.setBorder(BorderFactory.createEmptyBorder()); + return component; + } + }); + */ + } /** @@ -120,7 +177,7 @@ public abstract class OrderBook extends javax.swing.JPanel { // //GEN-BEGIN:initComponents private void initComponents() { - jScrollPane1 = new javax.swing.JScrollPane(); + orderBookScroller = new javax.swing.JScrollPane(); orderBookList = new javax.swing.JTable(); orderBookList.setModel(new javax.swing.table.DefaultTableModel( @@ -168,23 +225,24 @@ public abstract class OrderBook extends javax.swing.JPanel { return canEdit [columnIndex]; } }); - jScrollPane1.setViewportView(orderBookList); + orderBookList.setFocusable(false); + orderBookScroller.setViewportView(orderBookList); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE) + .addComponent(orderBookScroller, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) + .addComponent(orderBookScroller, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) ); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable orderBookList; + private javax.swing.JScrollPane orderBookScroller; // End of variables declaration//GEN-END:variables } diff --git a/src/Gui/OrderBookPanel.form b/src/Gui/OrderBookPanel.form index e3f6f22..78c7b2e 100644 --- a/src/Gui/OrderBookPanel.form +++ b/src/Gui/OrderBookPanel.form @@ -3,7 +3,7 @@
- + diff --git a/src/Gui/OrderBookPanel.java b/src/Gui/OrderBookPanel.java index 1d3156a..0493356 100644 --- a/src/Gui/OrderBookPanel.java +++ b/src/Gui/OrderBookPanel.java @@ -26,6 +26,7 @@ package Gui; //import SeSim.*; +import static java.lang.Thread.sleep; import javax.swing.AbstractListModel; import javax.swing.table.AbstractTableModel; import java.util.ArrayList; @@ -53,6 +54,14 @@ public class OrderBookPanel extends javax.swing.JPanel { MainWin.myAccount.Sell(100, 19.3, MainWin.se); + try { + sleep(1000); + } catch (InterruptedException e) { + System.out.println("Interrupted"); + return; + } + + MainWin.myAccount.Sell(310, 6112.156, MainWin.se); MainWin.myAccount.Sell(3, 7112.156, MainWin.se); @@ -86,7 +95,7 @@ public class OrderBookPanel extends javax.swing.JPanel { jLabel4 = new javax.swing.JLabel(); bidBook1 = new Gui.BidBook(); - setPreferredSize(new java.awt.Dimension(150, 262)); + setPreferredSize(new java.awt.Dimension(220, 262)); setLayout(new java.awt.GridBagLayout()); askBook1.setPreferredSize(new java.awt.Dimension(200, 200)); diff --git a/src/SeSim/BuyOrder.java b/src/SeSim/BuyOrder.java index 43bbd5f..ee052f0 100644 --- a/src/SeSim/BuyOrder.java +++ b/src/SeSim/BuyOrder.java @@ -2,18 +2,21 @@ package SeSim; public class BuyOrder extends Order implements Comparable { - @Override - public int compareTo(Order o) { - + /* @Override + public int compareLimit(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; } +*/ + public BuyOrder(){ + type=OrderType.buy; + } + } diff --git a/src/SeSim/Exchange.java b/src/SeSim/Exchange.java index 30e2c57..49e79fa 100644 --- a/src/SeSim/Exchange.java +++ b/src/SeSim/Exchange.java @@ -74,8 +74,8 @@ public class Exchange extends Thread { double lastprice = 300.0; long lastsize; - public TreeSet bid; - public TreeSet ask; + public TreeSet bid; + public TreeSet ask; private final Semaphore available = new Semaphore(1, true); @@ -93,7 +93,7 @@ public class Exchange extends Thread { } public ArrayList geAskBook(int n){ - ArrayList ret = new ArrayList(); + ArrayList ret= new ArrayList<>(); Iterator it=ask.iterator(); for(int i=0;i ret = new ArrayList<>(); Iterator it=bid.iterator(); for(int i=0;i { */ public double limit; - // double money = 0; - + /** + * Order ID + */ public long id = 0; + + /** + * Type of order + */ + public OrderType type; + public Account account = null; + + protected int compareLimit(Order o){ + int r=0; + if (o.limit < limit) { + r=-1; + } + if (o.limit > limit) { + r=1; + } + if (r==0) + return 0; + + if (type==OrderType.sell) + return 1-r; + + return r; + + }; + + @Override + public int compareTo(Order o) { + + if (o.type!=type){ + System.out.print("OrderType Missmatch\n"); + return -1; + } + + int r = compareLimit(o); + if (r!=0) + return r; + + if (o.timestamp< timestamp) + return -1; + + if (o.timestamp>timestamp) + return 1; + + + if (o.id>id) + return -1; + + if (o.id limit) { - return -1; - } - return 0; + + return super.compareTo(o); + + } + + public SellOrder(){ + type=OrderType.buy; + } +*/ + + public SellOrder(){ + type=OrderType.sell; } }