ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

東証が出している、ジェイコムショックの不具合の内容を1行1行解説してみる

2005-12-12 17:51:17 | Weblog

 ジェイコムショックの件、スラッシュドットで、なんか、みんな解説してるようですが、すぱっと説明してないので、よくわかんないですよね。つーか、誤解もあるし。。

 っていうので、ちょっと、書いておきますね。
(ほんとうは、これで問題になりそうなケースと対策を書きたかったけど、そこまで書く余裕がなくなったので、今回は、説明まで)

 で、問題の
 スラッシュドットの記事は、こちら http://slashdot.jp/articles/05/12/11/1448250.shtml
 東証の説明はこちら http://www.tse.or.jp/news/200512/051211_a.html




■■ 前提知識

(1)株の売買には、値幅制限(ストップ安、ストップ高)というのがあります。

 これは、前日の終値に対して、一定の幅でつきます。
 したがって、今日上場する場合、値幅制限は。。。??
 つけられないです。今日上場して、値段がつくのですから、前日の終値なんてないです。

 そのため、新規上場の値幅制限は、値段がついた時点(初値といいます)で、きまります。

 ということはですね、値段がつくまでは、いくらでも、受注は受け付けちゃうわけですよ。
 値幅制限が、上記の理由でない(決まっていない)わけですから。。

 これは<<バグではなくて、仕様です>>




(2)売りと買いがある値段で一致すると、そこで、売買が成立します。これを約定(やくじょう)といいます。

 株には、決まった金額で売りたい、買いたいという指値注文と、とにかくいくらでもいいから、売りたいのよ、買いたいのよという、成行注文があります。

 成行注文のほうが、優先されます。

 で、指値注文の場合(商法だったとおもったけど)の規定により、お客さんが有利になるようには、その値段で、売ったり、買ったりしていいんです。

 つまり、
 1円でものを売るより、100円で売ったほうがいいですよね。
 同様に、1円で売るっていうより、57万2千円で売れたほうが、有利ですよね。
 571,999円も、有利です。
 なので、1円で売れ!という注文が来ても、57万2千円で売っても、かまわないわけです。

 これも、<<バグではなくて、仕様です>>




(3)売りと買いが一致しない場合、どっちかが、特に多いとき、特別気配というのをだします。
 買いが多いときは、特別買気配、売りが多いときは、特別売気配というのをだして、証券取引所が、この値段で、どよ!というのをだします。

 で、問題は、
 売りが 57万2千円 で 61万株、
 買いが57万2千円 で 100株・・・1
 買いが57万2千円 で 300株・・・2
 買いが57万2千円 で 400株・・・3
と3件きた状態のとき、57万2千円 で 61万株の取り消しを、1のあとにしたら、どうなるかという問題です。

 このとき、
 1は、成立するのはいいですよね。

 2のところで成立するのか?

 それとも、この人の注文は、57万2千円で61万株なんだから、それが全部おわったときまで、キャンセルできないのか?という問題です。

 正解は、1のあと、にキャンセルが、きかないといけません。 

<<部分約定中でも、取り消しがきたら、それ以降のものは取り消しが利くのが、仕様です>>




■■ 以下の前提で、東証の説明をする

で、東証の説明をみてみましょう。
さっきのページの「現時点で判明している処理状況」からの引用です


 ジェイコム株式について、特別買気配67万2千円が表示されている状態で午前9時27分に1円の売注文が発注され、初値67万2千円が決定いたしましたが、これにより呼値の制限値幅(上下10万円)が設定されました。


まず、1円61万株の注文を入れたときは、特別買気配67万円がついている
 =初値がついていない

 前提(1)により、初値がついていないときは、値幅制限がないので、この時点で、いくらでもOKなのは、仕様です。だって、値幅制限の金額が決められないもん。
 なので、1円で受け付けるのに、問題はありません(61万株も、受け付けていいの?というのは、議論の対象になるが。。。)




 で、ここで、1円で61万株の買い注文がでると、いくら、買い気配がおおいったって、実際の株数より多くは、だれも発注しませんよ。馬鹿でない限り。なので、たぶん、数千株でしょう。

 前提(2)により、1円で売る!といった人は、57万2千円だろうが、67万2千円だろうが、売り手に有利なので、売れちゃいます。

 ということで、ここで、売買成立です。

 結果、特別買気配値67万2千円で約定=ここで、初値ができます。

 初値ができると、どうなるかというと、値幅制限ができます。(前提1)
 この金額だと、67万2千円のストップ安は57万2千円となるので、これ以下では売れません
