日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

交易系统开发(十一)——QuickFIX简介

發(fā)布時間:2024/3/7 windows 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 交易系统开发(十一)——QuickFIX简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、QuickFIX簡介

1、QuickFIX簡介

QuickFIX是一款C++實現的開源FIX引擎,同時提供Python、Ruby語言實現。

QuickFIX官網:

http://www.quickfixengine.org
Github地址:

https://github.com/quickfix/quickfix

2、QuickFIX編譯

編譯選項配置:

configure

編譯:

make

檢查:

make check

安裝:

sudo make install

二、FIX應用模式

1、FIX應用模式簡介

FIX應用有initiator和acceptor兩種模式。

initiator是TCP連接的發(fā)起方,acceptor是TCP連接監(jiān)聽方。標準FIX應用(如CTS FIX網關)可以同時支持initiator和acceptor兩種模式,既可以發(fā)起連接,也可以接受連接請求。
開發(fā)FIX應用時,需要先確定FIX應用模式,然后選擇對應的QuickFIX類對象。

initiator模式的FIX應用可以使用SocketInitiator、SSLSocketInitiator、ThreadedSocketInitiator、ThreadedSSLSocketInitiator創(chuàng)建FIX Initiator應用。

acceptor模式的FIX應用可以使用SocketAcceptor、SSLSocketAcceptor、ThreadedSocketAcceptor、ThreadedSSLSocketAcceptor創(chuàng)建FIX Acceptor應用。

2、FIX通信

FIX應用業(yè)務是通過在initiator與acceptor間建立一個FIX Session并交換消息來進行的。FIX業(yè)務消息有一系列預定義類型與格式,目前標準的消息類型有5、60個,函蓋了交易、行情、結算等投資管理的各個環(huán)節(jié)。FIX應用開發(fā)基本上是對FIX消息的編程。

Fix Session可以由一個或多個Fix連接組成,即Fix Session可以多次登陸。Fix Session通常使用幾個重要標識區(qū)分,如Fix版本號字符串(如:FIX.4.2),發(fā)送者ID,接收者ID,Fix Session每發(fā)送一條消息時,消息頭的BeginString、SenderCompID、TargetCompID都會被賦值。當消息通過FIX連接到達對等方時,對等方可以根據消息頭中的的標識找到本地端的Fix Session去處理消息。

FIX通信雙方包括Initiator和Acceptor,會各自維護2個遞增的序列號(發(fā)送消息序列號–每發(fā)送一個消息加1,接收消息序列號–每收到一個消息加1)。
(1)通信首先由Initiator開始發(fā)起TCP連接請求, Acceptor接收網絡連接請求,建立TCP連接。
(2)Initiator發(fā)起登錄消息請求。
(3)Acceptor收到登錄請求后,經過一系列消息檢查,合格后,返回登錄確認。

(4)Initiator收到登錄確認后,經過一系列消息檢查,合格后,雙方FIX Session連接成功。
(5)Initiator和Acceptor交換消息。
(6)Initiator和Acceptor任何一方發(fā)出退出消息。

3、FIX Session配置

QuickFix中initiator或acceptor會維護多個Fix Session。QuickFix中使用BeginString(Fix版本號)、SenderCompID、TargetCompID的組合標識一個Session,Session標識用于區(qū)分其它不同的Session。

Session配置文件包含[DEFAULT]和[SESSION]兩種分節(jié),[SESSION]分節(jié)表示QuickFix中定義一個Session,[DEFAULT]表示所有Session默認使用的配置項,如果不提供QuickFix所需的配置,QuickFix會拋出ConfigError異常,表示配置缺失或格式不正確。

如果[DEFAULT]和[SESSION]分區(qū)中都包含相同的配置項,則[SESSION]分區(qū)的配置項會覆蓋[DEFAULT]分區(qū)相應的配置項。

QuickFix配置文件sessions.ini如下:

[DEFAULT] ConnectionType=initiator ReconnectInterval=60 FileLogPath=log FileStorePath=store StartTime=00:00:00 EndTime=23:59:59 HeartBtInt=30 ResetOnDisconnect=Y ResetOnLogout=Y ResetOnLogon=Y[SESSION] BeginString=FIX.4.2 SenderCompID=CLIENT TargetCompID=SERVER SocketConnectPort=6666 SocketConnectHost=127.0.0.1 DataDictionary=FIX42.xml

三、QuickFIX核心類

1、FIX::Application

FIX應用需要實現FIX::Application接口:

