デューカスコピーFIX API プログラミングガイド

デューカスコピーFIX APIプログラミングガイド

バージョン 8.0.1

更新内容：
ExpireTime for Stop and Stop Limit orders
MktData, Data Feed interface,

Trading interface, New order single, Account info
© 2016 Dukascopy Japan KK

Page 1 of 17デューカスコピーFIX API プログラミングガイド

目次：

1. はじめに ………………………………………………………..………………………………. 3
2. 一般指針 …..………………………………………………………………………………….… 4
3. メッセージフロー ..………………………………………………………………….……. 6
4. データフィード インターフェース ……………………………………….……. 8
5. 取引インターフェース…………………………………………………………………. 10© 2016 Dukascopy Japan KK

Page 2 of 17

デューカスコピーFIX API プログラミングガイド

1. はじめに1.1 基本情報

デューカスコピーFIX API は、FIX プロトコル バージョン 4.4（以下 FIX 4.4 と呼ぶ）に対応しています。本 API をお使いいただくことで、リアルタイムでのデータフィード受信や、注文の送信・修正・キャンセル、取引アクティビティに関する自動通知の受信が可能です。デューカスコピーでは、国際標準化機構（ISO）が定める通貨コードに基づく通貨ペアの表記（CCY1/CCY2）を採用しております。
1 秒間で発注できる最大取引件数は 16 回までとなっています。

同時に保有することができるポジション数は最大 100 件までとなっています。

© 2016 Dukascopy Japan KK

Page 3 of 17

デューカスコピーFIX API プログラミングガイド

2．一般指針2.1. 接続スキーム

クライアントの FIX エンジンとデューカスコピーの FIX エンジンは、SSL により暗号化された TCP ソケットを通じて通信されます。特別な SSL サーバ証明書は必要ではありません。
クライアントは FIX エンジンにより提供されるリソースをご使用いただくか、SSL 暗号化トンネリング サービスをご利用できます。SSL 暗号化トンネリング サービスはオープンソースの製品をご利用いただくことで、無料でお使いいただけます。
クライアント マシンと、デューカスコピーFIX サーバとは、時刻を同期させる必要があります。デューカスコピーでは GMT 時間を採用しております。
インカミング コネクションは、クライアントのアプリケーションが起動されているシステムの IP アドレスにより確認されます。

本 FIX インターフェースにて使用される FIX コネクションは、クライアントにつき 2 つ用意されています。1 つはデータフィード用のものであり、もう 1 つは取引用です。

デューカスコピーFIX API サーバに接続するため、ユーザーは以下の情報をデューカスコピーより取得する必要があります：


TargetCompId
Two SenderCompId
Username
Password

クライアントはデューカスコピー FIX API サーバに、既に確認済みの IP アドレスおよびポートより接続する必要があります。以下のシステム メッセージが使用されます：
ログオン (Logon) - FIX セッションを開始するためにクライアントからデューカスコピーに送られるメッセージです。Logon メッセージにより、通信セッションが確立され、接続中のクライアントを認証し、メッセージ シーケンス番号を初期化します。
FIX セッションの Logon メッセージ (MsgType = A) は、ネットワーク接続の確立後、クライアントからサーバに送られる最初のメッセージである必要があります。クライアントのLogon メッセージ内の Password フィールドが正しく入力されない場合、そのセッションは終了となります。

© 2016 Dukascopy Japan KK

Page 4 of 17

デューカスコピーFIX API プログラミングガイド

Logon メッセージ フィールド
タグ
98
108

フィールド名
EncryptMethod
HeartBtlnt

141

ResetSeqNumFlag

553
554

Username
Password

コメント
暗号化方法。常に暗号化されない。
ハートビート(Heartbeat) は秒単位のインターバルをとる。
ハートビート インターバルはクライアントにより制御される。初期設定値は 30 秒。
FIX セッションの両サイドがシーケンス番号をリセットすべきであることを示す。Y = Yes でシーケンス番号をリセッ
ト。
デューカスコピーより付与されるユーザー名
デューカスコピーより付与されるパスワード

