RSSユーザー
先物の売約定と買約定をエクセルの下に書き出したいです。
お世話になります。
岡三RSSで先物の売約定と買約定をエクセルに記録したいです。
当日16時30分~5時30分迄の1約定毎1枚から記録し、
累積を出したいのですが、行数制限を気にせず下の行に書き出す
方法が知りたいです。
イメージとしては、
「岡三RSSでできること Vol.2」
https://www.youtube.com/watch?v=Iw6j9m5JwUY
の中の34分位にあります、TICK関数による
「売り注文」「買い注文」を1約定毎に記録するような感じです
。
https://www.okasan-online.co.jp/ont/rss/manual/detail/27
の中にあります、FTICK_M関数ですと、自動で更新がされない為、
VBAでの記述をする方法は有りますか。
何度かVBAに挑戦しては、分からずの初心者です。
宜しくお願い致します。
2021年04月05日
RSSユーザー
2021-4-21.jpg (327.1KB)
大野様
ご丁寧に御返信有難うございます。
お答えに関しての返信を致します。
1.発注IDの件
→即理解しました。
2.何処に発注関数をいれるかの件
→A列に書いてみます。
3.手動で注文は大変の為、VBAで発注を出すほうが楽の件
→良い案を頂き感謝しています。
VBA初心者で難しく感じており、先に進む事ができなく、
コピペとかで利用しています。しかし、これではいけないと思い
少しでも理解できるように学習しております。
前回大野さんに教わった、「更新と1分おき」
のやり方が即出来たため、今回も大野さんのお力を借りつつ、
挑戦してみたいと思います。
今回教わった新たな注文のVBAと、
前回教わった出来高系の1分更新
の表示VBAを合わせてみました。
以下がその記述内容です。
Sub 記録()
Static NowPosi As Long '現在どのポジションを持っているか 0:ノーポジション 1:売り、3:買い
Dim NextTime As Variant
'ザラバの間の処理
If "08:45" <= Format(Now(), "HH:MM") And Format(Now(), "HH:MM") <= "15:08" Then
If "16:30" <= Format(Now(), "HH:MM") And Format(Now(), "HH:MM") <= "5:28" Then
'買いポジションの処理
If Sheets("Sheet1").Range("S5") = "買い" And (NowPosi = 0 Or NowPosi = 1) Then
'売りポジションの決済
Call Fneworder("N225mini", 202106, 2, 1, 1, 1, 13, 0, 1, 0, 0, 0, "*****", "NOW()", 1, "", 13, "", "保有")
'買いポジションの新規
Call Fneworder("N225mini", 202106, 1, 1, 1, 1, 13, 0, 1, 0, 0, 0, "*****", Now(), 1, "", 12, "")
NowPosi = 3
End If
'売りポジションの処理
If Sheets("Sheet1").Range("T5") = "売り" And (NowPosi = 0 Or NowPosi = 3) Then
'買いポジションの決済
Call Fneworder("N225mini", 202106, 2, 1, 1, 3, 13, 0, 1, 0, 0, 0, "*****", "NOW()", 1, "", 13, "", "保有")
'売りポジションの新規
Call Fneworder("N225mini", 202106, 1, 1, 1, 3, 13, 0, 1, 0, 0, 0, "*****", Now(), 1, "", 12, "")
NowPosi = 1
End If
End If
'大引け
If ("15:09" <= Format(Now, "HH:MM")) And (Format(Now, "HH:MM") <= "15:14") Then
'ここで引けなり発注
If NowPosi = 1 Then
'売りポジションの決済
Call Fneworder("N225mini", 202106, 2, 1, 1, 3, 5, 0, 1, 0, 0, 0, "*****", "NOW", 1, "", 13, "", "保有")
NowPosi = 0
End If
If NowPosi = 3 Then
'買いポジションの決済
Call Fneworder("N225mini", 202106, 2, 1, 1, 3, 5, 0, 1, 0, 0, 0, "*****", "NOW", 1, "", 13, "", "保有")
NowPosi = 0
End If
End If
' 記録 Macro
Range("L5:Z5").Select
Selection.Copy
Range("L7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("O7").Select
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
NextTime = Now + TimeValue("00:01:00")
Call Application.OnTime(NextTime, "記録")
Application.CommandBars("岡三RSS2").Controls.Item("更新").Execute
End Sub
今回御質問があります。
1.夜間の引けも決済したいので、5時28分頃の記述はこれでよろしいでしょうか。
2.Module1のところに上記を記述しても,各シート毎(Sheet5に注文のVBA、Sheet6に1分毎の抽出)
に分けて記述し、マクロを実行してもエラーがでます。
エラー内容は
・CALL FNEWORDERのところで引っ掛かり、
「コンパイルエラー:SubまたはFunctionが定義されていません」
と表示されます(上図)。
・1分毎の抽出はマクロを実行する時だけは、実行されますが
次の行数目の抽出がされません(2分目以降がされないです)。
・入金不足の状態で注文をすると「パスワード違う・建玉番号、もしくは決済順序が指定されていません」
とエラーがでます。パスワードは建玉番号また決済番号はミニ1枚のみ売買になるため1にしましたがこれがいけないでしょうか(下図)。
度々恐れ入りますが、よろしくお願い致します。
2021年04月21日
大野 了
ソースファイル.xlsx (3.0KB)
RSSユーザさん、こんにちは
>1.夜間の引けも決済したいので、5時28分頃の記述はこれでよろしいでしょうか。
少し記述の仕方を変えないといけないのと、大引けのところが夜間の時間が入っていなかったため
そちらも修正したファイルを送ります。
ここにコードを張ると、インデント(プログラムを見やすくする段落)が抜けちゃうので
テキストファイルで送ります!!
テキストファイルがアップロードできないので、
ダウンロード後、ファイル名を『ソースファイル.txt』に変更すると中身が見れます!!
また、発注IDのところなど、nowの結果ではなく、
Now()という文字が入ってしまってるところがあったり、
Fneworderの引数の数があってなかったり、
IF とEnd Ifの組み合わせが異なったりしていますので、まとめて修正した方で送ります!!
>2.Module1のところに上記を記述しても,各シート毎(Sheet5に注文のVBA、Sheet6に1分毎の抽出)
に分けて記述し、マクロを実行してもエラーがでます。
エラー内容は
・CALL FNEWORDERのところで引っ掛かり、
「コンパイルエラー:SubまたはFunctionが定義されていません」
と表示されます(上図)。
こちらは、もしかすると、参照設定が抜けているかもしれません
VBAを入れるEditorを開いて
ツールー参照設定
で上がってきたダイアログの中の『岡三RSS』にチェックを入れてください!!
・1分毎の抽出はマクロを実行する時だけは、実行されますが
次の行数目の抽出がされません(2分目以降がされないです)。
今の条件だと、いろいろと動かないところがありますので
今回のファイルで一度動きを見て頂けますでしょうかー?
>・入金不足の状態で注文をすると「パスワード違う・建玉番号、もしくは決済順序が指定されていません」
とエラーがでます。パスワードは建玉番号また決済番号はミニ1枚のみ売買になるため1にしましたがこれがいけないでしょうか(下図)。
こちらは、決済注文時に、第四引数に1が指定されているため、
建玉番号が1というポジションを決済しに行って、その建玉が無いためエラーになっています。
もし決済したい建玉を指定しないでよいのであれば、"C"を指定すると、古い順から決済していきます。
2021年04月21日
岡三オンライン証券
RSSユーザーさま
いつもRSSをご利用くださり、誠にありがとうございます。
投稿いただきました内容に、取引パスワードと思われる文字列の記載がございました。
そのため、該当する箇所を「*****」に差し替えをいたしました。
ご理解くださいますようお願い申し上げます。
なお、投稿の際には、取引パスワードなど重要な情報につきましては記載をしないようにお願いいたします。
2021年04月21日
RSSユーザー
大野様
テキストファイルありがとうございます。
前回のご返答の件です。
1-1.夜間の引けの決済追加コードの件
→テキストファイルを確認しました。
1-2.発注IDにnowの結果ではなく、Now()という文字にしたファイルで送信の件
→Now以外の部分は確認をし、理解ができました。
発注IDのところは4月17日に教えていただいた、
「NOW()などで現在の時間を発注IDとすると
毎回発注IDを自動で変えることが可能です!!」
とありますが、これはRSS関数上のお話であり、
テキストファイルに記載いただいた、「発注ID」の項目は、
VBAなので、任意で記載しつつ、Now()ではないと考えてよろしいでしょうか。
2-1.マクロを実行してもエラーが出る件
→ツール―参照設定―岡三RSSのチェックが入っておりませんでした。
入力して、正常にマクロが実行されるのを確認しました。
2-2.・1分毎の抽出がされなくなったの件
→先物サンプルのシートに新たに6つ目のシートを追加し実行していました。
そこへ色々なRSSの数式が入っていたためか分かりませんが、全部削除して
実行し直したらできました。また、例えばラージとミニのデータ抽出(今まで
やっていた1分おき)は、ブックを2つ開いていてRSSを実行しても、
1つのブックだけを読み込むような仕様になっているみたいなんですが
これはVBA・RSSの仕様でしょうか。
3-1「パスワード違う・建玉番号、もしくは決済順序が指定されていません」
とでるの、建玉を指定しないので良ければ、"C"で古い順から決済します。
→途転で、1回につき1注文分しか、建てない為、建玉指定無のCで理解しました。
1-2だけ、教えていただけましでしょうか。
まだ、実際売買はせず、データをだして検証している状態ですが、
完成次第、注文を出してみたいと思います。
もう直ぐゴールなような気がします。
本当にお陰様で、感謝をしております。
2021年04月27日
大野 了
RSSユーザさん、こんにちは!!
発注IDは発注の度に異なるIDを設定する必要が有るのですが
セル関数(シート上だけで)だけで自動で異なる番号を振ることが難しいので
Now()を使いますと現在時間という事で、毎秒ごとにセルの中身が変わりますので、
これを利用して、発注IDとしています。
VBAではRSSユーザさんのおっしゃられます通り、
重複しない任意の値を作成して入れればよいのですが、
これも面倒なのでVBAでも
OrderID = Format(Now, "YYYYMMDDHHMMSS")
の部分でNowを使って現在時刻を取って、OrderID変数に入れ、
Call Fneworder("N225mini", 202106, 2, "C", "", 1, 13, 0, 1, 1, 1, 1, "パスワードに変えてね", OrderID, 1, "")
として、それを発注IDとしています!!
もし、ご質問の回答にそぐわなかったらごめんなさい・・・
>ブックを2つ開いていてRSSを実行しても、
>1つのブックだけを読み込むような仕様になっているみたいなんですが
>これはVBA・RSSの仕様でしょうか。
ブックを2つ開いてもRSSは正常に動くのですが、
通常のやり方でExcelを二つあげた場合、プロセスというコンピュータの処理単位が同じになってしまい、
ひとつのExcelの動きが、もう一つのExcelに影響してしまうので、
別プロセスでExcelを上げると互いに干渉しない形で動きます。
やり方は、
1.スタートメニューのExcelをクリックして起動する際に、Altキーを押しながらクリックする
2.『新しく別のExcelを起動しますか?』と聞いてくるので"はい"を押す
これで見た目は同じですが、別プロセスのExcelとなり、
VBAをガンガン回したりしても片方のExcelに影響を与えません。
一度、このやり方で上げてみて様子を見て頂けますでしょうかー
自動売買まで上手い事行けることを祈ってます!!
2021年04月27日
RSSユーザー
大野様
お久しぶりです。
前回のご回答ありがとうございました。
あれからずっとテストをしておりました。
返信が遅くなってしまいました。
前回の発注IDの件は直ぐに理解し、
VBA有のブックを2つ同時に立ち上げ干渉させない方法の
件も直ぐにできるようになりました。
そして、昨晩始めて発注を、冷や冷やしながらやってみました。
結果は、全くエラーがでずに、注文がされませんでした。
確認しました事や疑問点に思いました事。
・アドイン→注文可能を確認しました。
・注文エラーのメッセージは岡三RSSからは全くでませんでした。
・注文マクロを実行しても、エラーはでませんでした。
・岡三オンラインのホームページからの注文画面でも約定等されておりませんでした。
・記述中のFneworder関数ですが、最後の2つの引数、すなわち新規(C21とC22)と決済(C36とC37)の6 種類とも全て「13,""」にしてみても変化無しでした。またC9に1をいれてみても結果は変わらずでした。
・元々Moduleを分けていましたが、一括にすると「名前が違う」とでたりでなかったりします。
また、1点質問がございます。
16時30分台も前日のデータが反映されており、
それを修正する為にR8に0を入力したく「R8に0入力」
というマクロを作成したのですが、R8に0入力がエラーが出ます。
「(マクロR8に0入力を実行できません)。このブックでマクロが使用できないか、
またはすべてのマクロが無効になっている可能性があります」
という感じのエラーです。
「夜間から日中」「日中から夜間」「M8に0入力」というマクロ
は正常に動いているようです。
添付ファイルの件ですが、テキストファイルを.xlsx形式にしようとしましたら、
文字化けをしてしまい、ネットで下記のようなやり方を試してみました。
https://kb.benchmarkemail.com/jp/how-do-i-convert-a-text-file-to-an-excel-file/amp/
https://data-analyzer.net/2020/02/19/txt-xlsx/
しかし、文字化けをしたり、「""」が2重になって「""""」になってしまったり
してしまいます。
そこでPDFやWORDで添付しようとしましたが、
これでは「ファイル形式が誤っています」
となってしまいます。
その為、今回も貼り付けをさせて頂きました。
良い方法が有りましたら、
作成し直しますので教えて頂けますか。
全てのマクロを添付致しました。
ご回答頂けましたら、幸いです。
お助け頂き、本当にうれしいです。
Sub 記録()
Static NowPosi As Long '現在どのポジションを持っているか 0:ノーポジション 1:売り、3:買い
Dim NextTime As Variant
Dim OrderID As String
'ザラバの間の処理
If "08:45" <= Format(Now(), "HH:MM") And Format(Now(), "HH:MM") <= "15:08" _
or "16:30" <= Format(Now(), "HH:MM") And Format(Now(), "HH:MM") <= "5:28" Then
OrderID = Format(Now, "YYYYMMDDHHMMSS")
'買いポジションの処理
If Sheets("Sheet1").Range("S5") = "買い" And (NowPosi = 0 Or NowPosi = 1) Then
If NowPosi = 1 Then
'売りポジションの決済
Call Fneworder("N225mini", 202106, 2, "C", "", 3, 13, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
End If
'買いポジションの新規
Call Fneworder("N225mini", 202106, 1, "", "", 3, 13, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
NowPosi = 3
End If
'売りポジションの処理
If Sheets("Sheet1").Range("T5") = "売り" And (NowPosi = 0 Or NowPosi = 3) Then
If NowPosi = 3 Then
'買いポジションの決済
Call Fneworder("N225mini", 202106, 2, "C", "", 1, 13, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
End If
'売りポジションの新規
Call Fneworder("N225mini", 202106, 1, "", "", 1, 13, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
NowPosi = 1
End If
End If
'大引け
If ("15:09" <= Format(Now, "HH:MM")) And (Format(Now, "HH:MM") <= "15:14") _
or "05:24" <= Format(Now(), "HH:MM") And Format(Now(), "HH:MM") <= "5:29" Then
OrderID = Format(Now, "YYYYMMDDHHMMSS")
'ここで引けなり発注
If NowPosi = 1 Then
'売りポジションの決済
Call Fneworder("N225mini", 202106, 2, "C", "", 3, 5, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
NowPosi = 0
End If
If NowPosi = 3 Then
'買いポジションの決済
Call Fneworder("N225mini", 202106, 2, "C", "", 1, 5, 0, 1, 1, 1, 1, "パスワードに変えました", OrderID, 1, "")
NowPosi = 0
End If
End If
End Sub
Sub 記録()
'
' 記録 Macro
'
'
Range("L5:Z5").Select
Selection.Copy
Range("L7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("O7").Select
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
Application.OnTime TimeValue("15:20:00"), "日中から夜間"
Application.OnTime TimeValue("05:40:00"), "夜間から日中"
Application.OnTime TimeValue("16:30:05"), "M8に0入力"
Application.OnTime TimeValue("16:30:59"), "M8に0入力"
Application.OnTime TimeValue("16:30:59"), "R8に0入力"
Application.OnTime TimeValue("16:31:59"), "R8に0入力"
NextTime = Now + TimeValue("00:01:00")
Call Application.OnTime(NextTime, "記録")
Application.CommandBars("岡三RSS2").Controls.Item("更新").Execute
End Sub
Sub 夜間から日中()
'
' 夜間から日中 Macro
'
'
Range("V3").Select
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[5]C[-9]"
Range("W3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[5]C[-7]"
Range("V3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("W3").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Range("M5").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-1]C[-9]-R[-1]C[-7]-R[-2]C[9]"
Range("P5").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=@FQUOTE(""N225mini"",""0"",""出来高"")-R[-2]C[7]"
Range("Q5").Select
End Sub
Option Explicit
Sub 日中から夜間()
'
' 日中から夜間 Macro
'
'
Range("M5").Select
ActiveCell.FormulaR1C1 = "=R[-1]C[-9]-R[-1]C[-7]"
Range("P5").Select
ActiveCell.FormulaR1C1 = "=@FQUOTE(""N225mini"",""0"",""出来高"")"
Range("M5").Select
End Sub
Sub M8に0入力()
'
' M8に0入力 Macro
'
Range("M8").Select
ActiveCell.FormulaR1C1 = "0"
Range("M8").Select
ActiveCell.FormulaR1C1 = "0"
End Sub
Sub R8に0入力()
'
' R8に0入力 Macro
'
Range("R8").Select
ActiveCell.FormulaR1C1 = "0"
Range("R8").Select
ActiveCell.FormulaR1C1 = "0"
End Sub
2021年05月13日
大野 了
RSSユーザーさん、こんにちは!!
発注できませんでしたか・・・
全くエラーも出ていないという事は、発注のロジック自体動いてないっぽいですねー
ちなみにソースですが、
こちらは複数のシートやモジュールのソースをまとめて張られていますでしょうか?
Sub 記録()が二つあったり、そもそもが正常なソースになっていないようです。
2021年05月13日
RSSユーザー
大野様
御返信有難うございます。
このソースはシートは1つで、
複数のモジュールをまとめて張っています。
モジュールを分けて(Module1~5とかに)分けても、
注文のマクロはできないみたいです。
Sub記録が2つあった件ですが、
注文は「注文」というマクロ名に変更しました。
それでも注文をしないみたいです。
2021年05月13日
大野 了
RSSユーザさん、こんにちは!!
返信が遅くなりましたー
今回のソースは複数のモジュール分のソースをまとめて張られたという事ですね!!
またSub記録の件も了解しました!!
多分、Sub注文(一つ目のSub記録)が呼ばれていないため、動いていないと思われます。
Sub 記録()の 1行目に
Call Sub注文
と一行書いて頂ければ、1分ごとにSub注文が実行されます!!
これで発注はできるようになると思います!!
2021年05月14日
RSSユーザー
大野さん
ご返信有難うございます。
試してみます。
またご報告いたします。
2021年05月15日