class?Application { public:virtual?~Application()?{};///?Notification?of?a?session?begin?createdvirtual?void?onCreate(?const?SessionID&?)?=?0;///?Notification?of?a?session?successfully?logging?onvirtual?void?onLogon(?const?SessionID&?)?=?0;///?Notification?of?a?session?logging?off?or?disconnectingvirtual?void?onLogout(?const?SessionID&?)?=?0;///?Notification?of?admin?message?being?sent?to?targetvirtual?void?toAdmin(?Message&,?const?SessionID&?)?=?0;///?Notification?of?app?message?being?sent?to?targetvirtual?void?toApp(?Message&,?const?SessionID&?)EXCEPT?(?DoNotSend )?=?0;///?Notification?of?admin?message?being?received?from?targetvirtual?void?fromAdmin(?const?Message&,?const?SessionID&?)EXCEPT?(?FieldNotFound,?IncorrectDataFormat,?IncorrectTagValue,?RejectLogon?)?=?0;///?Notification?of?app?message?being?received?from?targetvirtual?void?fromApp(?const?Message&,?const?SessionID&?)EXCEPT?(?FieldNotFound,?IncorrectDataFormat,?IncorrectTagValue,?UnsupportedMessageType?)?=?0; };

onCreate:當一個Fix Session建立時調用。

onLogon:當一個Fix Session登錄成功時調用。

onLogout:當一個Fix Session退出時調用。

fromAdmin:當收到一個消息,經過一系列檢查,合格后,屬于Admin類型時調用。

fromApp:當收到一個消息,經過一系列檢查,合格后,不屬于Admin 類型時候調用。

toAdmin:當發(fā)送一個admin類型消息調用。

toApp:當發(fā)送一個非admin(業(yè)務類型)消息調用。

如果需要使用QuickFIX開發(fā)FIX應用,則需要實現FIX::Application接口,并重載不同FIX協(xié)議版本的MessageCracker::OnMessage接口,如FIX42::MessageCracker。

FIX業(yè)務都是異步方式處理的,而業(yè)務處理的基本對象是消息。OnMessage是消息接收回調函數,有多個重載版本,開發(fā)者只需要使重載一個FIX版本即可。

對于支持交易業(yè)務的FIX Initiator應用,通常要重寫4個基本消息,即OnMessage(NewOrderSingle)、OnMessage(CancelRequest)、 OnMessage(ExecutionReport)、 OnMessage(CancelReject),分別用于做委托、撤單、執(zhí)行回報(包括對委托的拒絕)和對撤單的拒絕等4項業(yè)務。

#include?"quickfix/Application.h" #include?"quickfix/MessageCracker.h"class?FIXApplication:?public?FIX::Application,?public?FIX::MessageCracker { public:/***************************************************??reimplementation?from?Application*?***********************************************////?Notification?of?a?session?begin?createdvirtual?void?onCreate(?const?SessionID&?){}///?Notification?of?a?session?successfully?logging?onvirtual?void?onLogon(?const?SessionID&?){}///?Notification?of?a?session?logging?off?or?disconnectingvirtual?void?onLogout(?const?SessionID&?){}///?Notification?of?admin?message?being?sent?to?targetvirtual?void?toAdmin(?Message&,?const?SessionID&?){}///?Notification?of?app?message?being?sent?to?targetvoid?fromApp(?const?FIX::Message&?message,?const?FIX::SessionID&?sessionID?)throw(?FIX::FieldNotFound&,?FIX::IncorrectDataFormat&,?FIX::IncorrectTagValue&,FIX::UnsupportedMessageType&?){crack(message,?sessionID);}///?Notification?of?admin?message?being?received?from?targetvirtual?void?fromAdmin(?const?Message&,?const?SessionID&?)throw?(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,FIX::RejectLogon?){}///?Notification?of?app?message?being?received?from?targetvirtual?void?fromApp(?const?Message&,?const?SessionID&?)throw?(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,FIX::UnsupportedMessageType?){}/***************************************************??reimplementation?from?FIX42::MessageCracker*?***********************************************/virtual?void?onMessage(?const?FIX42::NewOrderSingle&?message,?const?FIX::SessionID&?){}virtual?void?onMessage(?const?FIX42::OrderCancelRequest&?message,?const?FIX::SessionID&?){}virtual?void?onMessage(?ExecutionReport&,?const?FIX::SessionID&?){}virtual?void?onMessage(?OrderCancelReject&,?const?FIX::SessionID&?){} };

2、FIX::SessionSettings

FIX應用配置使用FIX::SessionSettings讀取FIX Session配置文件并傳遞給QuickFIX框架。一個FIX應用可以管理多個FIX?Session,每個Session可以采用相同的FIX協(xié)議版本,也可以采用不同的版本。即使采用的是相同的FIX協(xié)議版本,不同FIX Session間也可以有FIX協(xié)議細節(jié)的差異,通過綁定FIX Session與FIX協(xié)議字典的方式來實現,即在Session配置文件中[Session]配置項中使用DataDictionary選項指定相應FIX字典文件來實現。

FIX::SessionSettings?settings("sessionConfig.ini");

3、FIX::FileStoreFactory

QuickFIX提供了存儲消息到文件的類FIX::FileLogFactory。消息文件存儲的路徑在Session配置中指定。

FIX::FileStoreFactory?storeFactory(settings);

4、FIX::MessageStoreFactory

QuickFIX提供了給Fix Session持久化類型(如文件存儲、數據存儲,存儲內容包括狀態(tài)、創(chuàng)建時間、消息及其自己維護的發(fā)送序列號和接收序列號等)。

如果開發(fā)者要自定義持久化方式,可以自己定義MessageStoreFactory實現,并且自定義一種MessageStore。

5、FIX::FileLogFactory

QuickFIX提供了存儲所有日志事件到文件的類FIX::FileLogFactory。

6、FIX::ScreenLogFactory

QuickFIX中提供了顯示所有消息事件到標準輸出的類ScreenLogFactory。

FIX::ScreenLogFactory?logFactory(settings);

7、FIX::Message

QuickFIX中定義了不同FIX協(xié)議版本消息的基類FIX::Message,用于定義FIX消息的通用結構,不同的FIX消息版本的消息定義在不同的FIX命名空間內定義,如FIX42::Message。FIX::MessageCracker則繼承了所有不同FIX協(xié)議版本的MessageCracker類,接收消息后生成具體FIX協(xié)議Message對象實現對消息進行處理。

8、FIX::Session

無論是FIX Initiator應用還是FIX Acceptor應用,在Fix Session初始化時,即在FIX::SessionFactory創(chuàng)建Fix Session后都會檢查Fix Session時間范圍。如果Fix Session啟動不是當天有效的Session,則會重置Fix Session的發(fā)送序列號和接收序列號。(FIX規(guī)定一個Fix Session一般不超過24小時)。

FIX::Session部分接口定義如下:

class?Session { public:static?bool?sendToTarget(?Message&?message,const?std::string&?qualifier?=?""?)EXCEPT?(?SessionNotFound );static?bool?sendToTarget(?Message&?message,const?SessionID&?sessionID?)EXCEPT?(?SessionNotFound );static?bool?sendToTarget(?Message&,const?SenderCompID&?senderCompID,const?TargetCompID&?targetCompID,const?std::string&?qualifier?=?""?)EXCEPT?(?SessionNotFound );static?bool?sendToTarget(?Message&?message,const?std::string&?senderCompID,const?std::string&?targetCompID,const?std::string&?qualifier?=?""?)EXCEPT?(?SessionNotFound );bool?send(?Message&?);void?next();void?next(?const?UtcTimeStamp&?timeStamp?);void?next(?const?std::string&,?const?UtcTimeStamp&?timeStamp,?bool?queued?=?false?);void?next(?const?Message&,?const?UtcTimeStamp&?timeStamp,?bool?queued?=?false?); };

next()方法是定時運行的一個方法,主要用于檢測是否需要發(fā)心跳消息,是否需要發(fā)TEST消息,是否需要斷開連接,是否需要產生LOGON(Initiator)。

next( const Message&)方法用于處理Session收到的FIX消息。

9、FIX::Acceptor

FIX::Acceptor用于從Session配置文件讀取信息創(chuàng)建和管理本Acceptor支持的FIX Session,具體FIX Session的TCP連接管理、數據讀寫由具體的SocketAcceptor、SSLSocketAcceptor、ThreadedSocketAcceptor、ThreadedSSLSocketAcceptor實現。

FIX::Acceptor*?acceptor?=?new?FIX::SocketAcceptor(application,?storeFactory,?settings,?logFactory);

10、FIX::Initiator

FIX::Initiator用于從Session配置文件讀取信息創(chuàng)建和管理本Initiator支持的FIX Session,具體FIX Session的TCP連接管理、數據讀寫由具體的SocketInitiator、SSLSocketInitiator、ThreadedSocketInitiator、ThreadedSSLSocketInitiator實現。

FIX::Initiator?*?initiator?=?new?FIX::SocketInitiator(application,?storeFactory,?settings,?logFactory);

四、FIX Acceptor應用開發(fā)

1、FIX Acceptor應用簡介

FIX Acceptor應用通常用于FIX網關,部署在賣方側。

2、FIX Acceptor應用創(chuàng)建

(1)創(chuàng)建FIX Session配置對象

FIX::SessionSettings settings(sessionFile);

(2)創(chuàng)建FIX應用:

Application application;

創(chuàng)建日志工廠:

LogFactory logFactory(settings);

創(chuàng)建消息存儲文件工廠:

FIX::FileStoreFactory storeFactory(settings);

創(chuàng)建Acceptor服務端:

FIX::Acceptor* acceptor = new SocketAcceptor(application, storeFactory, settings, logFactory);

啟動SocketAcceptor:

acceptor->start();

3、FIX Acceptor應用示例

Executor示例演示了接收訂單請求并返回成交回執(zhí)的FIX Acceptor應用。

Application.h文件:

#ifndef?EXECUTOR_APPLICATION_H #define?EXECUTOR_APPLICATION_H#include?"quickfix/Application.h" #include?"quickfix/MessageCracker.h" #include?"quickfix/Values.h" #include?"quickfix/Utility.h" #include?"quickfix/Mutex.h"#include?"quickfix/fix40/NewOrderSingle.h" #include?"quickfix/fix41/NewOrderSingle.h" #include?"quickfix/fix42/NewOrderSingle.h" #include?"quickfix/fix43/NewOrderSingle.h" #include?"quickfix/fix44/NewOrderSingle.h" #include?"quickfix/fix50/NewOrderSingle.h"class?Application :?public?FIX::Application,?public?FIX::MessageCracker { public:Application()?:?m_orderID(0),?m_execID(0)?{}//?Application?overloadsvoid?onCreate(?const?FIX::SessionID&?);void?onLogon(?const?FIX::SessionID&?sessionID?);void?onLogout(?const?FIX::SessionID&?sessionID?);void?toAdmin(?FIX::Message&,?const?FIX::SessionID&?);void?toApp(?FIX::Message&,?const?FIX::SessionID&?)EXCEPT(?FIX::DoNotSend?);void?fromAdmin(?const?FIX::Message&,?const?FIX::SessionID&?)EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::RejectLogon?);void?fromApp(?const?FIX::Message&?message,?const?FIX::SessionID&?sessionID?)EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::UnsupportedMessageType?);//?MessageCracker?overloadsvoid?onMessage(?const?FIX40::NewOrderSingle&,?const?FIX::SessionID&?);void?onMessage(?const?FIX41::NewOrderSingle&,?const?FIX::SessionID&?);void?onMessage(?const?FIX42::NewOrderSingle&,?const?FIX::SessionID&?);void?onMessage(?const?FIX43::NewOrderSingle&,?const?FIX::SessionID&?);void?onMessage(?const?FIX44::NewOrderSingle&,?const?FIX::SessionID&?);void?onMessage(?const?FIX50::NewOrderSingle&,?const?FIX::SessionID&?);std::string?genOrderID()?{std::stringstream?stream;stream?<<?++m_orderID;return?stream.str();}std::string?genExecID()?{std::stringstream?stream;stream?<<?++m_execID;return?stream.str();} private:int?m_orderID,?m_execID; };#endif

Application.cpp文件:

#include?"config.h" #include?"Application.h" #include?"quickfix/Session.h"#include?"quickfix/fix40/ExecutionReport.h" #include?"quickfix/fix41/ExecutionReport.h" #include?"quickfix/fix42/ExecutionReport.h" #include?"quickfix/fix43/ExecutionReport.h" #include?"quickfix/fix44/ExecutionReport.h" #include?"quickfix/fix50/ExecutionReport.h"void?Application::onCreate(?const?FIX::SessionID&?sessionID?)?{} void?Application::onLogon(?const?FIX::SessionID&?sessionID?)?{} void?Application::onLogout(?const?FIX::SessionID&?sessionID?)?{} void?Application::toAdmin(?FIX::Message&?message,const?FIX::SessionID&?sessionID?)?{} void?Application::toApp(?FIX::Message&?message,const?FIX::SessionID&?sessionID?) EXCEPT(?FIX::DoNotSend?)?{}void?Application::fromAdmin(?const?FIX::Message&?message,const?FIX::SessionID&?sessionID?) EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::RejectLogon?)?{}void?Application::fromApp(?const?FIX::Message&?message,const?FIX::SessionID&?sessionID?) EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::UnsupportedMessageType?) {?crack(?message,?sessionID?);?}void?Application::onMessage(?const?FIX40::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX40::ExecutionReport?executionReport?=?FIX40::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecTransType(?FIX::ExecTransType_NEW?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),symbol,side,orderQty,FIX::LastShares(?orderQty?),FIX::LastPx(?price?),FIX::CumQty(?orderQty?),FIX::AvgPx(?price?)?);executionReport.set(?clOrdID?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }void?Application::onMessage(?const?FIX41::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX41::ExecutionReport?executionReport?=?FIX41::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecTransType(?FIX::ExecTransType_NEW?),FIX::ExecType(?FIX::ExecType_FILL?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),symbol,side,orderQty,FIX::LastShares(?orderQty?),FIX::LastPx(?price?),FIX::LeavesQty(?0?),FIX::CumQty(?orderQty?),FIX::AvgPx(?price?)?);executionReport.set(?clOrdID?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }void?Application::onMessage(?const?FIX42::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX42::ExecutionReport?executionReport?=?FIX42::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecTransType(?FIX::ExecTransType_NEW?),FIX::ExecType(?FIX::ExecType_FILL?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),symbol,side,FIX::LeavesQty(?0?),FIX::CumQty(?orderQty?),FIX::AvgPx(?price?)?);executionReport.set(?clOrdID?);executionReport.set(?orderQty?);executionReport.set(?FIX::LastShares(?orderQty?)?);executionReport.set(?FIX::LastPx(?price?)?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }void?Application::onMessage(?const?FIX43::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX43::ExecutionReport?executionReport?=?FIX43::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecType(?FIX::ExecType_FILL?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),side,FIX::LeavesQty(?0?),FIX::CumQty(?orderQty?),FIX::AvgPx(?price?)?);executionReport.set(?clOrdID?);executionReport.set(?symbol?);executionReport.set(?orderQty?);executionReport.set(?FIX::LastQty(?orderQty?)?);executionReport.set(?FIX::LastPx(?price?)?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }void?Application::onMessage(?const?FIX44::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX44::ExecutionReport?executionReport?=?FIX44::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecType(?FIX::ExecType_TRADE?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),side,FIX::LeavesQty(?0?),FIX::CumQty(?orderQty?),FIX::AvgPx(?price?)?);executionReport.set(?clOrdID?);executionReport.set(?symbol?);executionReport.set(?orderQty?);executionReport.set(?FIX::LastQty(?orderQty?)?);executionReport.set(?FIX::LastPx(?price?)?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }void?Application::onMessage(?const?FIX50::NewOrderSingle&?message,const?FIX::SessionID&?sessionID?) {FIX::Symbol?symbol;FIX::Side?side;FIX::OrdType?ordType;FIX::OrderQty?orderQty;FIX::Price?price;FIX::ClOrdID?clOrdID;FIX::Account?account;message.get(?ordType?);if?(?ordType?!=?FIX::OrdType_LIMIT?)throw?FIX::IncorrectTagValue(?ordType.getField()?);message.get(?symbol?);message.get(?side?);message.get(?orderQty?);message.get(?price?);message.get(?clOrdID?);FIX50::ExecutionReport?executionReport?=?FIX50::ExecutionReport(?FIX::OrderID(?genOrderID()?),FIX::ExecID(?genExecID()?),FIX::ExecType(?FIX::ExecType_TRADE?),FIX::OrdStatus(?FIX::OrdStatus_FILLED?),side,FIX::LeavesQty(?0?),FIX::CumQty(?orderQty?)?);executionReport.set(?clOrdID?);executionReport.set(?symbol?);executionReport.set(?orderQty?);executionReport.set(?FIX::LastQty(?orderQty?)?);executionReport.set(?FIX::LastPx(?price?)?);executionReport.set(?FIX::AvgPx(?price?)?);if(?message.isSet(account)?)executionReport.setField(?message.get(account)?);try{FIX::Session::sendToTarget(?executionReport,?sessionID?);}catch?(?FIX::SessionNotFound&?)?{} }

main.cpp文件:

#include?"config.h" #include?"quickfix/FileStore.h" #include?"quickfix/SocketAcceptor.h" #include?"quickfix/Log.h" #include?"quickfix/SessionSettings.h" #include?"Application.h" #include?<string> #include?<iostream> #include?<fstream>void?wait() {std::cout?<<?"Type?Ctrl-C?to?quit"?<<?std::endl;while(true){FIX::process_sleep(1);} }int?main(?int?argc,?char**?argv?) {if?(?argc?<?2?){std::cout?<<?"usage:?"?<<?argv[?0?]<<?"?FILE."?<<?std::endl;return?0;}std::string?file?=?argv[?1?];FIX::Acceptor?*?acceptor?=?0;try{FIX::SessionSettings?settings(?file?);Application?application;FIX::FileStoreFactory?storeFactory(?settings?);FIX::ScreenLogFactory?logFactory(?settings?);acceptor?=?new?FIX::SocketAcceptor?(?application,?storeFactory,?settings,?logFactory?);acceptor->start();wait();acceptor->stop();delete?acceptor;return?0;}catch?(?std::exception?&?e?){std::cout?<<?e.what()?<<?std::endl;delete?acceptor;return?1;} }

五、FIX Initiator應用開發(fā)

1、FIX Initiator應用簡介

FIX Initiator應用通常用于交易客戶端,部署在買方側。

2、FIX Initiator應用創(chuàng)建

(1)創(chuàng)建FIX Session配置對象

FIX::SessionSettings settings(sessionFile);

(2)創(chuàng)建FIX應用:

Application application;

創(chuàng)建日志工廠:

LogFactory logFactory(settings);

創(chuàng)建消息存儲文件工廠:

FIX::FileStoreFactory storeFactory(settings);

創(chuàng)建Acceptor服務端:

FIX::Initiator* client= new SocketInitiator(application, storeFactory,settings, logFactory);

啟動SocketInitiator:

client->start();

3、FIX Initiator應用示例

tradeclient交易客戶端

Application.h文件:

#ifndef?TRADECLIENT_APPLICATION_H #define?TRADECLIENT_APPLICATION_H#include?"quickfix/Application.h" #include?"quickfix/MessageCracker.h" #include?"quickfix/Values.h" #include?"quickfix/Mutex.h"#include?"quickfix/fix40/NewOrderSingle.h" #include?"quickfix/fix40/ExecutionReport.h" #include?"quickfix/fix40/OrderCancelRequest.h" #include?"quickfix/fix40/OrderCancelReject.h" #include?"quickfix/fix40/OrderCancelReplaceRequest.h"#include?"quickfix/fix41/NewOrderSingle.h" #include?"quickfix/fix41/ExecutionReport.h" #include?"quickfix/fix41/OrderCancelRequest.h" #include?"quickfix/fix41/OrderCancelReject.h" #include?"quickfix/fix41/OrderCancelReplaceRequest.h"#include?"quickfix/fix42/NewOrderSingle.h" #include?"quickfix/fix42/ExecutionReport.h" #include?"quickfix/fix42/OrderCancelRequest.h" #include?"quickfix/fix42/OrderCancelReject.h" #include?"quickfix/fix42/OrderCancelReplaceRequest.h"#include?"quickfix/fix43/NewOrderSingle.h" #include?"quickfix/fix43/ExecutionReport.h" #include?"quickfix/fix43/OrderCancelRequest.h" #include?"quickfix/fix43/OrderCancelReject.h" #include?"quickfix/fix43/OrderCancelReplaceRequest.h" #include?"quickfix/fix43/MarketDataRequest.h"#include?"quickfix/fix44/NewOrderSingle.h" #include?"quickfix/fix44/ExecutionReport.h" #include?"quickfix/fix44/OrderCancelRequest.h" #include?"quickfix/fix44/OrderCancelReject.h" #include?"quickfix/fix44/OrderCancelReplaceRequest.h" #include?"quickfix/fix44/MarketDataRequest.h"#include?"quickfix/fix50/NewOrderSingle.h" #include?"quickfix/fix50/ExecutionReport.h" #include?"quickfix/fix50/OrderCancelRequest.h" #include?"quickfix/fix50/OrderCancelReject.h" #include?"quickfix/fix50/OrderCancelReplaceRequest.h" #include?"quickfix/fix50/MarketDataRequest.h"#include?<queue>class?Application?:public?FIX::Application,public?FIX::MessageCracker { public:void?run();private:void?onCreate(?const?FIX::SessionID&?)?{}void?onLogon(?const?FIX::SessionID&?sessionID?);void?onLogout(?const?FIX::SessionID&?sessionID?);void?toAdmin(?FIX::Message&,?const?FIX::SessionID&?)?{}void?toApp(?FIX::Message&,?const?FIX::SessionID&?)EXCEPT(?FIX::DoNotSend?);void?fromAdmin(?const?FIX::Message&,?const?FIX::SessionID&?)EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::RejectLogon?)?{}void?fromApp(?const?FIX::Message&?message,?const?FIX::SessionID&?sessionID?)EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::UnsupportedMessageType?);void?onMessage(?const?FIX42::ExecutionReport&,?const?FIX::SessionID&?);void?onMessage(?const?FIX42::OrderCancelReject&,?const?FIX::SessionID&?);void?queryEnterOrder();void?queryCancelOrder();void?queryReplaceOrder();FIX42::NewOrderSingle?queryNewOrderSingle42();FIX42::OrderCancelRequest?queryOrderCancelRequest42();FIX42::OrderCancelReplaceRequest?queryCancelReplaceRequest42();void?queryHeader(?FIX::Header&?header?);char?queryAction();int?queryVersion();bool?queryConfirm(?const?std::string&?query?);FIX::SenderCompID?querySenderCompID();FIX::TargetCompID?queryTargetCompID();FIX::TargetSubID?queryTargetSubID();FIX::ClOrdID?queryClOrdID();FIX::OrigClOrdID?queryOrigClOrdID();FIX::Symbol?querySymbol();FIX::Side?querySide();FIX::OrderQty?queryOrderQty();FIX::OrdType?queryOrdType();FIX::Price?queryPrice();FIX::StopPx?queryStopPx();FIX::TimeInForce?queryTimeInForce(); };#endif

Application.cpp文件:

#include?"config.h" #include?"Application.h" #include?"quickfix/Session.h" #include?<iostream>void?Application::onLogon(?const?FIX::SessionID&?sessionID?) {std::cout?<<?std::endl?<<?"Logon?-?"?<<?sessionID?<<?std::endl; }void?Application::onLogout(?const?FIX::SessionID&?sessionID?) {std::cout?<<?std::endl?<<?"Logout?-?"?<<?sessionID?<<?std::endl; }void?Application::fromApp(?const?FIX::Message&?message,?const?FIX::SessionID&?sessionID?) EXCEPT(?FIX::FieldNotFound,?FIX::IncorrectDataFormat,?FIX::IncorrectTagValue,?FIX::UnsupportedMessageType?) {crack(?message,?sessionID?);std::cout?<<?std::endl?<<?"IN:?"?<<?message?<<?std::endl; }void?Application::toApp(?FIX::Message&?message,?const?FIX::SessionID&?sessionID?) EXCEPT(?FIX::DoNotSend?) {try{FIX::PossDupFlag?possDupFlag;message.getHeader().getField(?possDupFlag?);if?(?possDupFlag?)?throw?FIX::DoNotSend();}catch?(?FIX::FieldNotFound&?)?{}std::cout?<<?std::endl<<?"OUT:?"?<<?message?<<?std::endl; }void?Application::onMessage (?const?FIX42::ExecutionReport&,?const?FIX::SessionID&?)?{}void?Application::onMessage (?const?FIX42::OrderCancelReject&,?const?FIX::SessionID&?)?{}void?Application::run() {while?(?true?){try{char?action?=?queryAction();if?(?action?==?'1'?)queryEnterOrder();else?if?(?action?==?'2'?)queryCancelOrder();else?if?(?action?==?'3'?)queryReplaceOrder();else?if?(?action?==?'5'?)break;}catch?(?std::exception?&?e?){std::cout?<<?"Message?Not?Sent:?"?<<?e.what();}} }void?Application::queryEnterOrder() {int?version?=?queryVersion();std::cout?<<?"\nNewOrderSingle\n";FIX::Message?order;switch?(?version?)?{case?42:order?=?queryNewOrderSingle42();break;default:std::cerr?<<?"No?test?for?version?"?<<?version?<<?std::endl;break;}if?(?queryConfirm(?"Send?order"?)?)FIX::Session::sendToTarget(?order?); }void?Application::queryCancelOrder() {int?version?=?queryVersion();std::cout?<<?"\nOrderCancelRequest\n";FIX::Message?cancel;switch?(?version?)?{case?42:cancel?=?queryOrderCancelRequest42();break;default:std::cerr?<<?"No?test?for?version?"?<<?version?<<?std::endl;break;}if?(?queryConfirm(?"Send?cancel"?)?)FIX::Session::sendToTarget(?cancel?); }void?Application::queryReplaceOrder() {int?version?=?queryVersion();std::cout?<<?"\nCancelReplaceRequest\n";FIX::Message?replace;switch?(?version?)?{case?42:replace?=?queryCancelReplaceRequest42();break;default:std::cerr?<<?"No?test?for?version?"?<<?version?<<?std::endl;break;}if?(?queryConfirm(?"Send?replace"?)?)FIX::Session::sendToTarget(?replace?); }FIX42::NewOrderSingle?Application::queryNewOrderSingle42() {FIX::OrdType?ordType;FIX42::NewOrderSingle?newOrderSingle(queryClOrdID(),?FIX::HandlInst(?'1'?),?querySymbol(),?querySide(),FIX::TransactTime(),?ordType?=?queryOrdType()?);newOrderSingle.set(?queryOrderQty()?);newOrderSingle.set(?queryTimeInForce()?);if?(?ordType?==?FIX::OrdType_LIMIT?||?ordType?==?FIX::OrdType_STOP_LIMIT?)newOrderSingle.set(?queryPrice()?);if?(?ordType?==?FIX::OrdType_STOP?||?ordType?==?FIX::OrdType_STOP_LIMIT?)newOrderSingle.set(?queryStopPx()?);queryHeader(?newOrderSingle.getHeader()?);return?newOrderSingle; }FIX42::OrderCancelRequest?Application::queryOrderCancelRequest42() {FIX42::OrderCancelRequest?orderCancelRequest(?queryOrigClOrdID(),queryClOrdID(),?querySymbol(),?querySide(),?FIX::TransactTime()?);orderCancelRequest.set(?queryOrderQty()?);queryHeader(?orderCancelRequest.getHeader()?);return?orderCancelRequest; }FIX42::OrderCancelReplaceRequest?Application::queryCancelReplaceRequest42() {FIX42::OrderCancelReplaceRequest?cancelReplaceRequest(queryOrigClOrdID(),?queryClOrdID(),?FIX::HandlInst(?'1'?),querySymbol(),?querySide(),?FIX::TransactTime(),?queryOrdType()?);if?(?queryConfirm(?"New?price"?)?)cancelReplaceRequest.set(?queryPrice()?);if?(?queryConfirm(?"New?quantity"?)?)cancelReplaceRequest.set(?queryOrderQty()?);queryHeader(?cancelReplaceRequest.getHeader()?);return?cancelReplaceRequest; }void?Application::queryHeader(?FIX::Header&?header?) {header.setField(?querySenderCompID()?);header.setField(?queryTargetCompID()?);if?(?queryConfirm(?"Use?a?TargetSubID"?)?)header.setField(?queryTargetSubID()?); }char?Application::queryAction() {char?value;std::cout?<<?std::endl<<?"1)?Enter?Order"?<<?std::endl<<?"2)?Cancel?Order"?<<?std::endl<<?"3)?Replace?Order"?<<?std::endl<<?"4)?Market?data?test"?<<?std::endl<<?"5)?Quit"?<<?std::endl<<?"Action:?";std::cin?>>?value;switch?(?value?){case?'1':?case?'2':?case?'3':?case?'4':?case?'5':?break;default:?throw?std::exception();}return?value; }int?Application::queryVersion() {char?value;std::cout?<<?std::endl<<?"1)?FIX.4.0"?<<?std::endl<<?"2)?FIX.4.1"?<<?std::endl<<?"3)?FIX.4.2"?<<?std::endl<<?"4)?FIX.4.3"?<<?std::endl<<?"5)?FIX.4.4"?<<?std::endl<<?"6)?FIXT.1.1?(FIX.5.0)"?<<?std::endl<<?"BeginString:?";std::cin?>>?value;switch?(?value?){case?'1':?return?40;case?'2':?return?41;case?'3':?return?42;case?'4':?return?43;case?'5':?return?44;case?'6':?return?50;default:?throw?std::exception();} }bool?Application::queryConfirm(?const?std::string&?query?) {std::string?value;std::cout?<<?std::endl?<<?query?<<?"?:?";std::cin?>>?value;return?toupper(?*value.c_str()?)?==?'Y'; }FIX::SenderCompID?Application::querySenderCompID() {std::string?value;std::cout?<<?std::endl?<<?"SenderCompID:?";std::cin?>>?value;return?FIX::SenderCompID(?value?); }FIX::TargetCompID?Application::queryTargetCompID() {std::string?value;std::cout?<<?std::endl?<<?"TargetCompID:?";std::cin?>>?value;return?FIX::TargetCompID(?value?); }FIX::TargetSubID?Application::queryTargetSubID() {std::string?value;std::cout?<<?std::endl?<<?"TargetSubID:?";std::cin?>>?value;return?FIX::TargetSubID(?value?); }FIX::ClOrdID?Application::queryClOrdID() {std::string?value;std::cout?<<?std::endl?<<?"ClOrdID:?";std::cin?>>?value;return?FIX::ClOrdID(?value?); }FIX::OrigClOrdID?Application::queryOrigClOrdID() {std::string?value;std::cout?<<?std::endl?<<?"OrigClOrdID:?";std::cin?>>?value;return?FIX::OrigClOrdID(?value?); }FIX::Symbol?Application::querySymbol() {std::string?value;std::cout?<<?std::endl?<<?"Symbol:?";std::cin?>>?value;return?FIX::Symbol(?value?); }FIX::Side?Application::querySide() {char?value;std::cout?<<?std::endl<<?"1)?Buy"?<<?std::endl<<?"2)?Sell"?<<?std::endl<<?"3)?Sell?Short"?<<?std::endl<<?"4)?Sell?Short?Exempt"?<<?std::endl<<?"5)?Cross"?<<?std::endl<<?"6)?Cross?Short"?<<?std::endl<<?"7)?Cross?Short?Exempt"?<<?std::endl<<?"Side:?";std::cin?>>?value;switch?(?value?){case?'1':?return?FIX::Side(?FIX::Side_BUY?);case?'2':?return?FIX::Side(?FIX::Side_SELL?);case?'3':?return?FIX::Side(?FIX::Side_SELL_SHORT?);case?'4':?return?FIX::Side(?FIX::Side_SELL_SHORT_EXEMPT?);case?'5':?return?FIX::Side(?FIX::Side_CROSS?);case?'6':?return?FIX::Side(?FIX::Side_CROSS_SHORT?);case?'7':?return?FIX::Side(?'A'?);default:?throw?std::exception();} }FIX::OrderQty?Application::queryOrderQty() {long?value;std::cout?<<?std::endl?<<?"OrderQty:?";std::cin?>>?value;return?FIX::OrderQty(?value?); }FIX::OrdType?Application::queryOrdType() {char?value;std::cout?<<?std::endl<<?"1)?Market"?<<?std::endl<<?"2)?Limit"?<<?std::endl<<?"3)?Stop"?<<?std::endl<<?"4)?Stop?Limit"?<<?std::endl<<?"OrdType:?";std::cin?>>?value;switch?(?value?){case?'1':?return?FIX::OrdType(?FIX::OrdType_MARKET?);case?'2':?return?FIX::OrdType(?FIX::OrdType_LIMIT?);case?'3':?return?FIX::OrdType(?FIX::OrdType_STOP?);case?'4':?return?FIX::OrdType(?FIX::OrdType_STOP_LIMIT?);default:?throw?std::exception();} }FIX::Price?Application::queryPrice() {double?value;std::cout?<<?std::endl?<<?"Price:?";std::cin?>>?value;return?FIX::Price(?value?); }FIX::StopPx?Application::queryStopPx() {double?value;std::cout?<<?std::endl?<<?"StopPx:?";std::cin?>>?value;return?FIX::StopPx(?value?); }FIX::TimeInForce?Application::queryTimeInForce() {char?value;std::cout?<<?std::endl<<?"1)?Day"?<<?std::endl<<?"2)?IOC"?<<?std::endl<<?"3)?OPG"?<<?std::endl<<?"4)?GTC"?<<?std::endl<<?"5)?GTX"?<<?std::endl<<?"TimeInForce:?";std::cin?>>?value;switch?(?value?){case?'1':?return?FIX::TimeInForce(?FIX::TimeInForce_DAY?);case?'2':?return?FIX::TimeInForce(?FIX::TimeInForce_IMMEDIATE_OR_CANCEL?);case?'3':?return?FIX::TimeInForce(?FIX::TimeInForce_AT_THE_OPENING?);case?'4':?return?FIX::TimeInForce(?FIX::TimeInForce_GOOD_TILL_CANCEL?);case?'5':?return?FIX::TimeInForce(?FIX::TimeInForce_GOOD_TILL_CROSSING?);default:?throw?std::exception();} }

main.cpp文件:

#include?"config.h" #include?"quickfix/FileStore.h" #include?"quickfix/SocketInitiator.h" #include?"quickfix/SessionSettings.h" #include?"quickfix/Log.h" #include?"Application.h" #include?<string> #include?<iostream> #include?<fstream>int?main(?int?argc,?char**?argv?) {if?(?argc?<?2?){std::cout?<<?"usage:?"?<<?argv[?0?]<<?"?FILE."?<<?std::endl;return?0;}std::string?file?=?argv[?1?];FIX::Initiator?*?initiator?=?0;try{FIX::SessionSettings?settings(?file?);Application?application;FIX::FileStoreFactory?storeFactory(?settings?);FIX::ScreenLogFactory?logFactory(?settings?);initiator?=?new?FIX::SocketInitiator(?application,?storeFactory,?settings,?logFactory?);initiator->start();application.run();initiator->stop();delete?initiator;return?0;}catch?(?std::exception?&?e?){std::cout?<<?e.what();delete?initiator;return?1;} }

總結

以上是生活随笔為你收集整理的交易系统开发(十一)——QuickFIX简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品视频国产一区 | 九色最新网址 | www.啪啪.com| 激情婷婷丁香 | 国产尤物在线视频 | 中文字幕在线观看免费观看 | 久久综合偷偷噜噜噜色 | 99国内精品久久久久久久 | 99久久99久久精品国产片果冰 | 又大又硬又黄又爽视频在线观看 | 欧美精品一区二区免费 | 在线观看视频你懂 | 亚洲欧美日韩精品久久奇米一区 | 日韩一级网站 | 中午字幕在线 | 亚洲精品网页 | 最近中文字幕完整高清 | 激情五月婷婷丁香 | 夜夜视频 | 少妇精品久久久一区二区免费 | 久久乐九色婷婷综合色狠狠182 | 国产美女视频 | 中文字幕免费中文 | 成人精品在线 | 亚洲人人爱 | 日韩欧美精品一区二区三区经典 | 中文字幕在线观看免费观看 | 亚洲精品综合在线观看 | 日韩欧美在线一区 | 狠狠操夜夜操 | 久久精品99视频 | 成年人在线免费看视频 | 亚洲四虎| 天天操夜操视频 | 婷婷激情综合五月天 | 欧美成天堂网地址 | 在线观看韩国av | 美女久久久久久久 | 18av在线视频 | 一区二区三区日韩精品 | 亚洲精品中文字幕视频 | 亚洲日本欧美 | 日女人电影 | 黄色三级免费网址 | 久久国产精品精品国产色婷婷 | 日韩av免费在线电影 | 国产精品欧美一区二区 | 色中色资源站 | 欧美成人精品三级在线观看播放 | 日韩视频免费观看高清 | 免费看黄网站在线 | 免费国产黄线在线观看视频 | 超碰在线网 | 国产精品一区欧美 | av免费成人 | 久久丁香| 国产中文字幕精品 | 亚洲最大的av网站 | 日韩欧美xxxx | 亚洲一区视频在线播放 | 日韩精品在线视频 | 日日爱影视 | 亚洲va欧美va人人爽春色影视 | 精品久久久久久国产偷窥 | 一级c片| 天天操操操操操 | 亚洲少妇自拍 | 久久久精品久久 | 69亚洲精品 | 国产高清视频在线播放一区 | 中文字幕在线观看网站 | 成人av在线资源 | 国产精品福利在线 | 黄色一级大片在线免费看产 | 精品国产免费人成在线观看 | 精品久久久网 | 久久线视频 | 成人免费视频网 | 蜜臀久久99精品久久久无需会员 | 色婷婷天天干 | 97精品国产97久久久久久久久久久久 | 国产色在线,com | 999精品在线| 97精品久久人人爽人人爽 | 国产精品麻豆果冻传媒在线播放 | 欧美日韩一区二区三区在线观看视频 | 久久永久视频 | 国产在线不卡视频 | 亚洲天天综合网 | 亚洲婷婷综合色高清在线 | 国产免费xvideos视频入口 | 在线观看福利网站 | 偷拍视频一区 | 99热这里精品 | 久久国产精品99久久久久久老狼 | 久久久国产精品一区二区中文 | 久久在线精品 | 99re视频在线观看 | 久久avav | 国产精品99蜜臀久久不卡二区 | 亚洲女同ⅹxx女同tv | 久久精品视频3 | 久久资源总站 | 国产一级免费av | 国产精品久久久久久久av大片 | 中文字幕日韩免费视频 | 中文字幕日韩无 | 91久久精品一区二区三区 | 99热在线国产精品 | 黄色在线视频网址 | 爱爱av网站| 国产精品亚洲片在线播放 | 97精品一区二区三区 | 91九色蝌蚪视频网站 | 久久久免费国产 | 伊香蕉大综综综合久久啪 | 黄色成年 | 亚洲国产日韩在线 | 玖玖精品在线 | 国内精品久久久久久久影视简单 | 久久久久久久久黄色 | 国产老妇av| 国产精品美女久久久免费 | 久一在线| 日韩在线看片 | 成人黄色在线视频 | 国产又粗又猛又爽又黄的视频先 | 久草精品视频在线播放 | 91伊人| 探花视频免费在线观看 | 久久精品www人人爽人人 | 国产免码va在线观看免费 | 香蕉久久久久久久 | 日韩在线观看高清 | 国产福利网站 | 久久99久久99免费视频 | 国产91综合一区在线观看 | 国产亚洲精品久久19p | 欧美精品一区二区蜜臀亚洲 | sesese图片 | av成人在线看 | 亚洲国产高清在线 | 成人全视频免费观看在线看 | 国产精品久久电影网 | 美女视频久久黄 | 2000xxx影视| 亚洲闷骚少妇在线观看网站 | 在线观看www视频 | 天堂av最新网址 | 97人人模人人爽人人喊网 | 91精品国产乱码 | 中文字幕一区二 | 日韩成人免费在线 | 在线激情电影 | 黄色一级免费 | 日日日日日 | 99久久精品国产一区二区成人 | 国产成人久久久77777 | 欧美孕妇与黑人孕交 | 97在线精品视频 | 麻豆视频在线免费看 | 久久久五月婷婷 | 欧美激情在线网站 | 中文字幕视频观看 | av在线免费网站 | 91手机在线看片 | 欧美性生活免费 | 九九免费精品 | 麻豆国产电影 | 天堂网一区 | 亚洲欧美婷婷六月色综合 | 精品国产一区二区三区四区vr | 国产免费黄色 | 久久久综合九色合综国产精品 | 久久久久久免费视频 | 一级a性色生活片久久毛片波多野 | 中文字幕欧美日韩va免费视频 | 91av视频播放 | 97成人资源站 | 在线观av| 天天做日日做天天爽视频免费 | 91影视成人 | 美女视频a美女大全免费下载蜜臀 | 91九色在线视频 | 毛片网在线观看 | 国内精品久久久久影院日本资源 | 亚洲少妇xxxx | 国产综合在线视频 | 精品一区二区三区香蕉蜜桃 | 探花视频免费在线观看 | 最近免费中文视频 | 国产日产av | 精品专区一区二区 | 日韩中文字幕电影 | 日韩精品 在线视频 | 中文字幕人成不卡一区 | 国产精品黄色 | 97av视频| 欧美一级高清片 | 手机在线看永久av片免费 | 又大又硬又黄又爽视频在线观看 | 久久久91精品国产一区二区精品 | 97**国产露脸精品国产 | 欧美精品一二 | 99免费在线观看视频 | 久久免费的视频 | 成人午夜精品久久久久久久3d | 日本黄色免费在线观看 | 成人国产电影在线观看 | 国产在线观看一 | 亚洲精品国产高清 | 色婷丁香| 97国产大学生情侣酒店的特点 | 黄色亚洲大片免费在线观看 | 日韩欧美电影在线观看 | 精品久久久99 | 99热手机在线观看 | 高清视频一区二区三区 | 成 人 黄 色视频免费播放 | 日日碰狠狠躁久久躁综合网 | 91在线视频一区 | 久草在线99| 亚洲成人999 | 婷婷综合av| 久久天天操 | 青草视频在线播放 | 日韩二区三区在线 | 亚洲国产精品成人女人久久 | 不卡中文字幕在线 | 日韩高清不卡一区二区三区 | 麻花传媒mv免费观看 | 欧美一二三视频 | 亚洲在线不卡 | 日本中文一区二区 | 中文在线字幕免费观看 | 成人亚洲精品国产www | 99热精品国产一区二区在线观看 | 国产精品成人一区二区三区吃奶 | 精品无人国产偷自产在线 | a黄色片| 视频在线观看亚洲 | 午夜视频在线观看一区二区三区 | av在线短片 | 九色免费视频 | 日韩高清一二区 | 精品久久久久久国产偷窥 | 青青草国产免费 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 狠狠色噜噜狠狠 | 精品福利在线观看 | 成人在线观看资源 | 欧美精品在线观看 | 亚洲第二色 | 成人国产精品免费观看 | 最近更新的中文字幕 | 中文字幕在线观看免费高清完整版 | 日精品 | 福利电影一区二区 | 欧美成人xxx| 国产在线国偷精品产拍 | 992tv在线成人免费观看 | 97碰在线视频 | 97国产精品亚洲精品 | 国产亚洲一区二区三区 | 久久久在线观看 | 夜夜夜影院 | 久久国产精品99久久久久久进口 | 亚洲人久久久 | 91桃色在线观看视频 | 91精品视频免费在线观看 | 又爽又黄在线观看 | 国产一级在线观看视频 | 日韩丝袜在线观看 | 99精品视频精品精品视频 | 久99久精品 | 国产精品99久久久久的智能播放 | 在线观看黄污 | 亚洲在线网址 | 久久综合狠狠 | 日韩在线欧美在线 | 色午夜| 亚洲手机天堂 | 国产在线无 | 五月天综合婷婷 | 欧美日韩久久不卡 | 黄色一区二区在线观看 | 黄网站色成年免费观看 | 色a网 | 九九视频精品在线 | 四虎国产永久在线精品 | 国产精品自拍av | 婷婷丁香视频 | 亚洲激情视频在线 | 91中文在线视频 | av不卡免费看| 伊人婷婷在线 | 丁香六月五月婷婷 | 国产黄色av网站 | 综合网天天色 | 欧女人精69xxxxxx | 精品久久久久久电影 | 丝袜美腿在线播放 | 亚洲午夜久久久久久久久久久 | 久久99国产精品视频 | 成 人 a v天堂 | 日韩亚洲在线视频 | 天天射天天舔天天干 | 国产精品男女啪啪 | 日本视频高清 | 91传媒在线播放 | 97电影网手机版 | 成人久久影院 | 久久久精品99 | 西西人体4444www高清视频 | 狠狠色丁香婷综合久久 | 夜夜天天干| 日韩在线中文字幕视频 | 黄色小视频在线观看免费 | www.人人草| 国产亚洲精品xxoo | 久久精品在线免费观看 | 91欧美日韩国产 | 涩涩网站在线 | 超碰97.com| 黄色毛片电影 | 久久久免费观看视频 | 亚洲va在线va天堂 | 欧美成人高清 | 欧美日韩国产一区 | 毛片一区二区 | 狠狠狠狠干 | 97视频资源 | 五月婷婷六月综合 | 日韩成人精品一区二区 | 综合色亚洲 | 91影视成人 | 麻豆视频在线免费看 | 免费黄色看片 | 国产亚洲视频中文字幕视频 | 免费久久片 | 国产一区二区三区四区大秀 | 99精品在线观看 | 在线观看中文字幕第一页 | 91九色最新地址 | 国产成人av电影 | av在线com | 东方av在| 激情五月播播久久久精品 | 色午夜影院 | 国模精品一区二区三区 | 国产香蕉97碰碰碰视频在线观看 | 日韩区欧美久久久无人区 | 国产亚洲va综合人人澡精品 | 国产乱老熟视频网88av | 国产成人免费观看久久久 | 成人影片在线免费观看 | 最近免费在线观看 | 2022久久国产露脸精品国产 | 久久不卡日韩美女 | 国产破处精品 | 美女视频久久黄 | 视频二区 | 91成人免费在线视频 | 中文在线免费看视频 | 日韩精品五月天 | 激情久久伊人 | 一区二区视频在线播放 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲黄电影 | 欧美在线视频日韩 | 亚洲色图av | 精品国产欧美一区二区 | 在线观看免费中文字幕 | 日韩成人黄色 | 韩日视频在线 | 亚洲精品午夜一区人人爽 | 日日夜夜草 | 久久9999久久免费精品国产 | 欧美视频xxx | 韩日三级在线 | 国产精品日韩久久久久 | 色婷婷福利 | 久久天天操| 狠狠搞,com| 久久天堂影院 | 日韩在线网址 | 99热这里有| 日韩精品一区二区三区视频播放 | 免费在线观看av的网站 | 激情小说 五月 | 色综合欧洲 | 国产精品久久久久久久久久久久午夜 | 四虎在线免费观看 | 天天综合网~永久入口 | 99热播精品| 成人免费在线观看电影 | 久久久久久久国产精品 | 精品免费一区二区三区 | 色婷婷88av视频一二三区 | 日韩剧 | 欧美在线观看禁18 | 免费高清影视 | 亚洲人人精品 | 免费看污黄网站 | 欧美精品久久久久久久亚洲调教 | 在线观看一二三区 | 天天天干天天射天天天操 | 中文字幕韩在线第一页 | 黄色片软件网站 | www.色婷婷.com | av在观看 | 午夜资源站 | 91中文在线视频 | 91精品免费在线观看 | av免费高清观看 | www.五月天 | 中文字幕久久久精品 | 久久免费视频这里只有精品 | 婷婷亚洲最大 | 国产涩涩网站 | 成人av一级片 | 免费黄色激情视频 | 91精品啪在线观看国产81旧版 | 天天色天天操综合 | 婷婷伊人综合亚洲综合网 | 国产视频欧美视频 | 在线 成人 | 色www精品视频在线观看 | 亚洲国产成人久久综合 | 毛片网在线 | 免费在线观看成人小视频 | 成人av久久 | 亚洲欧美日韩在线一区二区 | 国产精品av电影 | 久久中文字幕在线视频 | 丰满少妇高潮在线观看 | 国产黑丝一区二区三区 | 天天天天天天干 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产精品99爱 | 91精品视频免费看 | 日韩在线免费视频观看 | 国产精品毛片久久久 | 久久久久国产精品一区二区 | 欧美精品在线免费 | 免费观看丰满少妇做爰 | 天天翘av | 亚洲一级理论片 | caobi视频 | 精品国产一区二区三区久久影院 | 国产这里只有精品 | 久久综合九色欧美综合狠狠 | 久久电影国产免费久久电影 | 奇米影视999 | 91精品国产99久久久久久久 | 中文字幕日韩一区二区三区不卡 | 亚洲天堂网视频 | 在线影视 一区 二区 三区 | 亚洲精品视频免费看 | 国产手机在线观看 | av不卡免费看 | 精品在线一区二区三区 | 91伊人久久大香线蕉蜜芽人口 | 国产精品嫩草影视久久久 | 久久精品欧美视频 | 182午夜在线观看 | 6080yy精品一区二区三区 | 一区二区三区高清在线 | 五月婷婷黄色网 | 久久综合久色欧美综合狠狠 | 91九色在线视频 | 久久99久久久久 | 丁香激情五月婷婷 | 婷婷电影网| 色网站免费在线看 | 久久国产美女 | 欧美激情精品久久久久久 | 黄色免费电影网站 | 日本久久综合视频 | 欧美精品网站 | 日韩首页 | 久久免费视频在线 | 五月天电影免费在线观看一区 | 黄色影院在线观看 | 免费观看国产成人 | 国产v欧美 | 日韩在线视频播放 | 国产麻豆剧传媒免费观看 | 亚洲最新精品 | 在线欧美a| 亚洲天堂精品视频在线观看 | 日韩av成人在线观看 | 欧美亚洲国产日韩 | 国产成人精品久久久 | 中文十次啦 | 日韩av手机在线看 | 亚洲精品合集 | 欧美精品二 | av免费高清观看 | 亚洲影视九九影院在线观看 | 国产精品久久久久久婷婷天堂 | 亚洲综合在 | 亚洲aaa级 | 毛片永久免费 | 高清国产在线一区 | 日本中文在线播放 | 色爱区综合激月婷婷 | 成人黄性视频 | 国产精品 欧美 日韩 | 一区二区欧美在线观看 | 日韩久久在线 | 亚洲激情精品 | 亚洲精品免费在线播放 | 免费中午字幕无吗 | 久久久精品欧美 | 久久久久国产一区二区三区 | 国产精品一区二区三区四区在线观看 | 免费成人黄色片 | 波多野结衣在线播放视频 | 麻豆av一区二区三区在线观看 | 国产黄色片在线 | 欧产日产国产69 | 欧美一区二区三区特黄 | 午夜在线观看一区 | 日本黄色黄网站 | 欧美日韩免费一区二区 | 深夜国产在线 | 伊人官网 | 亚洲精品综合欧美二区变态 | 91人人爱 | 中文字幕二区三区 | av超碰免费在线 | 成人在线免费观看网站 | 色九九影院 | 日韩午夜av | 国产一区二区在线免费观看 | 精品一区二区日韩 | 久久久国产一区 | 丁香综合 | 夜夜骑日日 | 久久天天躁夜夜躁狠狠85麻豆 | 国产美女网站在线观看 | 在线一二三四区 | 免费观看国产成人 | 欧美精品v国产精品 | 国产天天综合 | 欧美激情综合五月色丁香 | 人人干狠狠干 | 在线观看的黄色 | 免费在线成人av | 97精品国自产拍在线观看 | 天天草天天摸 | 五月激情丁香婷婷 | 久久久免费精品 | 亚洲狠狠丁香婷婷综合久久久 | 久 久久影院| 视频91在线 | 亚洲日本一区二区在线 | 久久国产精品色av免费看 | 久青草视频在线观看 | av在线免费在线观看 | 在线播放av网址 | 国产一区二区三精品久久久无广告 | 国产精品 中文在线 | 国产免费二区 | 色婷婷av在线 | 国产精品视频观看 | 亚洲成aⅴ人片久久青草影院 | 在线国产中文 | 玖玖精品视频 | 亚洲国产一区在线观看 | 日韩在线国产精品 | 国产精品久久麻豆 | 99免费观看视频 | 国产福利一区在线观看 | 国产午夜精品免费一区二区三区视频 | 欧美激情一区不卡 | 国产亚洲视频中文字幕视频 | 国产美女久久久 | 国产精品免费视频网站 | 成人av电影在线观看 | 国产伦理久久精品久久久久_ | 99热这里只有精品在线观看 | 亚洲在线精品 | 免费视频一区二区 | 992tv在线观看 | 麻豆精品在线视频 | 成年人免费在线 | 国产精品网在线观看 | 成人av在线网 | 午夜10000 | 国产精品一区二区精品视频免费看 | 涩涩成人在线 | 久久久成人精品 | 国产69久久久| 欧美日韩久久不卡 | 伊人久久五月天 | 国产精品久久久久久吹潮天美传媒 | 成人不用播放器 | 国产中文字幕网 | 黄色国产高清 | sm免费xx网站 | 日韩av高清在线观看 | 国产69精品久久久久9999apgf | 国产精品福利无圣光在线一区 | 亚洲 欧美 成人 | 亚洲成人av电影在线 | 在线观看av国产 | 亚洲涩涩涩涩涩涩 | 久久久久免费精品国产小说色大师 | 九九热只有精品 | 亚洲精品综合一二三区在线观看 | 久久久久久毛片精品免费不卡 | 伊人久久影视 | 国产精品久久久久久久久久尿 | 一区二区视频免费在线观看 | 国产黄色在线看 | 91在线视频免费91 | 色偷偷人人澡久久超碰69 | 狠狠撸电影| 色综合天 | 91视频91蝌蚪 | 99久久精品久久亚洲精品 | 国产精品爽爽久久久久久蜜臀 | 8x成人免费视频 | 992tv在线观看 | 手机看片久久 | 亚洲伊人婷婷 | 欧美国产日韩在线视频 | 激情婷婷网| se婷婷| 欧美激情综合五月色丁香 | 日韩在线视频不卡 | 久久天天躁夜夜躁狠狠躁2022 | 黄污视频大全 | 免费av在线播放 | 黄色三级免费看 | 中文在线| 操处女逼| 四虎在线观看视频 | 久久精品一区二区三区国产主播 | 欧美日韩一区二区三区免费视频 | 免费亚洲婷婷 | 97超碰人人澡人人爱学生 | 91在线看免费 | 日韩大片在线看 | 日韩网站免费观看 | 久久国产三级 | 久草视频免费看 | 成年人视频在线 | 日韩免费观看av | 国产一二区视频 | 五月婷婷在线观看视频 | 免费能看的av | 久久精品视频在线观看免费 | 国产黄色av影视 | 日本激情视频中文字幕 | 五月婷激情 | 日韩精品视频久久 | 日韩高清一二三区 | 欧美黄在线 | 黄色软件视频大全免费下载 | 2023天天干| 91人人干 | 国产精品久久久久久999 | 国产精品一区二区你懂的 | 免费a v在线 | 成人黄色在线观看视频 | 黄色在线免费观看网站 | 国产群p| 午夜久久久久久久久久影院 | 免费在线电影网址大全 | 99精品国产成人一区二区 | 在线免费观看黄色 | 久久你懂的 | 九九热免费在线观看 | 国产v在线播放 | 高清av在线 | 日韩在线观看你懂得 | 久久精品国产亚洲 | 91在线国内视频 | 探花视频在线观看 | 日韩欧美综合 | 国产一级精品视频 | 中文国产字幕 | 日韩在线观看视频免费 | 免费在线观看国产黄 | av无限看| 亚洲欧美日韩精品久久奇米一区 | 国产伦理久久精品久久久久_ | 日韩偷拍精品 | 看全黄大色黄大片 | 日韩中午字幕 | 国产一级电影免费观看 | 99精品国产福利在线观看免费 | 亚洲欧美一区二区三区孕妇写真 | 亚洲高清视频在线观看 | 免费久久视频 | 激情文学丁香 | 亚洲伊人第一页 | 国产精品美女www爽爽爽视频 | 人人爽人人澡人人添人人人人 | 日本爱爱免费 | 成人一级免费电影 | 一区免费视频 | 一区二区三区久久精品 | 免费看一级一片 | 日日爽日日操 | 日日操日日操 | 狠狠色狠狠色综合日日小说 | 亚洲视频在线免费观看 | 玖玖视频免费在线 | 99综合电影在线视频 | 亚洲 中文 欧美 日韩vr 在线 | 在线免费观看视频 | 91热| 成人毛片一区 | 日本免费久久高清视频 | 日日夜夜婷婷 | 国产视频在线观看免费 | av一级免费| 欧美日韩另类视频 | 久久成人黄色 | 婷婷丁香导航 | 开心综合网 | 999电影免费在线观看2020 | 亚洲午夜精品福利 | 日韩av看片| 国产精品久久久久久爽爽爽 | 久久免费99精品久久久久久 | 超碰人人乐 | 人人插超碰 | 国产精品麻豆果冻传媒在线播放 | 激情欧美一区二区三区免费看 | 日日干综合| 天天干天天摸天天操 | 亚洲视频在线看 | 人人看97 | 国产日韩精品久久 | 午夜在线国产 | 色天天天| 国产女人18毛片水真多18精品 | 九九在线免费视频 | 国产成人av在线 | 色99之美女主播在线视频 | 精品理论片 | 天天艹天天操 | 麻豆视频免费入口 | 激情婷婷久久 | 一区二区三区日韩在线观看 | 黄在线免费观看 | 99视频精品免费视频 | 精品国产日本 | 色中文字幕在线观看 | 2023av| 免费看的黄色网 | 98超碰人人 | 欧美一区免费观看 | 永久免费的啪啪网站免费观看浪潮 | 91黄色在线观看 | 又污又黄的网站 | 精品国产伦一区二区三区免费 | 免费高清在线观看成人 | 免费看片网页 | 国产专区免费 | 碰超在线97人人 | 天天综合天天综合 | 国产精品美女在线观看 | 久久99久久精品国产 | 国产精品国产三级国产专区53 | 国产精品亚洲人在线观看 | 亚洲成人黄色在线观看 | 九色91av | 日韩久久片| 国产成人福利在线观看 | 黄色三级免费观看 | 亚洲电影一级黄 | 天堂网一区二区 | 亚洲国产精品999 | 91麻豆高清视频 | 91免费观看视频网站 | 国产精品成人久久久 | 亚洲第一区在线播放 | 天天摸天天干天天操天天射 | 免费av在 | 高清不卡一区二区三区 | 国内精品久久久久影院日本资源 | 国产在线更新 | 久久久久免费精品 | 五月婷婷电影网 | 国产午夜精品免费一区二区三区视频 | 日本精品二区 | 91精品夜夜 | 视频99爱 | 日韩av在线免费播放 | 久久尤物电影视频在线观看 | 亚洲精品视频在线免费 | 国产精品综合在线观看 | 精品视频在线免费观看 | 91麻豆精品国产91久久久久久久久 | 欧美日韩精品在线免费观看 | 亚洲第一久久久 | 99在线视频精品 | 91在线视频网址 | av网站在线观看播放 | 天堂网av 在线 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 偷拍区另类综合在线 | 五月亚洲| 国产在线观看中文字幕 | 99色免费视频| 国产一卡在线 | 国产精品视频免费观看 | 九七视频在线 | 国产一区二区在线播放视频 | 激情网站网址 | 色婷婷精品| 欧美日韩aaaa | 久精品在线 | 福利网在线 | 99精品欧美一区二区三区黑人哦 | 国产色视频一区二区三区qq号 | 成人四虎影院 | 日韩专区av | 欧美性猛片, | 片网站 | 涩涩网站在线看 | 久久久久国产精品一区 | 91精品免费在线观看 | 国产日女人 | 手机av电影在线 | 久久精品麻豆 | 国产伦理剧 | 久久精品人| 91大神精品视频 | 久久se视频| 中文av不卡| 亚洲综合在线五月 | 精品国产乱子伦一区二区 | 久久久久女教师免费一区 | 久久一本综合 | 久久亚洲热 | 国产精品免费在线观看视频 | 国产男女免费完整视频 | 香蕉视频国产在线观看 | 99久久精品一区二区成人 | 黄色电影小说 | 五月婷婷亚洲 | av线上免费看 | 亚洲黄色在线观看 | 去干成人网 | 天天操天天干天天玩 | 国产精品少妇 | 在线视频 国产 日韩 | 亚洲视频在线看 | 欧美一级视频在线观看 | 中文字幕有码在线 | 国产一级淫片在线观看 | 日韩av在线影视 | 午夜视频免费 | 国产精品一区二区三区免费看 | 97激情影院| 中文字幕日韩高清 | 日韩伦理片一区二区三区 | 97夜夜澡人人双人人人喊 | 免费看黄色91 | 国产一区二区精品 | 91传媒在线 | 国产精品免费在线 | 中文字幕在线视频免费播放 | 国产精品久久久久久久久久妇女 | 激情五月av | 97超在线视频 | 午夜视频一区二区 | 一级黄色在线免费观看 | 久久久久久久国产精品视频 | 九九九热精品免费视频观看网站 | 久久久久黄色 | av在线com | 国产午夜一区二区 | 在线观看完整版免费 | 黄色精品国产 | 波多野结衣久久资源 | 日韩欧美高清视频在线观看 | 在线视频精品 | 开心综合网 | 一级黄视频 | 99精品免费视频 | 激情丁香5月 | 一级一片免费看 | 亚洲国产影院av久久久久 | 超碰在线观看99 | 免费av观看| 欧美aaaxxxx做受视频 | 天天插天天干天天操 | 福利视频一二区 | 免费看国产视频 | 中文字幕一区二区三 | 91看片一区二区三区 | 激情视频在线观看网址 | 午夜12点| 亚洲伊人av | 日韩欧美aaa | www.在线观看av | 丁香六月av | 97av.com| 手机成人av| 久久精品播放 | 色综合久久88色综合天天免费 | 91麻豆精品国产91久久久无限制版 | 成人性生活大片 | 精品日韩中文字幕 | 91精品天码美女少妇 | 久久免费视频国产 | 亚洲精品天天 | 麻豆视频在线免费看 | 香蕉精品视频在线观看 | 午夜视频在线观看一区二区三区 | 欧美激情xxxx | 中文国产在线观看 | 91免费在线视频 | 成人免费在线播放 | 亚洲精品视频在线观看视频 | 美女视频网| 日日夜夜草 | 九九免费在线观看视频 | 国产视频资源在线观看 | 久久精品国产一区二区电影 | 一级黄色片在线播放 | 黄色毛片视频免费观看中文 | 免费看片黄色 | 日日干日日 | 99久久精品免费 | 免费亚洲黄色 | 国产亚洲精品综合一区91 | 免费网址你懂的 | 免费人成在线观看 | 国产精品成人自拍 | 91网在线观看 | 天天综合网久久 | 成人性生交大片免费看中文网站 | 欧美日韩观看 | 久久永久免费视频 | 精品欧美小视频在线观看 | 亚洲美女精品区人人人人 | 中文字幕在线观看一区二区三区 | 天天色影院| 911香蕉| 欧美日韩精品电影 | 超碰免费公开 | 999久久久久久久久 69av视频在线观看 | 精品视频在线免费 | 日本在线视频网址 | 欧美日韩一区久久 | 国产精品久久99综合免费观看尤物 | 国产三级精品在线 | 精品自拍av| 欧美日韩精品影院 | ww亚洲ww亚在线观看 | 精品久久久久久国产偷窥 | 国产精品大尺度 | 欧美日韩国产一区 | 九九九在线 | 久久精品国产一区二区 | 91三级在线观看 | 免费观看一级一片 | 欧美精品久久久久久久久久 | 亚洲最大免费成人网 | 欧美激情视频在线观看免费 | 香蕉久草| www.香蕉 | 水蜜桃亚洲一二三四在线 | 手机在线观看国产精品 | 天天操天天色天天射 | 九九有精品| 欧美专区国产专区 | 美女福利视频网 | 99久久精品免费看国产麻豆 | 国产亚洲在线视频 | 欧美一级专区免费大片 | 精品久久久久久久 | 在线观看中文字幕一区二区 | 免费视频色| 亚洲欧美日韩中文在线 | 国产精品视频久久 | 久久综合免费视频 | 99国产在线视频 | 国产精品久久99 | 中文字幕在线中文 | 五月天激情电影 | 国产精品入口传媒 | 黄av在线 | 天堂av在线网址 | 黄色一级性片 | av蜜桃在线| 日韩精品一区二区三区高清免费 | 日韩理论片在线观看 | 日韩视频一 |