(受け付けません)。。が、ここで、さっきの前提2により

 お客さんに有利なら売っていい=
 1円で売るより、ストップ安57万2千円で売ったほうが有利
 =57万2千円で売っていい=57万2千円の注文となる。

 結果として、前提2により、この1円の注文は、57万2千円の注文に化けます。
 これを、「みなし処理」といいます。

 したがって、今の状態は、
 「みなし処理」により、
 1円61万株の注文が
 57万2千円で、61万株ー(67万2千円で約定した数)の注文になります。
 これが

この1円の売注文が大量で初値決定以降もなお残っていたため、みなし処理により呼値の制限値幅の下限である57万2千円の売注文として登録され、

の意味です。




 ここで、YAHOO掲示板などで、みんな「かえー!!」という指示が出たり??
 大手証券会社が、定規を使って、買い捲ったため

 この後、67万2千円から順次買注文を消化する形で、約定を繰り返しつつ、値段が下落していくこととなりました。


なぜなら、たとえ、60万円で買い注文をいれても、

 60万円で、かえるより、57万2千円でかえたほうが有利ですよね。
 で、57万2千円で、売ってくれる人が、上記のようにいるわけです。
 とすると、57万2千円になっちゃう。。。というわけでなく、

 この場合、前提(3)により、実際には、証券取引所は、特別売気配というのをだして、急激にではなく、「この値段でどよ!」、「えー、じゃあ、この値段でどよ!」と、どんどん値段を下げて、約定させていきます。これが、「約定を繰り返しつつ、値段が下落していくこととなりました」の意味です。

 成行買いや成り行き売りは、その値段で約定します。





このような状況下でみずほ証券による注文の取消しが複数回にわたって行われましたが、当該注文が発注された時点で板状態が対当中(約定処理中)であった場合に、


これが、前提3の状態です。

 売りが 57万2千円 で 60万株(かりに)・・・みずほ証券の「みなし処理」
 買いが57万2千円 で 100株・・・定規を使って証券会社Aが買いを入れた
 買いが57万2千円 で 300株・・・デイトレーダーがYAHOOをみて
 買いが57万2千円 で 400株・・・とにかく、買ってみようと思った人
なんていうかんじで、買いが入っているとき、「定規を使って証券会社Aが買いを入れた」あとに、みずほ証券から、取り消しが入った。。これが「発注された時点で板状態が対当中(約定処理中)」です。
 
 この場合、それ以降、のこりの、60万ー100=59万9900株の売り注文は、中止しないといけません。
 そうして、YAHOOのデイトレクンと、とにかく400株さんは、ともに、買えないとならなきゃいけないのに。。(これが、仕様です)


対象注文が取消されないという不具合が発生いたしました。


のこりの、60万ー100=59万9900株の売り注文は、中止されない。
というのは、バグです。




 「板状態が対当中」とは、売り注文と、買い注文が入っている状態です。

  ここで、みずほの売りは、取り消せないので入ったままです。
 なので、買いが、途切れない限り、この注文は、「板状態が対当中」=取り消せない状態になってます。

 でも、証券会社Aさんは、定規を使ってやってたら、とめどなく買いが入ってしまいます。
 つまり、「板状態が対当中」は、売りがなくなるまで、続く。。。ってことになります。




 ここに書かれていることは、こういうことです。

 で、こういうケースは、2度とおきないのかというと、その「今後の対応」に書かれているように
・当取引所に直接新規上場する銘柄の場合(=値幅制限がきめられない)で、
・かつ、今回のケースのように、特別買気配が表示中に(これは、新規上場では良くある)
・気配の差引数量を超え、初値決定後も売注文が残るほどの大量の注文が
・みなし処理の対象となるような値段で発注されたような場合に発生する

 でないと起こらない=逆に言うと、こういうケースなら起こるというのなら。。。
 ありえない話ではないんだよねー

 どういうケースかっていうのは、長くなりすぎたので、また今度かくね。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RDBで、処理スピードが遅く/早くなりそうな話(噂話も?)を、まとめてみる。

