55
55
import quickfix .field .TimeInForce ;
56
56
import quickfix .fix42 .ExecutionReport ;
57
57
import quickfix .fix42 .MarketDataRequest ;
58
+ import quickfix .fix42 .MarketDataSnapshotFullRefresh ;
58
59
import quickfix .fix42 .NewOrderSingle ;
59
60
import quickfix .fix42 .OrderCancelRequest ;
60
61
61
62
import java .util .ArrayList ;
63
+ import quickfix .field .CxlRejResponseTo ;
64
+ import quickfix .field .MDEntryPx ;
65
+ import quickfix .field .MDEntryType ;
66
+ import quickfix .field .MDReqID ;
67
+ import quickfix .field .OrdRejReason ;
68
+ import quickfix .fix42 .OrderCancelReject ;
62
69
63
70
public class Application extends MessageCracker implements quickfix .Application {
64
71
private final OrderMatcher orderMatcher = new OrderMatcher ();
@@ -103,7 +110,7 @@ public void onMessage(NewOrderSingle message, SessionID sessionID) throws FieldN
103
110
104
111
processOrder (order );
105
112
} catch (Exception e ) {
106
- rejectOrder (senderCompId , targetCompId , clOrdId , symbol , side , e .getMessage ());
113
+ rejectOrder (targetCompId , senderCompId , clOrdId , symbol , side , e .getMessage ());
107
114
}
108
115
}
109
116
@@ -117,6 +124,7 @@ private void rejectOrder(String senderCompId, String targetCompId, String clOrdI
117
124
118
125
fixOrder .setString (ClOrdID .FIELD , clOrdId );
119
126
fixOrder .setString (Text .FIELD , message );
127
+ fixOrder .setInt (OrdRejReason .FIELD , OrdRejReason .BROKER_EXCHANGE_OPTION );
120
128
121
129
try {
122
130
Session .sendToTarget (fixOrder , senderCompId , targetCompId );
@@ -187,9 +195,23 @@ public void onMessage(OrderCancelRequest message, SessionID sessionID) throws Fi
187
195
char side = message .getChar (Side .FIELD );
188
196
String id = message .getString (OrigClOrdID .FIELD );
189
197
Order order = orderMatcher .find (symbol , side , id );
190
- order .cancel ();
191
- cancelOrder (order );
192
- orderMatcher .erase (order );
198
+ if (order != null ) {
199
+ order .cancel ();
200
+ cancelOrder (order );
201
+ orderMatcher .erase (order );
202
+ } else {
203
+ OrderCancelReject fixOrderReject = new OrderCancelReject (new OrderID ("NONE" ), new ClOrdID (message .getString (ClOrdID .FIELD )),
204
+ new OrigClOrdID (message .getString (OrigClOrdID .FIELD )), new OrdStatus (OrdStatus .REJECTED ), new CxlRejResponseTo (CxlRejResponseTo .ORDER_CANCEL_REQUEST ));
205
+
206
+ String senderCompId = message .getHeader ().getString (SenderCompID .FIELD );
207
+ String targetCompId = message .getHeader ().getString (TargetCompID .FIELD );
208
+ fixOrderReject .getHeader ().setString (SenderCompID .FIELD , targetCompId );
209
+ fixOrderReject .getHeader ().setString (TargetCompID .FIELD , senderCompId );
210
+ try {
211
+ Session .sendToTarget (fixOrderReject , targetCompId , senderCompId );
212
+ } catch (SessionNotFound e ) {
213
+ }
214
+ }
193
215
}
194
216
195
217
public void onMessage (MarketDataRequest message , SessionID sessionID ) throws FieldNotFound ,
@@ -204,10 +226,26 @@ public void onMessage(MarketDataRequest message, SessionID sessionID) throws Fie
204
226
//int marketDepth = message.getInt(MarketDepth.FIELD);
205
227
int relatedSymbolCount = message .getInt (NoRelatedSym .FIELD );
206
228
229
+ MarketDataSnapshotFullRefresh fixMD = new MarketDataSnapshotFullRefresh ();
230
+ fixMD .setString (MDReqID .FIELD , message .getString (MDReqID .FIELD ));
231
+
207
232
for (int i = 1 ; i <= relatedSymbolCount ; ++i ) {
208
233
message .getGroup (i , noRelatedSyms );
209
234
String symbol = noRelatedSyms .getString (Symbol .FIELD );
210
- System .err .println ("*** market data: " + symbol );
235
+ fixMD .setString (Symbol .FIELD , symbol );
236
+ }
237
+
238
+ MarketDataSnapshotFullRefresh .NoMDEntries noMDEntries = new MarketDataSnapshotFullRefresh .NoMDEntries ();
239
+ noMDEntries .setChar (MDEntryType .FIELD , '0' );
240
+ noMDEntries .setDouble (MDEntryPx .FIELD , 123.45 );
241
+ fixMD .addGroup (noMDEntries );
242
+ String senderCompId = message .getHeader ().getString (SenderCompID .FIELD );
243
+ String targetCompId = message .getHeader ().getString (TargetCompID .FIELD );
244
+ fixMD .getHeader ().setString (SenderCompID .FIELD , targetCompId );
245
+ fixMD .getHeader ().setString (TargetCompID .FIELD , senderCompId );
246
+ try {
247
+ Session .sendToTarget (fixMD , targetCompId , senderCompId );
248
+ } catch (SessionNotFound e ) {
211
249
}
212
250
}
213
251
0 commit comments