fix协议介绍12-取消订单被拒(OrderCacelReject)

35 篇文章 0 订阅
34 篇文章 16 订阅

FIX.5.0SP2 Message

OrderCancelReject [type '9']

<OrdCxlRej>

The order cancel reject message is issued by the broker upon receipt of a cancel request or cancel/replace request message which cannot be honored.


Added  FIX.2.7

Expand Components | Collapse Components

  Field or Component Field Name FIXML name Req'd Comments Depr.
Component StandardHeader BaseHeader

MsgType = 9

 
37 OrderID @OrdID

If CxlRejReason="Unknown order", specify "NONE".

 
198 SecondaryOrderID @OrdID2  

Can be used to provide order id used by exchange or executing system.

 
526 SecondaryClOrdID @ID2      
11 ClOrdID @ID

Unique order id assigned by institution or by the intermediary with closest association with the investor. to the cancel request or to the replacement order.

 
583 ClOrdLinkID @LnkID      
41 OrigClOrdID @OrigID  

ClOrdID(11) which could not be canceled/replaced. ClOrdID of the previous accepted order (NOT the initial order of the day) when canceling or replacing an order.

Required when referring to orders that were electronically submitted over FIX or otherwise assigned a ClOrdID.

 
39 OrdStatus @Stat

OrdStatus value after this cancel reject is applied.

If CxlRejReason = "Unknown Order", specify Rejected.

 
636 WorkingIndicator @WorkingInd  

For optional use with OrdStatus = 0 (New)

 
586 OrigOrdModTime @OrigOrdModTm      
66 ListID @ListID  

Required for rejects against orders which were submitted as part of a list.

 
1 Account @Acct      
660 AcctIDSource @AcctIDSrc      
581 AccountType @AcctTyp      
229 TradeOriginationDate @OrignDt      
75 TradeDate @TrdDt      
60 TransactTime @TxnTm      
434 CxlRejResponseTo @CxlRejRspTo    
102 CxlRejReason @CxlRejRsn      
58 Text @Txt      
354 EncodedTextLen @EncTxtLen  

Must be set if EncodedText field is specified and must immediately precede it.

 
355 EncodedText @EncTxt  

Encoded (non-ASCII characters) representation of the Text field in the encoded format specified via the MessageEncoding field.

 
Component StandardTrailer      


消息实现:

package cs.mina.codec.msg;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import cs.mina.exception.InValidDataException;

/*
 *@author(huangxiaoping)
 *@date 2013-11-29
 */
public class OrderCancelRejectMsg extends BaseMsg {
	private Tag clOrdID=new Tag("11","String",true);
	private Tag parties=new PartiesTag(false);
	private Tag orderID=new Tag("37","String",true);
	private Tag origClOrdID=new Tag("41","String",false);
	private Tag ordStatus=new Tag("39","char",true);
	private Tag cxlRejResponseTo=new Tag("434","char",true);
	private Tag cxlRejReason=new Tag("102","int",false);
	private Tag rejectText=new Tag("1328","String",false);
	private Tag transactTime=new Tag("60","UTCTimestamp",true);
	
	private Set<String> tagIdsSet=new HashSet<String>();
	public OrderCancelRejectMsg(){
		this.getHeadEntity().getMsgType().setTagValue("9");
		tagIdsSet.add("11");
		tagIdsSet.add("37");
		tagIdsSet.add("41");
		tagIdsSet.add("39");
		tagIdsSet.add("434");
		tagIdsSet.add("102");
		tagIdsSet.add("1328");
		tagIdsSet.add("60");
		this.bodyEntity.getBodyTagList().add(clOrdID);
		this.bodyEntity.getBodyTagList().add(parties);
		this.bodyEntity.getBodyTagList().add(orderID);
		this.bodyEntity.getBodyTagList().add(origClOrdID);
		this.bodyEntity.getBodyTagList().add(ordStatus);
		this.bodyEntity.getBodyTagList().add(cxlRejResponseTo);
		this.bodyEntity.getBodyTagList().add(cxlRejReason);
		this.bodyEntity.getBodyTagList().add(rejectText);
		this.bodyEntity.getBodyTagList().add(transactTime);
	}
	