2005-12-12 12:24:29 | Weblog

 データベースの正規化の話で、以前書きましたけど、正規化する、しない以前に、まずは、どういう場合に処理スピードが早くなったり、遅くなったりするのかの要因について、まとめてみようと思います(ただし、正規化に関係しそうなことのみ)

 そして、そのあと(今日のブログではなく、気が向いたときに)で、それらの要因が、正規化と、どう関係しているのかを考えていきます。




<<DBで処理スピードがかかわってくる要因>>

 いちおう、知っている話、噂話をまとめてみました。
 まちがいもあるかも。。

■■(1)インデックスをつけると、検索は早くなる(更新は遅くなるときもある)
 インデックスをつけると、検索は早くなります。もし、早くならなかったら、インデックスをつける人はいないでしょう。
 問題は、更新のときです。
 インデックスを更新する分、更新スピードは遅くなるはずです(無視できるほどかもしれないけど、理論上)。
 とくに、インデックスの編成法によっては、すなわち、インデックスが、B木系(B木,B+木、B*木など)の場合は、場所によって、いろいろと遅くなるかもしれません。

 それを防ぐには、インデックスをハッシュにするという手は、あることはあります。
 ただし、ハッシュの場合、こんどは、キレイにデータが散ってくれないと、あるキーでは、遅くなるという結果になります(シノニムが多数発生するという状態になると、こうなる)。キレイにデータを散らせるには、インデックスのキーに偏りが無いことが必要となり、キーのある部分が、意味のあるコードを表すのはまずいということになります(キーのうち、サイズを示すところがあると、その部分はS,M,L以外は値がないといったような、偏りが出てしまう)

■■(2)SQL文のWhere句が長いと、処理スピードは遅くなる
 そりゃ、条件ふえるから、条件すくないよりも、理論上長いよね。
 ただ、実際どのくらい長くなるかは、そのDBMSやそのたもろもろ諸条件による。
 これは、検索、更新どちらにもいえます。

■■(3)テーブルJOINが多いと、遅くなる
 最近、そんなに遅くないやつもあるし、おそいやつもあるし。。いろいろ。

■■(4)中間テーブルを使われてしまうと遅くなる
 SQL文によっては、中間的に、テーブルをつくることがある。
 たとえば、having句をつかうようなものは、一回、どこかにためているからこそ、
 そのhaving句の検索条件で検索できる。
  で、この中間テーブルは(having句と書いたことからもわかるように)GROUP BY
 とかすると、作るらしい(これ以外のときでも、そのDBMSが、中間テーブルを作った
 ほうがいいと判断したときにつくるらしい)
 これを作られると、そりゃー、メモリ領域を確保するわけですから、おそくなりますわな。

 で、インデックスを作って、インデックスだけで操作できれば、このテーブルを
 作らないらしい。

 佐藤氏の流派で、GROUP BY禁止なのは、このためと言われている(と確か思った)。

■■(5)VIEWとスピード
 検索のときは、単純に、selectでJoinしてから検索するよりか、はやくなることがおおい(作り方にも、もちろんよるけどね)
 更新のときは。。。どーなんでしょう。

 佐藤氏の流派では、VIEWを使うより、正規化して、インデックスを使うことによって、処理スピードは上がるとして、VIEWを禁止していると、確か思った。


■■(6)行連鎖・行移行など
 これは、日経ビジネス構築2005年12月号157ページに説明が載っています。1行がながーい可変長レコードなんかを更新するとき、前の行に収まらないので、分割して格納したり(行連鎖)、別の、あいているところに、1行分格納してしまう(行移行)こと。こうすると、1行を取得するためのアクセス数が増えるので、遅くなる。




 これ以外にも、SQLとトリガーの話など、いろいろあるんでしょうけど、正規化と関係しなさそうな話なので省略します。

 というか、一般的に、処理スピードのサイトというと、「懸賞生活」じゃないよ、
おら!オラ!Oracle-どっぷり検証生活とか、その会社のサイトにある、Oracle SQL文テクニック集などが、中心となるのでしょうから、話は、そっちにゆずることにして、とりあえず、ここで、終わりにしておきます。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする