[実施の形態1]
図1は、取引システム10の構成を示す説明図である。取引システム10は、時々刻々と価格が変動する金融商品の取引を行う際に使用されるシステムである。本実施の形態においては、外国為替証拠金取引を行う際に使用する取引システム10を例にして説明する。株式取引、先物取引等においても、同様のシステムを使用することが可能である。
取引システム10は、投資家サーバ11、レート記録サーバ21、投資家クライアント31、金融機関サーバ32およびこれらを相互に接続するネットワークを含む。
投資家クライアント31は、投資家がオンライン取引に使用するパソコン、タブレットまたはスマートフォン等の情報処理装置である。投資家クライアント31のハードウェア構成については説明を省略する。
金融機関サーバ32は、インターバンク市場に参加する銀行等が使用する情報処理装置である。金融機関サーバ32は、為替レートの市場価格を1秒間に10回から100回程度の頻度でネットワークを介して提示する。金融機関サーバ32のハードウェア構成については説明を省略する。
なお、インターバンク市場においては、市場参加者がそれぞれ市場価格を提示して取引を行う。インターバンク市場の参加者は、信用度が高く、多額の外貨を取引する大手銀行に限定されている。一方、外国為替証拠金取引はインターバンク市場で形成されている市場価格に準じる為替レートに基づいて取引される。
投資家サーバ11は、金融商品取引業者が管理および運用を行う情報処理装置である。投資家サーバ11は、投資家クライアント31からオンラインで受信した金融商品の取引を処理する情報処理装置である。本実施の形態においては、金融商品取引業者は、顧客である個々の投資家に対して、1つの投資家サーバ11を使用する。投資家サーバ11は、本実施の形態の取引装置の一例である。
レート記録サーバ21は、金融商品取引業者が管理および運用を行う情報処理装置である。レート記録サーバ21は、金融機関サーバ32から提示された市場価格を記録および処理し、投資家サーバ11に提供する情報処理装置である。
投資家サーバ11は、CPU(Central Processing Unit)12、主記憶装置13、補助記憶装置14、通信部15およびバスを備える。
CPU12は、本発明に係るプログラムを実行する演算制御装置である。CPU12には、一または複数のCPUまたはマルチコアCPU等が使用される。CPU12は、バスを介して投資家サーバ11を構成するハードウェア各部と接続されている。
主記憶装置13は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)、フラッシュメモリ等の記憶装置である。主記憶装置13には、CPU12が行う処理の途中で必要な情報およびCPU12で実行中のプログラムが一時的に保存される。
補助記憶装置14は、SRAM、フラッシュメモリ、ハードディスクまたは磁気テープ等の記憶装置である。補助記憶装置14には、CPU12に実行させるプログラム、投資家情報DB(Database)51、受注DB52、発注DB53、ポジションDB54、およびプログラムの実行に必要な各種データが保存される。通信部15は、投資家サーバ11とネットワークとの間の通信を行うインターフェイスである。
本実施の形態の投資家サーバ11は、汎用のパーソナルコンピュータ、大型計算機等の情報機器等である。また、本実施の形態の投資家サーバ11は、大型計算機上で動作する仮想マシンでも良い。投資家情報DB51、受注DB52、発注DB53およびポジションDB54は、投資家サーバ11の外部に設置された大容量記憶装置等に記憶されていても良い。
レート記録サーバ21は、レート記録CPU22、主記憶装置23、補助記憶装置24、通信部25およびバスを備える。
レート記録CPU22は、本発明に係るプログラムを実行する演算制御装置である。レート記録CPU22には、一または複数のCPUまたはマルチコアCPU等が使用される。レート記録CPU22は、バスを介してレート記録21を構成するハードウェア各部と接続されている。
主記憶装置23は、SRAM、DRAM、フラッシュメモリ等の記憶装置である。主記憶装置23には、レート記録CPU22が行う処理の途中で必要な情報およびレート記録CPU22で実行中のプログラムが一時的に保存される。
補助記憶装置24は、SRAM、フラッシュメモリ、ハードディスクまたは磁気テープ等の記憶装置である。補助記憶装置24には、レート記録CPU22に実行させるプログラム、レートDB41、HLDB43、デルタTDB42、およびプログラムの実行に必要な各種データが保存される。通信部25は、レート記録サーバ21とネットワークとの間の通信を行うインターフェイスである。
本実施の形態のレート記録サーバ21は、汎用のパーソナルコンピュータ、大型計算機等の情報機器等である。また、本実施の形態のレート記録サーバ21は、大型計算機上で動作する仮想マシンでも良い。レートDB41、HLDB43およびデルタTDB42は、レート記録サーバ21の外部に設置された大容量記憶装置等に記憶されていても良い。
図2は、レートDB41のレコードレイアウトを示す説明図である。レートDB41は、通貨ペアごとの売値および買値の市場価格とタイムスタンプとを関連づけるDBである。レートDB41は、通貨ペアフィールド、売レートフィールド、買レートフィールドおよびタイムスタンプフィールドを有する。
通貨ペアフィールドには、外国為替取引を行う二つの通貨の組合せが記録されている。たとえば「USD/JPY」は、米ドルと日本円との組合せを示す。同様に、「EUR」はユーロ、「GBP」は、英ポンド、「AUD」は、オーストラリアドルを示す。
売レートフィールドには、投資家が通貨ペアフィールドに記録された通貨ペアのうちの、前側の通貨を後側の通貨で購入する際の市場価格が記録されている。買レートフィールドには、投資家が通貨ペアフィールドに記録された通貨ペアのうちの、前側の通貨を後側の通貨で売却する際の市場価格が記録されている。
タイムスタンプフィールドには、市場価格をレートDB41に記録した日時が記録されている。タイムスタンプフィールドの前半は日付、後半は時刻を示す。時刻の小数点以下の3桁は、ミリ秒単位の時刻を示す。レートDB41は、一組の通貨ペアについて1つのフィールドを有する。
具体例を挙げて説明する。図2に示すレートDB41の1行目は、米ドルを売却したい投資家に対しては1ドル100.096円のレートが、米ドルを購入したい投資家に対しては1ドル100.104円のレートが、それぞれタイムスタンプに示す日時に提示されたことを示す。
レート記録CPU22は、金融機関サーバ32から提示された市場価格を受信するたびに、該当する通貨ペアのレコードを更新する。すなわち、レートDB41には、その時点で最新の市場価格が記録されている。レート記録サーバ21は、一つの金融機関サーバ32から提示される市場価格を受信してレートDB41に記録しても良いし、複数の金融機関サーバ32から提示される市場価格を受信してレートDB41に記録しても良い。
レート記録サーバ21は、他の金融商品取引業者から提示される為替レートをレートDB41に記録しても良い。また、レート記録サーバ21は、インターバンク市場の市場価格に基づいて自社の為替ディーラが判断した市場価格を記録しても良い。
図3は、デルタTDB42のレコードレイアウトを示す説明図である。デルタTDB42は、番号と判定時間幅ΔTとを関連づけるDBである。デルタTDB42は番号フィールドとΔTフィールドとを有する。番号フィールドには、1から連番で番号が記録されている。ΔTフィールドには、判定時間幅ΔTが記録されている。デルタTDB42は、一つの番号について1つのレコードを有する。デルタTDB42は、次に説明するHLDB43を作成する際に使用されるDBである。
図4は、HLDB43のレコードレイアウトを示す説明図である。HLDB43は、タイムスタンプ、その時点の市場価格と、判定時間幅ΔT内の過去の最低市場価格Lおよび最高市場価格Hとを関連づけるDBである。HLDB43は、通貨ペアフィールド、売買フィールド、タイムスタンプフィールド、市場価格フィールド、ΔT=10秒フィールド、ΔT=30秒フィールドを有する。ΔT=10秒フィールドおよびΔT=30秒フィールドは、それぞれLフィールドおよびHフィールドを有する。HLDB43は、後述するデルタ注文を行う際に使用されるDBである。
通貨ペアフィールドには、外国為替取引を行う二つの通貨の組合せが記録されている。売買フィールドには、「売」または「買」の別が記録されている。タイムスタンプフィールドには、タイムスタンプが記録されている。市場価格フィールドには、通貨ペアフィールドおよび売買フィールドに記録された為替取引に関する市場価格が記録されている。
ΔT=10秒フィールドのLフィールドには、タイムスタンプの時点から過去10秒間で最も安い市場価格が記録されている。ΔT=10秒フィールドのHフィールドには、タイムスタンプの時点から過去10秒間で最も高い市場価格が記録されている。ΔT=30秒フィールドのLフィールドには、タイムスタンプの時点から過去30秒間で最も安い市場価格が記録されている。ΔT=30秒フィールドのHフィールドには、タイムスタンプの時点から過去30秒間で最も高い市場価格が記録されている。
なお、図4ではΔT=10秒フィールドおよびΔT=30秒フィールド以外は記載を省略するが、HLDB43は図3を使用して説明したデルタTDB42のΔTフィールドに記録されたそれぞれの判定時間幅ΔTに対応するフィールドを有する。それぞれのフィールドは、ΔT=10秒フィールドと同様にLフィールドおよびHフィールドを有する。HLDB43は、一つのタイムスタンプについて一つのレコードを有する。
具体例を挙げて説明する。図4の上から2レコード目の、タイムスタンプが「2016/09/05 10:00:00.005」時点から過去10秒間の最高の市場価格は100.200円である。上から3レコード目の、タイムスタンプが「2016/09/05 10:00:00.040」の時点の市場価格は、100.280円である。そのため、このレコードの時点から過去10秒間の最高の市場価格は100.280円であり、ΔT=10秒フィールドのHフィールドに「100.280」が記録される。
図5は、投資家情報DB51のレコードレイアウトを示す説明図である。投資家情報DB51は、投資家サーバ11が取引を処理する投資家に関する情報を記録するDBである。投資家情報DB51は、項目フィールドと内容フィールドとを有する。項目フィールドには、「投資家ID(IDentification)」、「氏名」、「証拠金」等の項目名が記録されている。内容フィールドには、それぞれの項目に対応する内容が記録されている。証拠金については後述する。
図6は、受注DB52のレコードレイアウトを示す説明図である。受注DB52は、金融商品取引業者に注文した外国為替取引の注文番号、注文の内容および注文状況を関連づけるDBである。
受注DB52は、注文番号フィールド、通貨ペアフィールド、注文タイプフィールド、取引種別フィールド、執行条件フィールド、注文価格フィールド、トリガ値フィールド、トリガ幅フィールド、トレール幅フィールド、ΔPフィールド、ΔTフィールド、取引金額フィールド、期限フィールド、注文状況フィールド、発注証拠金フィールド、親注文番号フィールドおよび証拠金グループフィールドを有する。
注文番号フィールドには、個々の注文に固有に付与された注文番号が記録されている。通貨ペアフィールドには、注文された通貨ペアが記録されている。注文タイプフィールドには、「新規」「決済利益確定」「決済ストップ」のいずれのタイプの注文であるかが記録されている。「新規」は、投資家が新たなポジションを取得する注文を意味する。「決済利益確定」は、投資家が保有しているポジションを反対売買により決済して利益を確定する注文を意味する。「決済ストップ」は、投資家が保有しているポジションを反対売買により決済して、損切りを行うストップ注文を意味する。
取引種別フィールドには、「売」または「買」のどちらの注文であるかが記録されている。「売」は売り注文を、「買」は、買い注文を意味する。執行条件フィールドには、注文を執行する際の判定条件の種類が記録されている。「デルタ」、「相対トリガトレール」および「トレール」については後述する。
「指値」は、後述する注文価格フィールドに記録された価格よりも投資家にとって有利な条件であれば約定することを意味する。たとえば、買い注文である場合には、注文価格よりも市場価格が安い場合に約定する。売り注文である場合には、注文価格よりも市場価格が高い場合に約定する。
「逆指値」は、後述する注文価格フィールドに記録された価格よりも投資家にとって不利な条件であれば約定することを意味する。たとえば、買い注文である場合には、注文価格よりも市場価格が高い場合に約定する。売り注文である場合には、注文価格よりも市場価格が安い場合に約定する。
注文価格フィールドには、投資家が指定した注文価格が記録されている。注文価格フィールドに「−」が記録されている場合には、価格が未定であることを意味する。
トリガ値フィールド、トリガ幅フィールド、トレール幅フィールド、ΔPフィールドおよびΔTフィールドには、執行条件が「デルタ」、「相対トリガトレール」および「トレール」である場合のパラメータが記録されている。各パラメータの詳細については後述する。
取引金額フィールドには、顧客が注文した取引金額が記録されている。取引金額は、通貨ペアの左側に示された通貨を使用して示す。具体的には、注文番号101は米ドルで1000ドルの注文であることを示す。
期限フィールドには、注文の有効期限が記録されている。「GTC」は、Good Till Cancelの略であり、無期限で有効な注文を意味する。注文状況フィールドには、注文の状況が記録されている。「注文中」は投資家が指定した条件と市場価格とが合致した場合に約定する注文を示す。「待機中」は、関連する注文が約定した場合に、有効になる注文を示す。注文状況フィールドには、約定したことを示す「成立」、注文を取り消したことを示す「取消済」等も記録される。
発注証拠金フィールドには、新規注文を行う際に必要な発注証拠金が記録されている。発注証拠金については後述する。なお、決済注文を行う場合には発注証拠金は不要であるので「−」が記録されている。
親注文番号フィールドには、関連する新規注文の注文番号が記録されている。たとえば注文番号101は、新規注文であるので親注文は存在しない。そのため親注文番号フィールドには「−」が記録されている。注文番号102および注文番号103は、注文番号101の決済注文であるので、親注文番号フィールドに「101」が記録されている。
証拠金グループフィールドには、発注証拠金を1つのグループとして扱う証拠金グループの番号が記録されている。証拠金グループについては、後述する。なお、決済注文を行う場合には発注証拠金は不要であるので「−」が記録されている。
図7は、発注DB53のレコードレイアウトを示す説明図である。発注DB53は、投資家が指定した条件と市場価格とが合致した場合に約定する外国為替取引の注文番号、注文の内容および注文状況を関連づけるDBである。
発注DB53は、注文番号フィールド、通貨ペアフィールド、注文タイプフィールド、取引種別フィールド、執行条件フィールド、注文価格フィールド、トリガ値フィールド、トリガ幅フィールド、トレール幅フィールド、ΔPフィールド、ΔTフィールド、取引金額フィールド、期限フィールド、発注証拠金フィールド、親注文番号フィールドおよび証拠金グループフィールドを有する。各フィールドに記録されているデータは、図6を使用して説明した受注DB52と同様であるので説明を省略する。
図8は、ポジションDB54のレコードレイアウトを示す説明図である。ポジションDB54は、投資家が保有しているポジションの注文番号、ポジションの内容および関連注文の番号を関連づけるDBである。ポジションDB54は、注文番号フィールド、通貨ペアフィールド、取引種別フィールド、約定価格フィールド、取引金額フィールド、約定日時フィールドおよび決済注文番号フィールドを有する。決済注文番号フィールドは、利益確定フィールドとストップフィールドとを有する。
注文番号フィールドには、個々の注文に固有に付与された注文番号が記録されている。通貨ペアフィールドには、注文された通貨ペアが記録されている。取引種別フィールドには、「売」または「買」のどちらのポジションであるかが記録されている。「売」は売り注文により取ったポジションであることを、「買」は買い注文により取ったポジションであることを意味する。
約定価格フィールドには、ポジションを取った際の約定価格が記録されている。取引金額フィールドには、ポジションの取引金額が記録されている。約定日時フィールドには、ポジションが約定した日時が記録されている。利益確定フィールドには、利益確定注文の注文番号が記録されている。ストップフィールドにはストップ注文の注文番号が記録されている。
ここで、証拠金および発注証拠金について説明する。証拠金は、投資家が金融商品取引業者に対して担保として差し入れた金銭を示す。外国為替証拠金取引では、投資家は証拠金を担保として、証拠金よりも高額の外国通貨の売りポジションまたは買いポジションを取ることができる。投資家は、保有しているポジションを反対売買により決済することにより、為替変動に応じた損益を得る。
以下の説明では、投資家が差し入れた証拠金から、投資家が保有しているポジションを時価評価した場合の損益を差し引いた金額を、有効証拠金と呼ぶ。有効証拠金は、保有しているポジションをすべて時価で決済した場合に、投資家の手元に残る証拠金に相当する金額である。
同様に、投資家が保有しているポジションを取得した際の価格に対して所定の証拠金率を積算した金額を、必要証拠金と呼ぶ。投資家は、必要証拠金以上の有効証拠金を維持する必要がある。仮に有効証拠金が必要証拠金を下回った場合には、金融商品取引業者は投資家が保有しているポジションを強制的に決済する、いわゆるロスカットを行う。ロスカットにより、差し入れた証拠金以上の損失を投資家がこうむることを防止することができる。
投資家が新たなポジションを取得した場合には、取得価格に応じて必要証拠金が増加する。仮に、有効証拠金が増加後の必要証拠金を下回った場合には、ポジションを取得した直後にロスカットが発生して投資家が損失をうける可能性がある。
このような損失を避けるため、新規注文を行う場合には、約定した場合の投資家の有効証拠金が十分であるか否かを確認することが望ましい。本実施の形態においては、CPU12は、式(1)に基づいてそれぞれの新規注文に対する発注証拠金を算出し、受注DB52の発注証拠金フィールドに記録する。
発注証拠金=約定見込価格×取引金額×証拠金率 ‥‥‥ (1)
発注証拠金は、約定見込価格の為替レートで新規注文が約定した場合に増加する必要証拠金の金額である。
投資家から新規注文を受け付けた場合には、CPU12はその新規注文に対する発注証拠金を算出する。CPU12は、受け付けた新規注文を含む未約定の注文に関する発注証拠金の合計額である合計発注証拠金を算出する。CPU12は、有効証拠金が合計発注証拠金と必要証拠金との和以上である場合には、新規注文を受け付ける。CPU12は、有効証拠金が合計発注証拠金と必要証拠金との和未満である場合には、新規注文を受け付けない。
しかしながら、投資家は複数のシナリオを想定して投資を行う場合がある。たとえば、円高になるシナリオと、円安になるシナリオとの両方を想定している場合に、それぞれのシナリオに基づいて新規注文を行う場合には、実現しなかった方のシナリオ分の発注証拠金は、活用されない。
本実施の形態においては、受注DB52および発注DB53の証拠金グループフィールドに記録した証拠金グループにより、新規注文を証拠金グループに分ける。一つの証拠金グループに属する新規注文の発注証拠金には、証拠金グループ内で最も発注証拠金の高い1つの新規注文の発注証拠金を使用する。証拠金グループ内のいずれか一つの新規注文が約定した場合には、同一証拠金グループ内の他の新規注文および対応する決済注文をキャンセルする。すなわち、一つの証拠金グループ内の複数の新規注文は、発注証拠金を共有する。
証拠金グループにより、複数のシナリオを想定して、それぞれのシナリオに対して並行して複数行う場合に、証拠金の運用効率を高めることが可能な取引装置等を提供することができる。
以上により、CPU12は、約定した直後に必要証拠金が有効証拠金を超えてロスカットが起きる可能性の高い新規注文を防止することができる。
CPU12は、投資家からの注文を受け付けた日時における市場価格を式(1)の約定見込価格に使用することができる。CPU12は、図4を使用して説明したHLDB43から最新のレコードを抽出し、任意の判定時間幅ΔTのHフィールドに記録された値を約定見込価格に使用することもできる。このようにすることにより、実際に約定した際に増加する必要証拠金が式(1)に基づいて算出した発注証拠金を大きく上回り、ロスカットが起きる可能性を低減できる。
CPU12は、投資家からの注文を受け付けた日時における市場価格に所定の安全係数を積算した値を式(1)の約定見込価格に使用することができる。安全係数には1以上の任意の数値を使用することができる。このようにすることにより、投資家が市場価格の変動が激しい通貨ペアを発注して約定した場合に、ロスカットが起こる可能性を低減できる。
CPU12は、投資家の投資実績および保有資産等の条件、発注する通貨ペアおよび外国為替市場の状況等により、安全係数を変更しても良い。
図9は、投資家クライアント31の入力画面例を示す説明図である。投資家クライアント31は、ネットワークを介して投資家サーバ11から受信した情報に基づいてディスプレイに図9に示す入力画面を表示する。投資家クライアント31は、タッチパネル、キーボードまたはマウスなどの入力機器を介して、投資家による入力を受け付け、ネットワークを介して投資家サーバ11に送信する。なお、投資家サーバ11と投資家クライアント31との間の通信は、SSL(Secure Sockets Layer)等の暗号化技術により、セキュリティを確保する。
入力画面は、通貨ペア欄61、金額欄62、新規欄63、決済欄64および成立反復欄65を含む。新規欄63は、新規種別欄631および新規注文欄632を含む。決済欄64は、決済種別欄641、利益確定注文欄642およびストップ注文欄643を含む。なお、図9においては、選択されている項目を二重線で囲んで示す。
CPU12は、通貨ペア欄61を介して、投資家が取引する通貨ペアを受け付ける。CPU12は、金額欄62を介して、投資家が取引する金額を受け付ける。CPU12は、新規種別欄631を介して、「売」または「買」のどちらの新規注文であるかを受け付ける。なお、CPU12は、決済種別欄641に新規種別欄631で受け付けた注文の反対取引が選択された状態を表示する。
CPU12は、新規注文欄632を介して新規注文の執行条件およびパラメータを受け付ける。CPU12は、利益確定注文欄642を介して利益確定注文の執行条件およびパラメータを受け付ける。CPU12は、ストップ注文欄643を介してストップ注文の執行条件およびパラメータを受け付ける。
CPU12は、成立反復欄65を介して決済注文が約定した後に再度同じ注文を反復するか否かを受け付ける。図9において「Off」は注文の反復を行わないことを意味する。「PL+Repeat」は、決済注文が約定した際に利益が出た場合には同一条件の注文を反復し、利益が出なかった場合には反復を行わないことを意味する。
図10は、デルタ注文による新規注文を説明する説明図である。縦軸は市場価格を示す。横軸は時間を示す。黒丸は、各時間における市場価格を示す。図10を使用してデルタ注文について説明する。
市場価格は、短期的にみると不規則に変動するが、長期的にみると上昇トレンド相場と下降トレンド相場とを繰り返して周期的に変動する場合が多いことが経験的に知られている。また、トレンド相場の間では、市場価格が狭い価格帯の範囲で変動するいわゆるレンジ相場が発生する場合が多いことも経験的に知られている。
投資家は、市場価格がどのように変動するかを予測して、投資を行う。特に、レンジ相場から上昇トレンド相場に移行するタイミングで取った買いポジションを上昇トレンド相場の終了時に決済すること、およびレンジ相場から下降トレンド相場に移行するタイミングで取った売りポジションを上昇トレンド相場の終了時に決済することにより、投資家は効率良く利益を得ることができる。
図10において、現在時刻をtAで示す。時刻tAにおける市場価格はAである。判定時間幅ΔTの時間Tの開始時刻が時刻tS、終了時刻が時刻tEである。ここで時刻tEは、時刻tAの一つ前のタイムスタンプである。時刻tSから時刻tEまでの時間内における最低市場価格Lおよび最高市場価格Hを図10にHおよびLの記号で示す。
図4を使用して説明したHLDB43の一つのレコードのタイムスタンプフィールドに時刻tEが、市場価格フィールドに時刻tEにおける市場場価格Eが、Lフィールドに最低市場価格Lが、Hフィールドに最高市場価格Hがそれぞれ記録されている。
市場価格が上昇トレンド相場に入った場合には、図10に示すように、市場価格Aと最低市場価格Lとの差が、単位判定価格幅ΔPと判定時間幅ΔTとの積である判定価格幅よりも大きくなる。CPU12は、デルタ注文の条件が満たされたと判定して、約定を行う。ここで、単位判定価格幅ΔPおよび判定時間幅ΔTは、デルタ注文に関するパラメータである。
以上に説明したデルタ注文について、簡単にまとめる。判定時間幅ΔTは、市場価格が上昇トレンド相場または下降トレンド相場に入ったか否かを判定する時間幅を示すパラメータである。単位判定価格幅ΔPは、市場価格が上昇トレンド相場または下降トレンド相場に入ったか否かを判定する単位時間あたりの価格幅を示すパラメータである。
本実施の形態においては、CPU12は、市場価格Aと最低市場価格Lとの差が単位判定価格幅ΔPと判定時間幅ΔTとの積である判定価格幅を超えたことを、市場価格が上昇トレンド相場に入ったことを示す指標に使用する。同様に、CPU12は、最高市場価格Hと市場価格Aとの差が単位判定価格幅ΔPと判定時間幅ΔTとの積である判定価格幅を超えたことを、市場価格が下降トレンド相場に入ったことを示す指標に使用する。
図10に示すように、CPU12が、市場価格が上昇トレンド相場に入った直後である時刻tAに価格Aで買いポジションを取り、市場価格が十分に上昇した時刻tBに市場価格Bで決済することにより、価格Bと価格Aの差額に対応する利益が生じる。同様に、CPU12が、市場価格が下降トレンド相場に入った直後に売りポジションを取り、市場価格が十分に下落した後に決済することにより、売却価格と購入価格の差額に対応する利益が生じる。
上昇トレンド相場が生じると予測している投資家は、デルタ注文による買い注文を指示する。市場価格の推移を投資家自身がリアルタイムで監視しなくても、上昇トレンド相場が生じた場合にはCPU12が自動的に有利なポジションを取る処理を行う。予測が外れて上昇トレンド相場が生じない場合には、CPU12は買いポジションを取る処理を行わないため、損失の発生を回避することが可能である。
下降トレンド相場が生じると予測している投資家は、デルタ注文による売り注文を指示する。市場価格の推移を投資家自身がリアルタイムで監視しなくても、下降トレンド相場が生じた場合にはCPU12が自動的に有利なポジションを取る処理を行う。予測が外れて下降トレンド相場が生じない場合には、CPU12は売りポジションを取る処理を行わないため、損失の発生を回避することが可能である。
CPU12は、最小値幅単位pipsに基づいて単位判定価格幅ΔPおよび判定時間幅ΔTの入力を受け付けても良い。様々な為替ペアを扱う投資家である場合、pipsを使用することにより、外国為替の値動きを把握しやすい場合がある。
CPU12は、単位判定価格幅ΔPの代わりに、判定価格幅の入力を受け付けても良い。判定時間幅ΔTと、判定価格幅とを別々に考慮したい投資家の要望に対応することが可能である。
CPU12は、単位判定価格幅ΔPを市場価格に対する相対値により受け付けても良い。たとえば、注文入力時の市場価格、最高市場価格H、最低市場価格L、または最高市場価格Hと最低市場価格Lとの平均値のいずれかに対する5%のように定めることができる。
図11は、相対トリガトレール注文による決済注文を説明する説明図である。縦軸は市場価格を示す。横軸は時間を示す。黒丸は、各時間における市場価格を示す。図10を使用して相対トリガトレール注文について説明する。
トレール注文は、市場価格の上昇幅、または下落幅に合わせて、逆指値注文の価格をリアルタイムで自動修正する注文方法であり、ストップ注文に利用されている。相対トリガトレール注文においては、トレール注文の初期値を相対的に定める。
時刻tAにおいて、市場価格Aで買いポジションを取った場合を例にして説明する。ここで買いポジションは、図9を使用して説明したデルタ注文を使用して取ることができる。また従来から広く使用されている指値注文または成行き注文により買いポジションを取っても良い。
CPU12は、買いポジション価格である市場価格Aに利益確定注文のトリガ幅ΔTgを加算した価格を、相対トリガトレール注文のトリガ価格Trigに設定する。CPU12は、買いポジション価格である市場価格Aからストップ注文のトレール幅ΔSを減算した価格S1をストップ注文価格に設定する。ストップ注文価格は、保有しているポジションを反対売買により決済して、損切りを行うストップ注文を実施する逆指値である。
CPU12は、市場価格を逐次取得する。時刻t23における市場価格P23からストップ注文のトレール幅ΔSを減算した価格S2が価格S1より高いので、CPU12はストップ注文価格を価格S2に変更する。同様に、時刻t24における市場価格P24からストップ注文のトレール幅ΔSを減算した価格S3が価格S2より高いので、CPU12は、時刻t24においてストップ注文価格を価格S3に変更する。
時刻t25において、CPU12は市場価格P25がトリガ価格Trigを上回ると判定する。CPU12は、市場価格P25から利益確定注文のトレール幅ΔRを減算した価格M1をトレール価格に設定する。トレール価格は、保有しているポジションを反対売買により決済して、利益を確定する逆指値注文を行う価格である。さらに時刻t25において、CPU12は、ストップ注文を取り消す。
時刻t26における市場価格P26からトレール幅ΔRを減算した価格M2がトレール価格M1より高いので、CPU12は価格M2をトレール価格に設定する。時刻tBにおける市場価格Bがトレール価格M2以下であるので、CPU12は利益確定注文を実施する。
以上に説明した相対トリガトレール注文について、簡単にまとめる。利益確定注文のトリガ幅ΔTgは、相対トリガトレール注文のトレール開始価格を定めるパラメータである。利益確定注文のトレール幅ΔRは、相対トリガトレール注文の逆指値の変動量を定めるパラメータである。
本実施の形態においては、CPU12は、トレール価格のトレールを開始するトリガ価格を、ポジションの取得価格を基準にして相対的に設定する。図10を使用して説明したデルタ注文のように、約定するまでポジションの価格が定まらない場合であっても、CPU12は、投資家が期待する水準および方向の市場価格変動が生じた後に利益確定注文のトレールを開始する。
図11においては、買いポジションを取り、売り決済を行う場合を例にして説明した。同様にして、売りポジションを取り、買い決済を行う場合であっても、CPU12は相対トリガトレール注文を実施することが可能である。
外国為替取引においては、ネットワークのタイムラグ等により指値注文であっても注文価格と約定価格とが異なる、いわゆるスリッページが生じる場合がある。相対トリガトレール注文を使用することにより、スリッページが生じた場合であっても、CPU12は、ポジションの約定価格を基準として利益確定注文のトレールを開始するトリガ価格を定めることが可能である。
図12は、受注DB52のレコードレイアウトを示す説明図である。図13は、発注DB53のレコードレイアウトを示す説明図である。図6から図13を使用して、CPU12が行う処理の概要を説明する。また受注DB52および発注DB53の、トリガ値フィールド、トリガ幅フィールド、トレール幅フィールド、ΔPフィールドおよびΔTフィールドに記録される各パラメータについても説明する。
図6は、図9を使用して説明した画面を介してCPU12が取得した3件の新規注文およびそれぞれの決済注文が記録された状態の受注DB52を示す。注文番号101はデルタ注文を使用する新規買い注文であり、注文番号102は相対トリガトレール注文を使用する決済利益確定注文、注文番号103はトレール注文を使用する決済ストップ注文である。注文番号104はデルタ注文を使用する新規売り注文であり、注文番号105は相対トリガトレール注文を使用する決済利益確定注文、注文番号106はトレール注文を使用する決済ストップ注文である。注文番号107は、指値注文を使用する新規買い注文であり、注文番号108は指値注文を使用する決済利益確定注文、注文番号106は逆指値注文を使用する決済ストップ注文である。
注文番号101および注文番号104は、デルタ注文であるので注文価格が未定である。そのため、注文価格フィールドに「−」が記録されている。図10を使用して説明したデルタ注文のパラメータである単位判定価格幅ΔPおよび判定時間幅ΔTが、ΔPフィールドおよびΔTフィールドにそれぞれ記録されている。トリガ値、トリガ幅およびトレール幅のパラメータは指定されていないので、これらのフィールドには「−」が記録されている。
注文番号102および注文番号105は、注文価格が未定である。そのため、注文価格フィールドに「−」が記録されている。図11を使用して説明した相対トリガトレール注文のパラメータであるトリガ幅ΔTgおよびトレール幅ΔRが、トリガ幅フィールドおよびトレール幅フィールドにそれぞれ記録されている。トリガ値、単位判定価格幅ΔPおよび判定時間幅ΔTは指定されていないので、これらのフィールドには「−」が記録されている。
注文番号103および注文番号106も、注文価格が未定である。そのため、注文価格フィールドに「−」が記録されている。図11を使用して説明したトレール注文のパラメータであるトレール幅ΔSが、トレール幅フィールドに記録されている。トリガ値、トリガ幅、単位判定価格幅ΔPおよび判定時間幅ΔTは指定されていないので、これらのフィールドには「−」が記録されている。
注文番号107から109は、指値注文および逆指値注文であるので、注文価格フィールドに価格が記録されている。トリガ値、トリガ幅、トレール幅、単位判定価格幅ΔPおよび判定時間幅ΔTは指定されていないので、これらのフィールドには「−」が記録されている。
新規注文である、注文番号101、注文番号104および注文番号107の注文状況フィールドに「注文中」と記録されている。新規注文が約定していないため、それぞれの新規注文に関連する決済注文の注文状況フィールドには「待機中」と記録されている。
CPU12は、図6を使用して説明した受注DB52を参照して注文状況フィールドに「注文中」と記録されているレコードを抽出し、注文番号フィールドをキーとして発注DB53と照合する。受注DB52から抽出したレコードに発注DB53に記録されていないレコードがある場合には、CPU12は該当するレコードを発注DB53に複写する。図7は、複写が完了した状態の発注DB53を示す。
CPU12は、発注DB53に記録されている各レコードについて、執行条件、各パラメータおよび市場価格に基づき約定可否を判定する。約定可能ではないと判定した場合には、市場価格を取得しなおして、約定可否を判定することを繰り返す。なお、注文価格フィールドに注文価格が記録されていないレコードについては、CPU12は執行条件およびパラメータにより示される条件が満たされたと判定した後に、約定可否を判定する。
約定可能であると判定した場合には、発注DB53は所定の取引プロトコルに従って取引相手との間で約定を行う。金融商品の取引プロトコルは従来から使用されているので説明を省略する。
なお、CPU12は、発注DB53に記録されている複数のレコードに対する処理を並行して実施する。
図12は、注文番号101が約定した後の受注DB52を示す。CPU12は、注文番号101のレコードの注文状況フィールドに、「約定」を記録する。CPU12は、受注DB52の親注文番号フィールドを検索して、注文番号101に対応する決済注文である注文番号102および注文番号103を抽出する。CPU12は、注文番号102および注文番号103のレコードの注文状況フィールドに「注文中」を記録する。
CPU12は、約定済の注文番号101に対応するレコードを、図7を使用して説明した発注DB53から削除する。CPU12は、図12を使用して説明した受注DB52を参照して注文状況フィールドに「注文中」と記録されているレコードを抽出し、注文番号フィールドをキーとして発注DB53と照合する。受注DB52から抽出したレコードのうち注文番号102および注文番号103は発注DB53に記録されていない。したがって、CPU12は注文番号102および注文番号103に対応するレコードを発注DB53に複写する。
CPU12は、相対トリガトレール注文である注文番号102のレコードのトリガ値フィールドに、ポジションの約定価格にトリガ幅ΔTgを加算した値を記録する。CPU12は、トレール注文である注文番号103のレコードの注文価格フィールドに、ポジションの約定価格にトレール幅ΔSを加算した値を記録する。以上の処理が完了した状態の発注DB53を、図13に示す。
CPU12は、発注DB53に追加されたレコードを含む各レコードについて、執行条件、各パラメータおよび市場価格に基づき約定可否を判定する。
図14は、レート記録サーバ21のプログラムの処理の流れを示すフローチャートである。図14を使用して、本実施の形態のレート記録CPU22がHLDB43を生成する処理の流れを説明する。
レート記録CPU22は、ネットワークを介して金融機関サーバ32が提示する市場価格を取得する(ステップS501)。レート記録CPU22は、図4を使用して説明したHDDB43に新しいレコードを作成し、タイムスタンプおよび市場価格をそれぞれのフィールドに記録する(ステップS502)。
レート記録CPU22は、カウンタIを初期値1に設定する(ステップS503)。レート記録CPU22は、図3を使用して説明したデルタTDB42から番号フィールドがカウンタIと一致するレコードを抽出し、ΔTフィールドに記録された判定時間幅ΔTを取得する(ステップS504)。
レート記録CPU22は、HDDB43のタイムスタンプフィールドおよび市場価格フィールドを参照して、直近の判定時間幅ΔTの時間内の市場価格の最高値Hを抽出する(ステップS505)。レート記録CPU22は、HDDB43のタイムスタンプフィールドおよび市場価格フィールドを参照して、直近の判定時間幅ΔTの時間内の市場価格の最低値Lを抽出する(ステップS506)。レート記録CPU22は、ステップS502で作成したレコードの判定時間幅ΔTに対応するLフィールドに最低値Lを、Hフィールドに最高値Hをそれぞれ記録する(ステップS507)。
レート記録CPU22は、デルタTDB42のすべてのレコードの処理を終了したか否かを判定する(ステップS508)。終了していないと判定した場合(ステップS508でNO)、レート記録CPU22はステップS504に戻る。終了したと判定した場合(ステップS508でYES)、レート記録CPU22はプログラムを終了するか否かを判定する(ステップS509)。ここでプログラムを終了すると判定する場合とは、金融商品取引業者から終了の指示を受け付けた場合である。
終了しないと判定した場合(ステップS509でNO)、レート記録CPU22はステップS501に戻る。終了すると判定した場合(ステップS509でYES)、レート記録CPU22は処理を終了する。
図15は、投資家サーバ11のプログラムの処理の流れを示すフローチャートである。図15を使用して、CPU12が行う処理の流れを説明する。なお、図15は1件の新規注文受付、ポジション取得および決済の一連の処理を行うプログラムを示す。CPU12は、新規注文に対応する数のプログラムを、並行して実行する。
CPU12は、注文受付サブルーチンを起動する(ステップS521)。注文受付サブルーチンは、ネットワークを介して投資家クライアント31から注文を受け付けるサブルーチンである。注文受付サブルーチンの処理の流れは後述する。
CPU12は証拠金確認サブルーチンを起動する(ステップS523)。証拠金確認サブルーチンは、証拠金が足りるか否かを確認するサブルーチンである。証拠金確認サブルーチンの処理の流れは後述する。
CPU12は、証拠金確認サブルーチンの処理結果に基づき証拠金が足りるか否かを判定する(ステップS524)。証拠金が足りると判定した場合(ステップS524でYES)、CPU12はポジション取得サブルーチンを起動する(ステップS525)。ポジション取得サブルーチンは、ステップS521で受け付けた注文に基づいて新規ポジションを取得する処理を行うサブルーチンである。ポジション取得サブルーチンの処理の流れは後述する。
CPU12は、ステップS525の処理結果に基づき受注DB52を更新する(ステップS526)。具体的には、約定した場合には約定した新規注文の受注レコードの注文状況フィールドに「約定」と記録し、対応する決済注文の受注レコードの注文状況フィールドに「注文中」と記録する。期限フィールドに記録された期限が到来した等の理由で約定せずにポジション取得サブルーチンを終了した場合には、約定しなかった新規注文および対応する決済注文の注文状況フィールドに「取消」と記録する。
CPU12は、ステップS525の処理結果に基づき発注DB53を更新する(ステップS527)。具体的には、CPU12は、ステップS526で処理を行った発注レコードを削除する。さらに、CPU12は、決済した新規注文に対応する決済注文に関するレコードを受注DB52から発注DB53に複写する。
CPU12は、ステップS525で取得したポジションが存在するか否かを判定する(ステップS528)。存在すると判定した場合(ステップS528でYES)、CPU12はポジション決済サブルーチンを起動する(ステップS529)。ポジション決済サブルーチンは、保有するポジションを決済する処理を行うサブルーチンである。ポジション決済サブルーチンの処理の流れは後述する。
CPU12は、ステップS529の処理結果に基づき受注DB52を更新する(ステップS530)。具体的には、約定した決済注文の受注レコードの注文状況フィールドに「約定」と記録し、約定しなかった決済注文の受注レコードの注文状況フィールドに「取消」と記録する。
CPU12は、発注DB53を更新する(ステップS531)。具体的には、ステップS529で処理を行った発注レコードを削除する。ステップS525で取得したポジションが存在しないと判定した場合(ステップS528でNO)およびステップS531の終了後、CPU12は処理を終了する。
証拠金が足りないと判定した場合(ステップS524でNO)、CPU12はネットワークを介して投資家クライアント31に証拠金が不足する旨を表示する(ステップS535)。CPU12は、ステップS521で受け付けた注文に関するレコードを受注DB52および発注DB53から削除する(ステップS536)。CPU12は、その後処理を終了する。
図16は、注文受付サブルーチンの処理の流れを示すフローチャートである。注文受付サブルーチンは、ネットワークを介して投資家クライアント31から注文を受け付けるサブルーチンである。図16を使用して、注文受付サブルーチンの処理の流れを説明する。
CPU12は、ネットワークを介して投資家クライアント31のCPUに入力画面するために必要な情報を送信する。投資家クライアント31のCPUは、投資家クライアント31の表示部に図9を使用して説明した入力画面を表示する。以下の説明では投資家クライアント31のCPUによる処理を省略して、「CPU12は、投資家クライアント31に入力画面を表示する」のように記載する(ステップS551)。
CPU12は、入力画面を介して外国為替証拠金取引の注文の入力を受け付ける(ステップS552)。CPU12は、入力された注文にエラーがあるか否かを判定する(ステップS553)。エラーがある場合とは、たとえば新規買い注文の指値が市場価格よりも高い場合である。
エラーがあると判定した場合(ステップS553でYES)、CPU12はエラーの内容を投資家クライアント31に表示し(ステップS554)、ステップS551に戻る。エラーが無いと判定した場合(ステップS553でNO)、CPU12は入力を受け付けた注文に対して注文番号を付与する(ステップS555)。
CPU12は、ステップS552で受け付けた注文内容を受注DB52に記録する(ステップS556)。CPU12はステップS552で受け付けた注文内容のうち、新規注文を発注DB53に記録する(ステップS557)。その後CPU12は処理を終了する。
図17は、証拠金確認サブルーチンの処理の流れを示すフローチャートである。証拠金確認サブルーチンは、証拠金が足りるか否かを確認するサブルーチンである。図17を使用して、証拠金確認サブルーチンの処理の流れを説明する。
CPU12は、レートDB41より各外国為替の市場価格を取得する(ステップS571)。CPU12は、ネットワークを介して金融機関サーバ32から直接市場価格を取得しても良い。
CPU12は、変数「合計損益」を初期値0に設定する(ステップS572)。CPU12は、カウンタIを初期値1に設定する(ステップS573)。CPU12は、ポジションDB54よりI番目のポジションレコードを抽出して、式(2)に基づき時価損益を算出する(ステップS574)。
時価損益=(市場価格−約定価格)×取引金額 ‥‥‥ (2)
ここで、市場価格は、保有するポジションを反対取引により決済する際の価格である。
CPU12は、変数「合計損益」にステップS574で算出した時価損益を加算する(ステップS575)。CPU12は、ポジションDB54に記録されたすべてのポジションの処理を終了したか否かを判定する(ステップS576)。終了していないと判定した場合(ステップS576でNO)、CPU12は、カウンタIに1を加算する(ステップS577)。CPU12は、ステップS574に戻る。
すべてのポジションの処理を終了したと判定した場合(ステップS576でYES)、CPU12は、式(3)に基づき有効証拠金を算出する(ステップS581)。
有効証拠金=証拠金+時価損益 ‥‥‥ (3)
CPU12は、発注証拠金更新のサブルーチンを起動する(ステップS582)。発注証拠金更新のサブルーチンは、発注DB53の発注証拠金フィールドに記録されたデータを市場価格に基づいて更新するサブルーチンである。発注証拠金更新のサブルーチンの処理の流れは後述する。
CPU12は、合計発注証拠金算出のサブルーチンを起動する(ステップS583)。合計発注証拠金算出のサブルーチンは、新規注文の発注証拠金を合計した合計発注証拠金を算出するサブルーチンである。合計発注証拠金算出のサブルーチンの処理の流れは後述する。
CPU12は、ポジションDB54の約定価格フィールドに記録された約定価格の総和である合計約定価格に所定の証拠金率を乗じて、必要証拠金を算出する(ステップS584)。必要証拠金は、保有しているポジションを維持するために必要な証拠金である。証拠金率は、金融商品取引業者と投資家との間の契約等に定める値であり、たとえば4%である。
CPU12は、有効証拠金が必要証拠金と合計発注証拠金との和以上であるか否かを判定する(ステップS585)。有効証拠金が必要証拠金と合計発注証拠金との和以上であると判定した場合(ステップS585でYES)、CPU12は「証拠金は足りる」と判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS586)。CPU12は、その後処理を終了する。
有効証拠金が必要証拠金と合計発注証拠金との和未満であると判定した場合(ステップS585でNO)、CPU12は「証拠金は足りない」と判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS587)。CPU12は、その後処理を終了する。
図18は、発注証拠金更新サブルーチンの処理の流れを示すフローチャートである。発注証拠金更新のサブルーチンは、発注DB53の発注証拠金フィールドに記録されたデータを市場価格に基づいて更新するサブルーチンである。図18を使用して、発注証拠金更新のサブルーチンの処理の流れを説明する。
CPU12は、レートDB41より各外国為替の市場価格を取得する(ステップS601)。CPU12は、カウンタIを初期値1に設定する(ステップS602)。CPU12は、発注DB53からI番目の発注レコードを取得する(ステップS603)。CPU12は、取得した発注レコードの注文タイプフィールドを参照して、新規注文の発注レコードであるか否かを判定する(ステップS604)。
新規注文の発注レコードであると判定した場合(ステップS604でYES)、CPU12は、執行条件フィールドを参照して発注証拠金が確定しているか否かを判定する(ステップS605)。具体的には、執行条件が「指値」または「逆指値」である場合は、発注証拠金が確定している。執行条件が「デルタ」等の市場価格に応じて注文価格が変動する条件である場合は、発注証拠金が確定していない。
発注証拠金が確定していないと判定した場合(ステップS605でNO)、CPU12は、式(1)に基づいて新たな発注証拠金を算出する(ステップS606)。CPU12は、発注DB53の発注証拠金フィールドを、ステップS606で算出した発注証拠金により更新する(ステップS607)。
新規注文の発注レコードではないと判定した場合(ステップS604でNO)、発注証拠金が確定していると判定した場合(ステップS605でYES)およびステップS607の終了後、CPU12は、発注DB53のすべてのレコードの処理が終了したか否かを判定する(ステップS608)。
終了していないと判定した場合(ステップS608でNO)、CPU12は、カウンタIに1を加算する(ステップS609)。CPU12は、ステップS603に戻る。終了したと判定した場合(ステップS608でYES)、CPU12は処理を終了する。
なお、CPU12は、ステップS601を省略して、呼び出し元のプログラムで取得した市場価格を本サブルーチンでも使用しても良い。市場価格を取得する処理を省略することにより、発注証拠金更新のサブルーチンの処理を早くすることができる。
また、CPU12は、ステップS605とステップS606との間で市場価格を取得しても良い。発注証拠金を算出する直前で市場価格を取得することにより、最新の市場価格を発注証拠金に反映させることができる。
図19は、合計発注証拠金算出サブルーチンの処理の流れを示すフローチャートである。合計発注証拠金算出のサブルーチンは、新規注文の発注証拠金を合計した合計発注証拠金を算出するサブルーチンである。図19を使用して、合計発注証拠金算出のサブルーチンの処理の流れを説明する。
CPU12は、変数「合計発注証拠金」を初期値0に設定する(ステップS921)。CPU12は、変数G(J)を初期値0に設定する(ステップS922)。ここでJは1から証拠金グループの数までの整数である。変数G(J)は、J番目のグループの発注証拠金の最大値を抽出するために一時的に使用する変数である。
CPU12は、カウンタIを初期値1に設定する(ステップS923)。CPU12は、発注DB53からI番目の発注レコードを取得する(ステップS924)。CPU12は、取得した発注レコードの注文タイプフィールドを参照して、新規注文の発注レコードであるか否かを判定する(ステップS925)。
新規注文の発注レコードであると判定した場合(ステップS925でYES)、CPU12は、取得した発注レコードの証拠金グループフィールドを参照して、証拠金グループが設定されていないか否かを判定する(ステップS926)。たとえば、証拠金グループフィールドに「−」が記録されている場合、CPU12は証拠金グループが設定されていないと判定する。
証拠金グループが設定されていないと判定した場合(ステップS926でYES)、CPU12は、変数「合計発注証拠金」に、発注証拠金フィールドに記録された発注証拠金を加算する(ステップS927)。
証拠金グループが設定されていると判定した場合(ステップS926でNO)、CPU12は、変数Jを証拠金グループフィールドに記録された証拠金グループに設定する(ステップS931)。CPU12は、J番目のグループの最大証拠金を抽出する変数G(J)が、ステップS924で取得したレコードの発注証拠金フィールドに記録された発注証拠金以下であるか否かを判定する(ステップS932)。G(J)が発注証拠金未満であると判定した場合(ステップS932でYES)、CPU12は変数G(J)に発注証拠金を代入する(ステップS933)。
新規注文の発注レコードでないと判定した場合(ステップS925でNO)、ステップS927の終了後、G(J)が発注証拠金以上であると判定した場合(ステップS932でNO)およびステップS933の終了後、CPU12は発注DB53のすべてのレコードの処理が終了したか否かを判定する(ステップS934)。
終了していないと判定した場合(ステップS934でNO)、CPU12はカウンタIに1を加算する(ステップS935)。CPU12は、ステップS924に戻る。以上に説明したように、ステップS924からステップS933までの処理を繰り返すことにより、変数G(J)には、J番目のグループの新規注文の発注証拠金の最大値が設定される。
発注DB53のすべてのレコードの処理が終了したと判定した場合(ステップS934でYES)、CPU12はカウンタKを1に設定する(ステップS941)。
CPU12は、変数「合計発注証拠金」にK番目のグループの新規注文の発注証拠金の最大値G(K)を加算する(ステップS942)。CPU12は、すべての証拠金グループの処理を終了したか否かを判定する(ステップS943)。
終了していないと判定した場合(ステップS943でNO)、CPU12はカウンタKに1を加算する(ステップS944)。CPU12は、ステップS942に戻る。終了したと判定した場合(ステップS943でYES)、CPU12は処理を終了する。
図20は、ポジション取得サブルーチンの処理の流れを示すフローチャートである。ポジション取得サブルーチンは、ステップS521で受け付けた注文に基づいて新規ポジションを取得する処理を行うサブルーチンである。図20を使用して、ポジション取得サブルーチンの処理の流れを説明する。なお、本実施の形態においては、ステップS521で取得した新規注文の執行条件は、デルタ注文、指値注文または成行注文のいずれかである。
CPU12は、ステップS521で取得した新規注文の執行条件がデルタ注文であるか否かを判定する(ステップS641)。デルタ注文であると判定した場合(ステップS641でYES)、CPU12は、デルタ判定のサブルーチンを起動する(ステップS642)。デルタ判定のサブルーチンは、市場価格が所定の変動幅を超えて上昇トレンドまたは下降トレンドに移行したか否かを判定するサブルーチンである。デルタ判定のサブルーチンの処理の流れは後述する。
CPU12は、デルタ判定のサブルーチンの処理結果がONであるか否かを判定する(ステップS643)。ONでないと判定した場合(ステップS643でNO)、CPU12は、デルタ注文の処理を終了するか否かを判定する(ステップS644)。たとえば、発注DB53の期限フィールドに記録された期限を過ぎた場合、投資家クライアント31より注文中止の指示を取得した場合、投資家の取引口座が証拠金の残高不足によりロスカットされた場合等に、CPU12は、デルタ注文の処理を終了すると判定する。
終了しないと判定した場合(ステップS644でNO)、CPU12は、ステップS642に戻る。
デルタ注文でないと判定した場合(ステップS641でNO)、CPU12は、ステップS521で取得した新規注文の執行条件が指値注文であるか否かを判定する(ステップS651)。指値注文ではないと判定した場合(ステップS651でNO)およびデルタ判定のサブルーチンの処理結果がONであると判定した場合(ステップS643でYES)、CPU12は、市場価格で約定を行う成行約定の処理を行う(ステップS645)。
指値注文であると判定した場合(ステップS651でYES)、CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS652)。CPU12は、ネットワークを介して金融機関サーバ32から直接市場価格を取得しても良い。
CPU12は、発注レコードの注文価格フィールドに記録された注文価格と市場価格とを比較して、指値注文の成立可否を判定する(ステップS653)。具体的には、買い注文である場合には、CPU12は、注文価格よりも市場価格の方が安い場合に指値注文が成立可能であると判定する。売り注文である場合には、CPU12は、注文価格よりも市場価格の方が高い場合に指値注文が成立可能であると判定する。
成立可でないと判定した場合(ステップS653でNO)、CPU12は、指値注文の処理を終了するか否かを判定する(ステップS654)。たとえば、発注DB53の期限フィールドに記録された期限を過ぎた場合、投資家クライアント31より注文中止の指示を取得した場合、投資家の取引口座が証拠金の残高不足によりロスカットされた場合等に、CPU12は、指値注文の処理を終了すると判定する。指値注文の処理を終了しないと判定した場合(ステップS654でNO)、CPU12はステップS652に戻る。
指値注文が成立可であると判定した場合(ステップS653でYES)、CPU12は、指値注文による約定の処理を行う(ステップS655)。
ステップS645またはステップS655の終了後、CPU12は、約定した新規注文に発注レコードの証拠金グループフィールドを参照して、証拠金グループが記録されているか否かを判定する(ステップS951)。証拠金グループが記録されていると判定した場合(ステップS951でYES)、CPU12は同一証拠金グループに属する他の発注をキャンセルする(ステップS952)。
具体的には、CPU12は証拠金グループフィールドをキーとして発注DB53を検索し、同一証拠金グループのレコードを抽出して、発注DB53から削除する。CPU12は、証拠金グループフィールドをキーとして受注DB52を検索し、同一証拠金グループのレコードを抽出して、注文状況フィールドに「取消済」と記録する。さらにCPU12は、「取消済」を記録した新規注文に対応する決済注文の注文状況フィールドにも「取消済」と記録する。
証拠金グループが記録されていないと判定した場合(ステップS951でNO)およびステップS952の終了後、CPU12はポジションDB54に約定した注文の注文番号、通貨ペア、取引種別、約定価格、取引金額、約定日時および決済注文の番号を記録する(ステップS656)。なお、CPU12は、約定した注文の番号をキーとして受注DB52の親注文番号フィールドを検索することにより決済注文の注文番号および利益確定注文、ストップ注文の別を抽出する。
デルタ注文の処理を終了すると判定した場合(ステップS644でYES)、指値注文の処理を終了すると判定した場合(ステップS654でYES)、およびステップS656の終了後、CPU12は処理を終了する。
図21は、デルタ判定のサブルーチンの処理の流れを示すフローチャートである。デルタ判定のサブルーチンは、市場価格が所定の変動幅を超えて上昇トレンドまたは下降トレンドに移行したか否かを判定するサブルーチンである。図21を使用して、デルタ判定のサブルーチンの処理の流れを説明する。
CPU12は、注文対象の通貨ペアをキーとして、HLDB43より最新のHLレコードを取得する(ステップS671)。CPU12は、注文対象の通貨ペアをキーとして、レートDB41よりレートレコードを取得する(ステップS672)。
CPU12は、ステップS671で取得したHLレコードとステップS672で取得したレートレコードのタイムスタンプフィールドに記録されたタイムスタンプ同士が一致しているか否かを判定する(ステップS673)。一致していると判定した場合(ステップS673でYES)、CPU12はHLDB43より一つ前のHLレコードを取得する(ステップS674)。
タイムスタンプが一致していないと判定した場合(ステップS673でNO)およびステップS674の終了後、CPU12は、処理中の注文が買い注文であるか否かを判定する(ステップS675)。
買い注文であると判定した場合(ステップS675でYES)、CPU12は、式(4)に基づき市場価格と過去のトレンドと注文時の条件との関係を判定する(ステップS676)。
市場価格−L≧ΔP×ΔT ‥‥‥(4)
市場価格は、ステップS672で取得したレートレコードの買レートフィールドに記録された価格である。
ΔPは、デルタ注文のパラメータである単位判定価格幅ΔPである。
ΔTは、デルタ注文のパラメータである判定時間幅ΔTである。
Lは、ステップS671で取得したHLレコードの、注文条件の判定時間幅ΔTに対応するLフィールドに記録された価格であり、判定時間幅ΔTの期間内の最低価格を示す。
式(4)が真であると判定した場合(ステップS676でYES)、CPU12は、処理結果がONであると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS677)。CPU12は、その後処理を終了する。
式(4)が偽であると判定した場合(ステップS676でNO)、CPU12は、処理結果が「OFF」であると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS678)。CPU12は、その後処理を終了する。
買い注文でないと判定した場合(ステップS675でNO)、CPU12は、式(5)に基づき市場価格と過去のトレンドと注文時の条件との関係を判定する(ステップS681)。
H−市場価格≧ΔP×ΔT ‥‥‥(5)
市場価格は、ステップS672で取得したレートレコードの売レートフィールドに記録された価格である。
ΔPは、デルタ注文のパラメータである単位判定価格幅ΔPである。
ΔTは、デルタ注文のパラメータである判定時間幅ΔTである。
Hは、ステップS671で取得したHLレコードの、注文条件の判定時間幅ΔTに対応するHフィールドに記録された価格であり、判定時間幅ΔTの期間内の最高価格を示す。
式(5)が真であると判定した場合(ステップS681でYES)、CPU12は、処理結果がONであると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS682)。CPU12は、その後処理を終了する。
式(5)が偽であると判定した場合(ステップS681でNO)、CPU12は、処理結果が「OFF」であると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS683)。CPU12は、その後処理を終了する。
図22は、ポジション決済サブルーチンの処理の流れを示すフローチャートである。ポジション決済サブルーチンは、保有するポジションを決済する処理を行うサブルーチンである。図22を使用して、ポジション決済サブルーチンの処理の流れを説明する。なお、本実施の形態においては、ステップS521で取得した決済利益確定注文の執行条件は、相対トリガトレール注文または指値注文であり、決済ストップ注文の執行条件はトレール注文である。
CPU12は、ステップS521で取得した新規注文の決済利益確定条件が相対トリガトレール注文であるか否かを判定する(ステップS701)。相対トリガトレール注文であると判定した場合(ステップS701でYES)、CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS702)。
CPU12は、利益確定注文のトレールを開始する利益確定トリガがONであるか否かを判定する(ステップS703)。具体的には、買い注文である場合にはステップS702で取得した市場価格が式(6)および式(7)を満たす場合に、CPU12は利益確定トリガがONであると判定する。
市場価格>トリガ価格Trig‥‥‥ (6)
トリガ価格Trig=新規注文時の約定価格+ΔTg ‥‥‥ (7)
ΔTgは、相対トリガトレール注文のパラメータであるトリガ幅ΔTgである。
同様に、売り注文である場合にはステップS702で取得した市場価格が式(8)および式(9)を満たす場合に、CPU12は利益確定トリガがONであると判定する。
市場価格<トリガ価格Trig ‥‥‥ (8)
トリガ価格Trig=新規注文時の約定価格−ΔTg ‥‥‥ (9)
利益確定トリガがONであると判定した場合(ステップS703でYES)、CPU12は、相対トリガトレール判定のサブルーチンを起動する(ステップS704)。相対トリガトレール判定のサブルーチンは、市場価格に応じて逆指値をトレールしながら相対トリガトレールの条件が満たされたことを判定するサブルーチンである。相対トリガトレール判定のサブルーチンの処理の流れは後述する。CPU12は、相対トリガトレール判定のサブルーチンで定まる条件に基づいて、逆指値約定を行う(ステップS705)。
利益確定トリガがONでないと判定した場合(ステップS703でNO)、CPU12は、ストップトリガ判定のサブルーチンを起動する(ステップS711)。ストップトリガ判定のサブルーチンは、決済ストップ注文により損切りを行うか否かを判定するサブルーチンである。ストップトリガ判定のサブルーチンの処理の流れは後述する。
CPU12は、ストップトリガ判定のサブルーチンの処理結果が「ストップ」であるか否かを判定する(ステップS712)。「ストップ」でないと判定した場合(ステップS712でNO)、CPU12はステップS702に戻る。「ストップ」であると判定した場合(ステップS712でYES)、CPU12は、市場価格で約定を行う成行約定の処理を行う(ステップS713)。
相対トリガトレール注文でないと判定した場合(ステップS701でNO)、CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS721)。CPU12は、決済利益確定注文の指値注文の成立可否を判定する(ステップS722)。成立可であると判定した場合(ステップS722でYES)、CPU12は、決済利益確定注文の執行条件に基づいて、指値約定を行う(ステップS723)。
指値注文が成立可でないと判定した場合(ステップS722でNO)、CPU12は、ストップトリガ判定のサブルーチンを起動する(ステップS724)。ストップトリガ判定のサブルーチンは、ステップS711で起動したサブルーチンと同一のサブルーチンである。
CPU12は、ストップトリガ判定のサブルーチンの処理結果が「ストップ」であるか否かを判定する(ステップS725)。「ストップ」でないと判定した場合(ステップS725でNO)、CPU12はステップS721に戻る。「ストップ」であると判定した場合(ステップS725でYES)、CPU12は、市場価格で約定を行う成行約定の処理を行う(ステップS726)。
ステップS705、ステップS713、ステップS723またはステップS726の終了後、CPU12は、ポジションDB54から決済した新規注文に関するレコードを削除する(ステップS731)。その後、CPU12は処理を終了する。
図23は、ストップトリガ判定サブルーチンの処理の流れを示すフローチャートである。ストップトリガ判定のサブルーチンは、決済ストップ注文により損切りを行うか否かを判定するサブルーチンである。図23を使用して、ストップトリガ判定のサブルーチンの処理の流れを説明する。
CPU12は、判定する対象の注文が売り注文であるか否かを判定する(ステップS752)。売り注文であると判定した場合(ステップS752でYES)、CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS753)。
CPU12は、市場価格がストップ注文のトリガ値以下であるか否かを判定する(ステップS754)。ストップ注文のトリガ値以下でないと判定した場合(ステップS754でNO)、CPU12は、市場価格とトリガ値との関係が式(10)を満たすか否かを判定する(ステップS755)。
市場価格−ΔS>トリガ値 ‥‥‥ (10)
ΔSは、ストップ注文のトレール幅ΔSである。
式(10)が真であると判定した場合(ステップS755でYES)、CPU12は、トリガ値を式(10)の左辺の値に変更する(ステップS756)。ステップS756の処理により、CPU12は市場価格の上昇に追従して売り注文のストップ注文価格を変更、すなわちトレールする。
式(10)が真でないと判定した場合(ステップS755でNO)およびステップS756の終了後、CPU12は、処理結果が「継続」であると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS757)。CPU12は、その後処理を終了する。
売り注文でないと判定した場合(ステップS752でNO)、CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS761)。
CPU12は、市場価格がストップ注文のトリガ値以上であるか否かを判定する(ステップS762)。ストップ注文のトリガ値以上でないと判定した場合(ステップS762でNO)、CPU12は、市場価格とトリガ値との関係が式(11)を満たすか否かを判定する(ステップS763)。
市場価格+ΔS>トリガ値 ‥‥‥ (11)
ΔSは、ストップ注文のトレール幅ΔSである。
式(11)が真であると判定した場合(ステップS763でYES)、CPU12は、トリガ値を式(10)の左辺の値に変更する(ステップS764)。ステップS764の処理により、CPU12は市場価格の下落に追従して買い注文のストップ注文価格を変更、すなわちトレールする。
式(11)が真でないと判定した場合(ステップS763でNO)およびステップS764の終了後、CPU12は、処理結果が「継続」であると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS765)。CPU12は、その後処理を終了する。
売り注文で市場価格がストップ注文のトリガ値以下であると判定した場合(ステップS754でYES)、および、買い注文で市場価格がストップ注文のトリガ値以上であると判定した場合(ステップS762でYES)、CPU12は、処理結果が「ストップ」であると判定して、主記憶装置13または補助記憶装置14に記憶する(ステップS771)。CPU12は、その後処理を終了する。
図24は、相対トリガトレール判定サブルーチンの処理の流れを示すフローチャートである。相対トリガトレール判定のサブルーチンは、市場価格に応じて逆指値をトレールしながら相対トリガトレールの条件が満たされたことを判定するサブルーチンである。図24を使用して、相対トリガトレール判定のサブルーチンの処理の流れを説明する。
CPU12は、判定する対象の注文が売り注文であるか否かを判定する(ステップS791)。売り注文であると判定した場合(ステップS791でYES)、CPU12は、注文価格を市場価格から利益確定注文のトレール幅ΔRを減算した値に設定する(ステップS792)。ここで、注文価格は逆指値注文価格である。
CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS793)。CPU12は、市場価格から利益確定注文のトレール幅ΔRを減算した値が注文価格以上であるか否かを判定する(ステップS794)。以上ではないと判定した場合(ステップS794でNO)、CPU12はステップS792に戻る。
以上であると判定した場合(ステップS794でYES)、CPU12は市場価格が注文価格以下であるか否かを判定する(ステップS795)。以下ではないと判定した場合(ステップS795でNO)、CPU12はステップS793に戻る。
売り注文でないと判定した場合(ステップS791でNO)、CPU12は、注文価格を市場価格に利益確定注文のトレール幅ΔRを加算した値に設定する(ステップS796)。ここで、注文価格は逆指値注文価格である。
CPU12は、レートDB41より外国為替の市場価格を取得する(ステップS797)。CPU12は、市場価格に利益確定注文のトレール幅ΔRを加算した値が注文価格以下であるか否かを判定する(ステップS798)。以下ではないと判定した場合(ステップS798でNO)、CPU12はステップS796に戻る。
以下であると判定した場合(ステップS798でYES)、CPU12は市場価格が注文価格以上であるか否かを判定する(ステップS799)。以上ではないと判定した場合(ステップS799でNO)、CPU12はステップS797に戻る。
売り注文で市場価格が注文価格以下であると判定した場合(ステップS795でYES)、および、買い注文で市場価格が注文価格以上であると判定した場合(ステップS799でYES)、CPU12は処理を終了する。
なお、CPU12は、新規注文のみを受け付けても良い。たとえば、長期保有を望む投資家、および市場価格をリアルタイムに確認して成行注文で決済を行いたい投資家の場合には、ポジション取得のみを本実施の形態の取引装置に任せることができる。同様に、CPU12は既に保有しているポジションの決済注文のみを受け付けても良い。
本実施の形態によると、複数の新規注文が発注証拠金を共有する証拠金グループを利用することにより、証拠金の運用効率を高めることが可能な取引装置等を提供することができる。
本実施の形態によると、図10を使用して説明したデルタ注文による新規注文を行なうことによりトレンド相場の初期に自動的に有利なポジションを取る取引装置を実現することができる。
本実施の形態によると、図11を使用して説明した相対トリガトレール注文による決済注文を行い、トレンド相場のピークを検出した直後の有利な条件で自動的にポジションを決済する取引装置を実現することができる。
本実施の形態によると、デルタ注文の他に、従来から使用されている指値注文または成行き注文による新規注文も処理することが可能な取引装置を実現することができる。また、相対トリガトレール注文の他に指値注文による決済利益確定注文も処理することが可能な取引装置を実現することが可能な取引装置を実現することができる。新規注文の執行条件と決済注文との執行条件とを、任意に組み合わせて実施することが可能な取引装置を実現することができる。
[実施の形態2]
本実施の形態は、同一証拠金グループに属する一つの新規注文が約定した場合に、他の注文が約定することを防止する取引装置に関する。実施の形態1と共通する部分については、説明を省略する。
図25は、実施の形態2の発注DB53のレコードレイアウトを示す説明図である。本実施の形態の発注DB53は、注文番号フィールド、通貨ペアフィールド、注文タイプフィールド、取引種別フィールド、執行条件フィールド、注文価格フィールド、トリガ値フィールド、トリガ幅フィールド、トレール幅フィールド、ΔPフィールド、ΔTフィールド、取引金額フィールド、期限フィールド、発注証拠金フィールド、親注文番号フィールド、証拠金グループフィールドおよびフラグフィールドを有する。フラグフィールドを除く各フィールドに記録されているデータは、実施の形態1と同様であるので説明を省略する。
フラグフィールドには、グループ内に約定が近い新規注文があることを示すフラグが記録されている。すなわち、図25においては証拠金グループ1に、約定が近い新規注文が含まれているため、注文番号101および注文番号104のレコードのフラグフィールドに「ON」と記録されている。それ以外のレコードのフラグフィールドには「−」が記録されている。
CPU12は、約定が可能であることを判定した後に、フラグフィールドを参照し、「ON」と記録されている場合には約定を行わない。一方、「−」と記録されている場合には、同一証拠金グループの他の新規注文のレコードのフラグフィールドに「ON」を記録した上で、約定を行う。以上により、並行して動作する複数のプログラムに基づいて、同一証拠金グループに属する複数の新規注文が約定することを防止する取引装置を提供することが可能である。
図26は、実施の形態2のポジション取得サブルーチンの処理の流れを示すフローチャートである。図26に示すサブルーチンは、図20を使用して説明したポジション取得のサブルーチンの代わりに使用するサブルーチンである。
ステップS641からステップS644までおよびステップS651からステップS654までは、図20と同一であるので説明を省略する。指値注文ではないと判定した場合(ステップS651でNO)およびデルタ判定のサブルーチンの処理結果がONであると判定した場合(ステップS643でYES)、CPU12は、処理中の注文に関する発注レコードのフラグフィールドを参照して、「ON」が記録されているか否かを判定する(ステップS961)。
「ON」が記録されていると判定した場合(ステップS961でYES)、CPU12は処理を終了する。「ON」が記録されていないと判定した場合(ステップS961でNO)、CPU12は、証拠金フィールドをキーとして発注DB53を検索して、同一証拠金グループに属する新規注文を抽出し、フラグフィールドを「ON」を記録する(ステップS962)。CPU12は、市場価格で約定を行う成行約定の処理を行う(ステップS645)。
指値注文が成立可であると判定した場合(ステップS653でYES)、CPU12は、処理中の注文に関する発注レコードのフラグフィールドを参照して、「ON」が記録されているか否かを判定する(ステップS966)。
「ON」が記録されていると判定した場合(ステップS966でYES)、CPU12は処理を終了する。「ON」が記録されていないと判定した場合(ステップS966でNO)、CPU12は、証拠金フィールドをキーとして発注DB53を検索して、同一証拠金グループに属する新規注文を抽出し、フラグフィールドを「ON」を記録する(ステップS967)。CPU12は、指値注文による約定の処理を行う(ステップS655)。
ステップS644、ステップS645、ステップS654およびステップS655の終了後の処理は、図20と同一であるので説明を省略する。
本実施の形態によると、並行して動作する複数のプログラムに基づいて、同一証拠金グループに属する複数の新規注文が約定することを防止する取引装置を提供することが可能である。
ステップS961またはステップS966でフラグフィールドに「ON」が記録されていると判定した場合、CPU12は、約定直前の他の新規注文を処理中のプログラムとの間で優先順位を調整しても良い。具体的には、注文番号の大小、投資家クライアント31から取得した所定の優先順位等に基づき、CPU12は、優先順位の低い新規注文の約定を停止し、優先順位の高い新規注文を約定させても良い。
[実施の形態3]
本実施の形態は、約定の直前に証拠金の確認を行う取引装置に関する。実施の形態1と共通する部分については、説明を省略する。
図27は、実施の形態3のポジション取得サブルーチンの処理の流れを示すフローチャートである。図27に示すサブルーチンは、図20を使用して説明したポジション取得のサブルーチンの代わりに使用するサブルーチンである。
ステップS641からステップS644まで、およびステップS651からステップS654までは、図20と同一であるので説明を省略する。指値注文ではないと判定した場合(ステップS651でNO)およびデルタ判定のサブルーチンの処理結果がONであると判定した場合(ステップS643でYES)、CPU12は、図17を使用して説明した証拠金確認のサブルーチンを起動する(ステップS971)。
CPU12は、証拠金確認サブルーチンの処理結果に基づき証拠金が足りるか否かを判定する(ステップS972)。証拠金が足りると判定した場合(ステップS972でYES)、CPU12は、市場価格で約定を行う成行約定の処理を行う(ステップS645)。証拠金が足りないと判定した場合(ステップS972でNO)、CPU12は処理を終了する。
指値注文が成立可であると判定した場合(ステップS653でYES)、CPU12は、図17を使用して説明した証拠金確認のサブルーチンを起動する(ステップS976)。
CPU12は、証拠金確認サブルーチンの処理結果に基づき証拠金が足りるか否かを判定する(ステップS977)。証拠金が足りると判定した場合(ステップS977でYES)、CPU12は、指値注文による約定の処理を行う(ステップS655)。証拠金が足りないと判定した場合(ステップS977でNO)、CPU12は処理を終了する。
ステップS644、ステップS645、ステップS654およびステップS655の終了後の処理は、図20と同一であるので説明を省略する。
本実施の形態によると、約定直前に証拠金を確認することにより、約定した直後にロスカットが生じて投資家が損失をうけることを防止する取引装置を提供することができる。
[実施の形態4]
図28は、実施の形態4の取引装置の動作を示す機能ブロック図である。本実施の形態の取引装置の一例である投資家サーバ11は、CPU12による制御に基づいて以下のように動作する。
投資家サーバ11は、グループ情報取得部91と、発注証拠金算出部92と、発注証拠金選択部93と、証拠金判定部94とを備える。グループ情報取得部91は、担保にした有効証拠金以上の金額で外貨を取引可能な外国為替証拠金取引の複数の新規注文を含むグループ中の、それぞれの新規注文に関する約定見込価格と取引金額とを取得する。発注証拠金選択部92は、グループ情報取得部91が取得した約定見込価格と取引金額とに基づいて新規注文のそれぞれに関する発注証拠金を算出する。発注証拠金選択部93は、発注証拠金算出部が算出した発注証拠金のうち、最も高額の発注証拠金を選択する。証拠金判定部94は、発注証拠金選択部93が選択した発注証拠金と、有効証拠金とに基づいて、グループに含まれる新規注文に対する有効証拠金の過不足を判定する。
[実施の形態5]
実施の形態5は、汎用のコンピュータとプログラム71とを組み合わせて動作させることにより、本実施の形態の取引装置を実現する形態に関する。図29は、実施の形態5の取引システム10の構成を示す説明図である。図29を使用して、本実施の形態の構成を説明する。なお、実施の形態1と共通する部分の説明は省略する。
本実施の形態の取引システム10は、取引システム10は、投資家マシン74、レート記録マシン75、投資家クライアント31、金融機関サーバ32およびこれらを相互に接続するネットワークを含む。
金融商品取引業者が管理および運用を行う投資家マシン74およびレート記録マシン75は、汎用のパーソナルコンピュータ、大型計算機等の情報機器等である。また、本実施の形態の投資家マシン74およびレート記録マシン75は、大型計算機上で動作する仮想マシンでも良い。
投資家マシン74は、CPU12、主記憶装置13、補助記憶装置14、通信部15、読取部16およびバスを備える。レート記録マシン75は、レート記録CPU22、主記憶装置23、補助記憶装置24、通信部25およびバスを備える。
プログラム71は、可搬型記録媒体72に記録されている。CPU12は、読取部16を介してプログラム71を読み込み、補助記憶装置14に保存する。またCPU12は、投資家マシン74内に実装されたフラッシュメモリ等の半導体メモリ73に記憶されたプログラム71を読出しても良い。さらに、CPU12は、通信部15およびネットワークを介して接続される図示しない他のサーバコンピュータからプログラム71をダウンロードして補助記憶装置14に保存しても良い。
プログラム71のうち、投資家マシン74が実行する部分は、投資家マシン74の制御プログラムとしてインストールされ、主記憶装置13にロードして実行される。これにより、投資家マシン74は上述した投資家サーバ11として機能する。
また、プログラム71のうちレート記録マシン75が実行する部分はネットワークを介してレート記録マシン75の制御プログラムとしてインストールされ、主記憶装置23にロードして実行される。これにより、レート記録マシン75は上述したレート記録サーバ21として機能する。
各実施例で記載されている技術的特徴(構成要件)はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものでは無いと考えられるべきである。本発明の範囲は、上記した意味では無く、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。