Logon メッセージは、データフィードセッションおよび取引セッションの両方にて必要です。FIX サーバが Logon リクエストを認証できない場合、FIX サーバは Logout メッセージ(MsgType=35) を返します。
ハートビート (Heartbeat) - FIX 接続が有効であるかを確認するために、アプリケーションが非アクティブな期間、デューカスコピーより送られてくるメッセージ。クライアントはHeartbeat メッセージを受け取り次第、自動的にメッセージを送り返します。
再送リクエスト (Resend Request) - デューカスコピーまたはクライアントから送られる、特定のメッセージの再送信を要求するためのメッセージ。シーケンス番号の生成中またはメッセージのロストによりギャップが検出される際や初期化プロセス中に、再送リクエス
ト メッセージが使用されます。
ログアウト (Logout) - 取引セッションが正常に終了したことを確認するメッセージ。
Logout メッセージのやり取りなしにセッションが終了された場合、ネットワーク障害等の何らかの異常が発生したものとして解釈されます。デューカスコピーFIX ゲートウェイ
は、通信セッションが終了した場合、クライアントをログアウトしたものと見なします。
クライアントの接続は、セッションが 2 時間以内に回復しない場合、切断されます。

© 2016 Dukascopy Japan KK

Page 5 of 17

デューカスコピーFIX API プログラミングガイド

3. メッセージフロー
この項では、一連のメッセージフローの詳細について解説します。
3.1 メッセージフロー マトリックス (FIX4.4)
API クライアント
Market Data Request(Subscribe)

方向→←Market Data Request
RejectMarket Data Snapshot←

Quote Status Report←Market Data Request(Unsubscr)
New Order Single(Market, Limit, Stopor Quote)→→

Order CancelRequest)→

Order Cancel /Replace Request→←

OrderMassStatusReq
uest

デューカスコピー→© 2016 Dukascopy Japan KK

Execution Report

コメント
クライアントからのサブスクリプション開始のリクエスト
有効なリクエストでない場合
サブスクリプション中の通貨ペアのリアルタイムレート
各通貨ペアの現在のステータ
ス情報
クライアントからのサブスクリプション停止リクエスト
クライアントからの各種注文（マーケット/リミット/IOC/ス
トップ/クォート オーダー）リクエスト
クライアントからの待機中(Pending) のリミットオーダーや執行中 (Executing) のクォー
トオーダーをキャンセルするためのリクエスト
クライアントからの待機中のリミットオーダーや執行中のクォートオーダーの内容を再編集（更新）するためのリク
エスト
注文が執行されたか、または拒否されたか等の情報 をOrdStatus フィールドにて確認できる
待機中のステータスにある全ての注文および、現在保有しているポジションに関する情報のリクエスト

Page 6 of 17

デューカスコピーFIX API プログラミングガイド←←
Account Info Request

Notification
Instrument PositionInfo→←

Account Infoシステムのイベントおよび注文の執行プロセスに関するテ
キスト情報
現在保有中のポジションに関する情報
クライアントからのアカウン
ト情報のリクエスト
アカウント情報

3.2 FIX 4.4 メッセージ フォーマット

全てのメッセージのフォーマットは、FIX 4.4 の仕様に従います。FIX により要求される全てのフィールドは、デューカスコピーAPI により要求されるものであり、それ以外のものは、FIX の仕様に従わなければなりません。
全てのメッセージは FIX 4.4 の仕様に従い、ヘッダーおよびトレーラーの適切な場所に以下のフィールドが含まれている必要があります。
BeginString

BodyLength
MsgTypeSenderCompID
TargetCompID
MsgSeqNum

SendingTime
CheckSum© 2016 Dukascopy Japan KK

Page 7 of 17

デューカスコピーFIX API プログラミングガイド

4. データフィード インターフェース
4.1 Market Data Request (MsgType=V)

ユーザーは Market Data Request メッセージを送信することで、データフィードへのサブスクリプションを開始、またはサブスクリプションの停止を行うことができます。また、
TimeInForce フィールドは、”Fill or Kill”方式のデータフィードへのサブスクリプションを希望する際のみ使用されます。
タグ
262
263

フィールド名MDReqID
Subscription
RequestType

264

MarketDepth265
267
146
55