	@Override
	public void decodeBody() {
		Set<String> already=new HashSet<String>();
		String input=this.body;
		while(input.length()!=0){
			String firstTagId=input.substring(0, input.indexOf("="));
			if(firstTagId.equals("453")){
				input=this.getParties().decode(input, already);
			}else{
				List<Tag> tagList=this.bodyEntity.getBodyTagList();
				boolean exist=false;
				for(int j=0;j<tagList.size();j++){
					Tag tag=tagList.get(j);
					if(tag.getTagId().equals(firstTagId)){
						input=tag.decode(input, already);
						exist=true;
						break;
					}
				}
				if(!exist){
					throw new InValidDataException(firstTagId+"不在消息字段中");
				}
			}
			
		}
	}

	@Override
	public void validate() {
		this.headEntity.validate();
		List<Tag> bodyTagList=this.bodyEntity.getBodyTagList();
		for(int i=0;i<bodyTagList.size();i++){
			bodyTagList.get(i).validate();
		}
		this.tailerEntity.validate();
		if(ordStatus.getTagValue()!=null){
			if(!MsgUtil.ordStatus.contains(ordStatus.getTagValue())){
				throw new InValidDataException("ordStatus错误["+ordStatus.getTagId()+"="+ordStatus.getTagValue()+"]");
			}
		}
		if(cxlRejResponseTo.getTagValue()!=null){
			if(!MsgUtil.cxlRejResponseTo.contains(cxlRejResponseTo.getTagValue())){
				throw new InValidDataException("cxlRejResponseTo错误["+cxlRejResponseTo.getTagId()+"="+cxlRejResponseTo.getTagValue()+"]");
			}
		}
		if(cxlRejReason.getTagValue()!=null){
			if(!((Integer.parseInt(cxlRejReason.getTagValue())>=0&&Integer.parseInt(cxlRejReason.getTagValue())<=8)||Integer.parseInt(cxlRejReason.getTagValue())==18||Integer.parseInt(cxlRejReason.getTagValue())==99||Integer.parseInt(cxlRejReason.getTagValue())==103)){
				throw new InValidDataException("cxlRejReason错误["+cxlRejReason.getTagId()+"="+cxlRejReason.getTagValue()+"]");
			}
		}
	}

	public Tag getClOrdID() {
		return clOrdID;
	}

	public void setClOrdID(Tag clOrdID) {
		this.clOrdID = clOrdID;
	}

	public Tag getParties() {
		return parties;
	}

	public void setParties(Tag parties) {
		this.parties = parties;
	}

	public Tag getOrderID() {
		return orderID;
	}

	public void setOrderID(Tag orderID) {
		this.orderID = orderID;
	}

	public Tag getOrigClOrdID() {
		return origClOrdID;
	}

	public void setOrigClOrdID(Tag origClOrdID) {
		this.origClOrdID = origClOrdID;
	}

	public Tag getOrdStatus() {
		return ordStatus;
	}

	public void setOrdStatus(Tag ordStatus) {
		this.ordStatus = ordStatus;
	}

	public Tag getCxlRejResponseTo() {
		return cxlRejResponseTo;
	}

	public void setCxlRejResponseTo(Tag cxlRejResponseTo) {
		this.cxlRejResponseTo = cxlRejResponseTo;
	}

	public Tag getCxlRejReason() {
		return cxlRejReason;
	}

	public void setCxlRejReason(Tag cxlRejReason) {
		this.cxlRejReason = cxlRejReason;
	}

	public Tag getRejectText() {
		return rejectText;
	}

	public void setRejectText(Tag rejectText) {
		this.rejectText = rejectText;
	}

	public Tag getTransactTime() {
		return transactTime;
	}

	public void setTransactTime(Tag transactTime) {
		this.transactTime = transactTime;
	}

	public Set<String> getTagIdsSet() {
		return tagIdsSet;
	}

	public void setTagIdsSet(Set<String> tagIdsSet) {
		this.tagIdsSet = tagIdsSet;
	}

}

处理逻辑:略




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值