スマイルキャッチャーを岡三RSS対応に改修
※2023年いっぱいで、岡三オンライン証券の先物オプションの取り扱い終了が案内されています。2023年4月26日現在。
・初めに
知る人ぞ知るスマイルキャッチャー(以下SC)が復刻されました。
Sc0001【スマイルキャッチャーsc0.64.rdx/TOPページ・ダウンロード・関連リンク集】
・謝辞
SCの開発・復刻にご尽力された関係者の皆様方、誠にありがとうございます。この場を借りてお礼申し上げます。
免責事項
本記事に掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
現状、現在値シートの左上、先物部分4行は、α版の方法でセルにコピペが必要です。
・はじめに
不測の事態に備えるために行います。
先輩方、ご覧になっていらっしゃいましたら、ぜひご指導をお願います。
・作業の前に
必ず、別名でバックアップをお願いします。3重バックアップでも結構です。本、編集ファイル名に「岡三RSS限取」などを追加されると分かりやすいかと思います。
・ご注意
また、VBAを編集しますので、編集後は純正コードを移植しないかぎり、二度と元には戻りません。ですので、バックアップ操作・ファイル管理には十分にご注意ください。
エクセルに「開発」タブが無い場合は、オプションから開発タブを表示する設定が必要です。
※スマイルキャッチャーの動作中にVisual Basic for Applicationsを開くとPCがフリーズして操作を受け付けなくことがあります。
マーケットスピードか、RSSを終了してから編集をお願いします。
クセルのVisual Basic for Applicationsには行数が表示されませんので、ここからはVisual Studio Code(無料・Microsoft製)の画面で説明します。もちろんエクセル純正や他のエディタでも編集出来ます。
※2019.09.25追記 VBAもウィンドウ上部に行数が表示されていました。
SCの限月取得モジュールのコードを全てVisual Studioにコピペします。純正コードは663行あります。
次に、Visual Studio Code(以下VS Code)の右下にある、Plain Textをクリックします。
上部の検索窓に「vb」と入力すると、VBA用のものが出ます。今回はVS Codeでコンパイルしないため、どれを選択してもあまり変わりません。 (見やすくするための色付けです。単色のままでも作業できます。)
続いて、第1編集です。
78行目の空欄に以下2行をコピペします。1行ずつコピペする場合は、改行して貼り付けスペースを開けてください。
Dim lngStrikeT As Long '権利行使価格の変数 末尾のTはTemp一時の意味
Dim stryyyymmT As String 'SQ限月YYYYMM変数 末尾のTはTemp一時の意味
第1編集後、行数が変わります。第1編集後の133行~208行を削除します。
※行位置は改行などで変わりますので、画像を参考にされてください。
そして、削除位置に以下のコードをコピペします。もし削除後に133行に目スペースがない時は改行されてください。
削除開始位置
削除終了位置
※改行などで行数は変わります。画像赤枠の「End If」より上までを削除されてください。
「本丸」の岡三RSS用限月取得コードです。
133行目付近に貼り付けます。
objConfigSheet.Select
With objConfigSheet
r = GetEndRow(3, objConfigSheet)
For i = lngStrikeStartRow To r
'限月をYYYYMM形式で取得 Rの範囲,OP限月セル,YYYYMM形式
stryyyymmT = 20 & .Cells(i, lngContractMonthCol).Value 'OP限月(yymm)のセル値をYYYYMM形式で変数に代入 2100年以降は 21 &
lngStrikeT = .Cells(i, lngStrikeCol).Value 'OP権利行使価格のセル値を変数に代入
.Cells(i, lngCallCol).Formula = "=IFERROR(IF(OR(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & ")=" & """ """ & ",OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """売気配値""" & "," & """N225op""" & ")=" & """ """ & "),1,OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & ")+(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """買気配件数""" & "," & """N225op""" & ")/(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """買気配件数""" & "," & """N225op""" & ")+OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """売気配件数""" & "," & """N225op""" & "))*(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """売気配値""" & "," & """N225op""" & ")-OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """C""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & "))))" & "," & "NA()" & ")"
Next
For i = lngStrikeStartRow To r
'限月をYYYYMM形式で取得 Rの範囲,OP限月セル,YYYYMM形式
stryyyymmT = 20 & .Cells(i, lngContractMonthCol).Value 'OP限月(yymm)のセル値をYYYYMM形式で変数に代入 2100年以降は 21 &
lngStrikeT = .Cells(i, lngStrikeCol).Value 'OP権利行使価格のセル値を変数に代入
.Cells(i, lngPutCol).Formula = "=IFERROR(IF(OR(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & ")=" & """ """ & ",OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """売気配値""" & "," & """N225op""" & ")=" & """ """ & "),1,OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & ")+(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """買気配件数""" & "," & """N225op""" & ")/(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """買気配件数""" & "," & """N225op""" & ")+OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """売気配件数""" & "," & """N225op""" & "))*(OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """売気配値""" & "," & """N225op""" & ")-OPQUOTE(" & _
"""" & stryyyymmT & """" & "," & """P""" & "," & """" & lngStrikeT & """" & "," & """買気配値""" & "," & """N225op""" & "))))" & "," & "NA()" & ")"
'End 'If '2019.08.26無効化
Next 'i
End With
'Call DeleteListSheet '2019.08.26 テストのため無効化
'Call GetOptionsList("F") '2019.08.26 テストのため無効化
With objConfigSheet
'限月をYYYYMM形式で取得 Rの範囲,OP限月セル,YYYYMM形式
stryyyymmT = 20 & .Range(strYYMM1ConfigRange).Value
.Range(strFutures1Range).Formula = "=IF(OR(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")=" & """ """ & "," & "FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")=" & """ """ & "),1,FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")+(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")/(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")+FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配件数""" & "))*(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")-FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & "))))"
'限月をYYYYMM形式で取得 Rの範囲,限月セル,YYYYMM形式
stryyyymmT = 20 & .Range(strYYMM2ConfigRange).Value
.Range(strFutures2Range).Formula = "=IF(OR(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")=" & """ """ & "," & "FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")=" & """ """ & "),1,FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")+(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")/(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")+FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配件数""" & "))*(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")-FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & "))))"
'strRSSCode = GetRSSCode("F", .Range(strYYMM3ConfigRange).Value, "")
'限月をYYYYMM形式で取得 ,限月セル,YYYYMM形式
stryyyymmT = 20 & .Range(strYYMM3ConfigRange).Value
.Range(strFutures3Range).Formula = "=IF(OR(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")=" & """ """ & "," & "FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")=" & """ """ & "),1,FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & ")+(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")/(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配件数""" & ")+FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配件数""" & "))*(FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """売気配値""" & ")-FQUOTE(" & _
"""N225MINI""" & "," & """" & stryyyymmT & """" & "," & """買気配値""" & "))))"
編集後のコードは全部で約676行です。(目安です。修正するかもしれませんので、増減します。)
これを、エクセルのVisual Basic for Applicationsの限月取得モジュールのコード全て削除してから、貼り付けます。
VBAの保存ボタンを押して、VBAを閉じます。
次に、現在値シートの先物部分をα版の通りに4行編集します。
現在値シートA2(フィルはしません。以下も単発です)
=FQUOTE("N225mini",20&設定!C6,"売気配件数")
現在値シートA3
=FQUOTE("N225mini",20&設定!C6,"売気配値")
現在値シートA4
=FQUOTE("N225mini",20&設定!C6,"買気配件数")
現在値シートA5
=FQUOTE("N225mini",20&設定!C6,"買気配値")
設定シートのA12:D256の削除と、設定シート先物部分、D6・G6・J6の削除します。
その後、岡三RSSの起動を確認してから、限月取得ボタンを押します。「WorksheetFunctionクラスのRTDプロパティを取得できません。」などのエラーが出たら、エクセルの保存や、もう一度、設定シートのA12:D256の削除と、設定シート先物部分、D6・G6・J6の削除を試してみてください。
また、岡三RSSを起動してからエクセルを起動するなどもあります。
※岡三RSSを起動しないで限月取得すると、エクセルが正しくてもエラーになります。
エクセルを再起動したり、セルを削除したり何度かしていると限月取得できるようになります。(いい加減で申し訳ありません。)
限月取得できましたら、純正SCと同じ方法でDITMの削除をお願いします。
2019年10月14日 追記 限月更新後は、エクセルか岡三RSSの再起動をお願いします。(限月更新だけでは新取得限月のCOMリンクが更新されないようです。)
また取引所設定がなく、まだ存在しないOP銘柄のセルは#N/A!表示にしています。これはグラフ表示を優先しているためです。(FOTM125円刻みやFOTM銘柄など)
純正SCでは、存在しないOP銘柄は弾かれるように内部処理されています。(今回その実装は間に合いませんでした。)
NA()を""に変更することも出来ますが、数字の「0」と認識してしまうため、グラフがガタガタになります。