MDUpdateType
NoMDEntryTypes
NoRelatedSymSymbol(Instrument block)
TimeInForce59

コメント
リクエストの識別子。クライアントにより設定される。
'1' = Snapshot + Updates (Subscribe) 「スナップショット + 更新（サブスクリプション開始）」および ‘2’ = Disable previous
Snapshot + Update Request (Unsubscribe) 「以前のスナップシ
ョット + 更新リクエストを無効にする（サブスクリプション停止）」がサポートされる
有効値：'1' = フィードレベル 1（ベストビッド、ベストアスク）のみを取得'2' … '5' = 取得するマーケットデプスのフィードレベル数を設定‘1’ = Full Refresh のみサポートされる
MDEntryType <269> のフィールド数を指定
Symbol <55> フィールドの繰り返し回数を指定
サブスクリプションしたい通貨ペア名が入力されなければならない。例：EUR/USD
有効値：‘4’ = Fill or Kill (FOK)“Fill or Kill”方式のデータフィードへのサブスクリプションを希望する際のみ使用される

4.2 Market Data – Snapshot/Full Refresh (MsgType=W)

Market Data Request メッセージへの応答としての Market Data – Snapshot/Full Refresh メッ
セージにより、クライアントへのデータ送信が開始されます。”Fill or Kill”方式のデータフ
ィードへのサブスクリプションが有効である場合、TimeInForce フィールドにてそれが表示されます。
タグ
55

フィールド名Symbol(Instrument block)© 2016 Dukascopy Japan KK

コメント
マーケットデータが表示される通貨ペア名。例：EUR/USD

Page 8 of 17

デューカスコピーFIX API プログラミングガイド

268

NoMDEntries

269
270
271
59

MDEntryType
MDEntryPx
MDEntrySize
TimeInForce

273

MDEntryTime

Market Data メッセージ内の MDEntryType <269> のエントリー数
Bid (0) または Offer (1)
現在の Bid または Offer のレート
現在の Bid または Offer のレートでの最大取引可能数量
有効値：‘4’ = Fill or Kill (FOK)”Fill or Kill”方式でのデータフィードへのサブスクリプションの場合に表示されるマーケットデータ エントリー時の時間

4.3 Quote Status Report (MsgType=Al)
このメッセージは、通貨ペアの現在のステータスに関する情報を通知するために使われます。デューカスコピーAPI サーバは、リクエストがない場合でも、自動的にこれらのメッセージを送信するので、クライアントはこれらの情報を受け取るためにサブスクリプションを行う必要はありません。取引可能な通貨ペアを認識するために、このメッセージをお使いください。
タグ
117
55537

フィールド名QuoteID
SymbolQuoteTypeコメント
クォートの識別子
通貨ペア名。例：EUR/USD
通貨ペアの現在の取引ステータス
有効値：‘1’ = 取引可能
‘2’ = 取引に制限あり

4.4 Market Data Request Reject (MsgType=Y)

Market Data Request メッセージが受理されなかった場合、デューカスコピーは FIX 4.4 にて規定されている Market Data Request Reject メッセージを送ります。
タグ
62
281

フィールド名MDReqID
MDReqRejReason© 2016 Dukascopy Japan KK

コメント
MDReqID <262> における識別子と同一
Market Data Request メッセージの拒否理由
有効値：‘0’ = 不明な通貨ペア名‘4’ = サポートされていない SubscriptionReq‘5’ = サポートされていない MarketDepth‘6’ = サポートされていない MDUpdateType‘8’ = サポートされていない MDEntryType
Page 9 of 17

デューカスコピーFIX API プログラミングガイド

5. 取引インターフェース

クライアントが FIX API サーバにログイン成功後、サーバは待機中 (Pending) または執行中(Executing) の状態にある注文に関する執行報告 (Execution Report) をクライアントに自動的に送信します。
5.1 執行報告 (Execution Report)
注文数量が一部のみ執行された場合でも、残りの注文数量が執行される毎に、執行報告(Execution Report) がクライアントに送信されます。その中の CumQty <14> フィールドにて、執行された注文数量を確認できます。
タグ
37
1117

フィールド名OrderID
ClOrdID
ExecID

39

OrdStatus

150

ExecType

5559

SymbolTimeInForce141513854

CumQtyLeavesQty
OrderQty
Side© 2016 Dukascopy Japan KK

コメント
デューカスコピーFIX API により設定される注文の識別子
クライアントにより設定される注文の識別子
デューカスコピーFIX API により設定される執行の識別子。注
文数量が一部毎に執行された場合、API サーバはその執行毎に付与される ExecID とその注文の OrderID を含む執行報告を送信します。
以下の注文ステータスがサポートされる‘2’ = Filled（一部執行の場合でも）‘4’ = Canceled‘8’ = Rejected‘A’ = Pending New （FIX システムが注文を受信したものの、注文が執行されていない状態）‘B’ = Calculated （執行まで送信済み、Bid/Offer 注文時にのみ使用されるステータス）
このフィールドは常に ‘I’ = Order Status に設定される。
注文の現在のステータスを確認するには、OrdStatus <39> を参照のこと。
通貨ペア名。例：EUR/USD‘1’ = Good Till Cancel (GTC)‘3’ = Immediate or Cancel (IOC) – リミットオーダーの一種‘4’ = Fill or Kill (FOK) – 注文の一部執行を拒否する‘6’ = Good Till Date (GTD)
執行された数量
執行されずに残った、執行待ちの数量
注文数量
有効値：
‘1’ = Buy

Page 10 of 17

デューカスコピーFIX API プログラミングガイド

40

OrdType

6126

AvgPx
ExpireTime

60

TransactTime

912
1

LastRpt
Requested
Account

1213Commission
CommType

7011

Slippage

103

OrdRejReason© 2016 Dukascopy Japan KK‘2’ = Sell
‘7’ = Undisclosed （OrdStatus <39> が ’4’ = Canceled または ’8’ =Rejected の場合）
有効値：
‘1’ = Market
マーケットオーダー‘2’ = Limit
リミットオーダー（スリッページが明記されていても、それを考慮しない）‘3’ = Stop
ストップオーダー（スリッページが明記されている場合、ストップリミットオーダーとなる）‘Q’ = Quote
クォートオーダー（デューカスコピー独自のもの。この注文方法の場合、TimeInForce <59> フィールドの値は考慮されない）‘Z’ =1,000 通貨未満のエクスポージャーを持つポジションをクローズする際にのみ使用される取引が執行された際の価格
OrdType <40> が ’Q’ = Quote の時、または OrdType <40> が ‘3’または ‘4’ かつ TimeInForece <59> が ’6’ の時のみ有効
執行報告の時刻。デューカスコピーFIX API により設定される。
'Reject'ステータスとなった注文が再送信された際にのみ、このフィールドに'FALSE'の値が設定される。
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用される。
執行手数料
手数料の種類。以下の種類のみ提供：’3’ = absolute, in current currency
マーケットオーダーおよびストップオーダーにのみ使用される。最大許容スリッページ幅を pips 単位で指定。0.5 pips 毎に設定可能（例：3 や 3.5 は設定できるが、3.2 は設定できない）。Slippage フィールドが設定されていない場合、デフォルトのスリッページ幅 (Default Slippage Value) が適応される。
OrdStatus <39> が拒否された場合の代替フィールド。
有効値：‘3’ = 制限を超えた取引‘99’ = その他
Page 11 of 17

デューカスコピーFIX API プログラミングガイド

544

CashMargin

ロスカット取引の場合のみ、このフィールドは設定される。
有効値：‘3’ = マージンクローズ

5.2 New Order – Single (MsgType=D)

マーケットオーダー、リミットオーダー、IOC オーダー(Immediate or Cancel order)、ストップオーダー、クォートオーダーがサポートされます。リミットオーダーまたはクォートオーダーの場合、市場における現在の価格が指定した価格以上となった時点で、注文が執行されます。マーケットオーダーの場合、市場における注文時の利用可能な最良価格にて、注文が執行されます。
タグ
1144
40

フィールド名ClOrdID
Price
OrdType59

TimeInForce

55
38
54

SymbolOrderQty
Side© 2016 Dukascopy Japan KK

コメント
クライアントにより設定される注文の識別子
指定取引価格。マーケットオーダーには設定しないこと。
有効値：‘1’ = Market
マーケットオーダー‘2’ = Limit
リミットオーダー（スリッページが明記されていても、それを考慮しない）‘3’ = Stop
ストップオーダー（スリッページが明記されている場合、ストップリミットオーダーとなる）‘Q’ = Quote
クォートオーダー（デューカスコピー独自のもの。この注文方法の場合、TimeInForce <59> フィールドの値は考慮されない）‘Z’ =1,000 通貨未満のエクスポージャーを持つポジションをクローズする際にのみ使用される‘1’ = Good Till Cancel (GTC)‘3’ = Immediate or Cancel (IOC) – リミットオーダーの一種‘4’ = Fill or Kill (FOK) – 注文の一部執行を拒否する‘6’ = Good Till Date (GTD) – ExpireTime <126> フィールドにおいて、ストップオーダーまたはストップリミットオーダーの注文有効期日を設定することを可能にする
通貨ペア名。例：EUR/USD
注文数量
有効値：
‘1’ = Buy （OrdType = Quote の場合は Bid）
‘2’ = Sell （OrdType = Quote の場合は Offer）
Page 12 of 17

デューカスコピーFIX API プログラミングガイド

60

TransactTime

126

ExpireTime

1Account

7011

Slippage

この注文リクエストがクライアントまたは取引システムにより開始・リリースされた時間
OrdType <40> が ’Q’ = Quote の時、または OrdType <40> が ‘3’または ‘4’ かつ TimeInForece <59> が ’6’ の時のみ有効
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。
マーケットオーダーおよびストップオーダーにのみ使用される。最大許容スリッページ幅を pips 単位で指定。0.5 pips 毎に設定可能（例：3 や 3.5 は設定できるが、3.2 は設定できない）。Slippage フィールドが設定されていない場合、デフォルトのスリッページ幅 (Default Slippage Value) が適応される。

5.3 Order Cancel Request (MsgType = F)

‘Pending New’ ステータスのリミットオーダーまたはストップオーダーもしくは、’Calculated’ ステータスのクォートオーダーのみキャンセルすることができます。
タグ
3741
111

フィールド名
OrderID
OrigClOrdID
ClOrdID
Account

55

Symbolコメントキャンセルしたい注文の OrderID <37>
‘Reject’ されなかった以前の注文の ClOrdID <11>
クライアントにより設定される本リクエストの識別子
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。
通貨ペア名。例：EUR/USD

5.4 Order Cancel/Replace Request (MsgType = G)

このメッセージは、注文内容の再編集（更新）のために使用されます。‘Pending New’ ステータスのリミットオーダーまたはストップオーダーもしくは、’Calculated’ ステータスのクォートオーダーのみ再編集することができます。
タグ
37
41
11
38
4454126
1

フィールド名
OrderID
OrigClOrdID
ClOrdID
OrderQty
Price
Side
ExpireTime
Account© 2016 Dukascopy Japan KK

コメント
更新したい注文の OrderID <37>
‘Reject’ されなかった以前の注文の ClOrdID <11>
クライアントにより設定される本リクエストの識別子
新規の注文数量
新規の指定取引価格
新規の売買サイド
新規の注文有効期限
External Account ID のこと。

Page 13 of 17

デューカスコピーFIX API プログラミングガイド

40

OrdType

7011

Slippage55
59

SymbolTimeInForce

このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。
有効値：‘1’ = Market
マーケットオーダー‘2’ = Limit
リミットオーダー（スリッページが明記されていても、それを考慮しない）‘3’ = Stop
ストップオーダー（スリッページが明記されている場合、ストップリミットオーダーとなる）‘Q’ = Quote
クォートオーダ（デューカスコピー独自のもの。この注文方法の場合、TimeInForce <59> フィールドの値は考慮されない）‘Z’ =1,000 通貨未満のエクスポージャーを持つポジションをクローズする際にのみ使用されるマーケットオーダーおよびストップオーダーにのみ使用される。最大許容スリッページ幅を pips 単位で指定。0.5 pips 毎に設定可能（例：3 や 3.5 は設定できるが、3.2 は設定できない）。Slippage フィールドが設定されていない場合、デフォルトのスリッページ幅 (Default Slippage Value) が適応される。
通貨ペア名。例：EUR/USD
有効値：‘4’ = Fill or Kill (FOK)”Fill or Kill” オーダーの場合のみ、このフィールドは使用される。

5.5 Notification (Msg = ‘U1’)
このメッセージは、クライアントのアカウントに関する最新の情報の提供を目的とし使用されます。
タグ7003

フィールド名MotifPriority

587004

Text
AccountName© 2016 Dukascopy Japan KK

コメント
有効値：
‘0’ = INFO
‘1’ = WARNING‘2’ = ERROR‘3’ = ALERT
拒否事由に関するテキスト形式での詳細
クライアントの SenderCompID
Page 14 of 17デューカスコピーFIX API プログラミングガイド

1

Account

External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。

5.6 Account Info Request (MsgType = ‘U7’)
このメッセージにて、クライアントはアカウントに関する最新の情報をリクエストすることができます。複数のアカウントによる接続の際には本メッセージは必須ですが、単一のアカウントによる接続の場合は空欄にし送信してください。
タグ1

フィールド名Account

コメント
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。

5.7 Account Info (MsgType = ‘U2’)
このメッセージは、クライアントのアカウントに関する最新の情報の提供を目的とし使用されます。
タグ
7005
7006
7007
1570041

フィールド名Leverage
UsableMargin
EquityCurrency
AccountName
Account

コメント
アカウントのレバレッジ
アカウントの現在の証拠金額 (Margin)
アカウントの現在の純資産額 (Equity)
アカウントの口座通貨
クライアントの SenderCompID
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。

5.8 Instrument Position Info (MsgType = ‘U3’)
このメッセージは、クライアントが現在保有しているポジションに関する情報の提供のために使用されます。
タグ
57008

フィールド名SymbolAmount7004
1

AccountName
Account© 2016 Dukascopy Japan KK

コメント
取引中の通貨ペア名
現在のポジションサイズ（プラスの数値の場合はロングポジション、マイナスの数値の場合はショートポジション）
クライアントの SenderCompID
External Account ID のこと。
Page 15 of 17

デューカスコピーFIX API プログラミングガイド

このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。
5.9 Order Mass Status Request (MsgType = ‘AF’)

このメッセージにて、クライアントは待機中 (pending) のステータスにある全ての注文および、現在保有しているポジションに関する情報をリクエストすることができます。このリクエストに対し、各待機注文および各ポジションごとに、サーバより報告（レポート）が返信されます。
タグ
585
584
1

フィールド名コメント
MassStatusReqType 全ての注文に対し、ステータス ‘7’ のみサポートされる
MassStatusReqID
Account
External Account ID のこと。
このフィールドはマルチアカウント接続の場合のみ使用され、シングルアカウント接続の場合は使用されない。

5.10 Activation Request (MsgType = ‘U5’)
マルチアカウント接続の場合にのみ、実行可能なリクエストです。1 つのアカウントグル
ープ下にある複数のアカウントに関する情報提供のみを目的として、使用されます。
5.11 Activation Response (MsgType = ‘U5’)
マルチアカウント接続の場合にのみ、送られるメッセージです。本メッセージは、Activation Request メッセージに対する返信として、デューカスコピーより送信されます。
タグ
533
1

フィールド名MassStatusreqType
Account

コメント
アカウントの Username (Login)
External Account ID のこと

5.12 Overnight Report (MsgType = ‘U4’)

このメッセージは、ロールオーバーにおける清算手続き (Settlement) 後、クライアントのアカウントのロールオーバー処理の結果に関する情報を提供するため、日々送信されます。
タグ1

フィールド名Account

15Symbol© 2016 Dukascopy Japan KK

コメント
External Account ID または Account ID のこと（シングルアカ
ウント接続の場合）
通貨名
Page 16 of 17

デューカスコピーFIX API プログラミングガイド

7008

Amount© 2016 Dukascopy Japan KK

ロールオーバー・クローズとロールオーバー・オープンの決済通貨換算の差

Page 17 of 17