ゴン
VBAで上手くコードが書けません…
はじめまして。
先日からVBAでの自動売買を学び始めた超初心者です。
セル関数ではなくVBAの方が比較的簡単という情報を目にしたのでVBAで自動売買ができるように作成中です。
条件としては、
・移動平均線クロスが発生後、新規発注
・その後、逆のクロスが出現したら決済+新規発注
・損切や利確も設定したい
のドテン買いの構想です。
岡三RSSのホームページからダウンロードした先物サンプルにVBAを書き加えております。
やりたいことは頭の中に浮かんでいるのですがなかなか上手くコードが書けず、難しく考えてしまって心が折れてしまっています…
自信をつけるためにどうにかVBAで完成させたいので、どなたかご教授いただけますと幸いです。
ファイルの拡張子を変更しています。
お手数をおかけしますが何卒よろしくお願いいたします。
2022年01月08日
大野 了
ゴンさん、はじめまして―
VBAって慣れるまで難しいですよね・・・
こちらはどのようなことがお困りでしょうかー?
具体的にお困りの内容を頂けると、何かお応えできるかもしれません。
また、アップされているファイルですが、拡張子を変更しても開くことができませんでした・・・
2022年01月09日
ゴン
IfdoneOCO^LM時間決済サンプル のコピー.xls (270.0KB)
大野様、ありがとうございます。
先物サンプルではなく、If done OCO+時間決済サンプルに上記の条件注文の部分を少し変更して作成しているのですが、初心者のためVBAで書いた条件が合っているか不安になり、わからなくなってしまいます…
添削のような形でご教授お願いしたいです…
ファイルの拡張子をxlsに変更した場合は開けますでしょうか?
ファイルサイズが超過するみたいなので約定一覧などのシートは一時的に消去しております。
何卒よろしくお願いいたします!
2022年01月09日
大野 了
ゴンさん、こんにちはー!!
ファイル開けましたー
ありがとうございます!!
中のVBAも拝見することはできたのですが・・・
色々と記述があり添削という形ではコメントが少々厳しく・・・
お困りの部分や動かない部分など、具体的な内容を頂くことは難しいでしょうか?
2022年01月10日
ゴン
先物(移動平均線クロス)シート - コピー - コピー のコピー.xls (197.5KB)
大野様、ありがとうございます。
抽象的な質問で申し訳ございません。
・四本値のデータ取得
・移動平均線のデータ算出
・移動平均線作成
・売買シグナル作成
・条件設定→発注
現在、ここまでの流れとしてコードも試行錯誤尾しながら書いているのですが、発注がなかなかうまくいきません…
もし発注のみVBAでやる場合は特に価格取得などはVBAを使わなくてもセル関数のみでいいのでしょうか?
その場合は発注のみVBAでやろうと考えております。
また、四本値シートのゴールデンクロスまたはデッドクロスの判断で発注をかけたい場合、別シートを参照する『Sheets(四本値).Select』で合っていますでしょうか?
たくさん質問してしまい申し訳ございません…
足りない部分などご教授いただければ幸いです。
よろしくお願いいたします。
2022年01月11日
大野 了
ゴンさん、こんにちは!!
>もし発注のみVBAでやる場合は特に価格取得などはVBAを使わなくてもセル関数のみでいいのでしょうか?
>その場合は発注のみVBAでやろうと考えております。
こちらは、ゴンさんが書かれておられます、
『四本値のデータ取得』の意味合いになりますでしょうかー?
それでしたらFCANDLEなどのRSSの関数を記述したところとは
別のところに結果を出力する系の関数はVBAでは動作しないためセル関数で記述を行い、
その出力結果をVBAにて取得させてあげる必要があります!!
>また、四本値シートのゴールデンクロスまたはデッドクロスの判断で発注をかけたい場合、別シートを参照する『Sheets(四本値).Select』で合っていますでしょうか?
VBAにて他のシートのセルを参照する場合の記述方法は以下の2種類あります。
・Sheets(シート名).Cells(列, 行)・・・行列番号で指定する
・Sheets(シート名).Range(セル)・・・セルの名称で指定できる
四本値シートのゴールデンクロスの値を別シートから見られたい場合は
Sheets("四本値(移動平均)").Cells(6, 13)
もしくは
Sheets("四本値(移動平均)").Range("M6")
となります!!
2022年01月12日
ゴン
先物(移動平均線クロス)シート - コピー - コピー のコピー.xls (197.5KB)
大野様、いつもありがとうございます!
やはり発注が上手くいかないのですが、
・移動平均線のクロス
・新規発注、決済発注
この部分の文法がおかしいのでしょうか?
岡三RSSにつないでいる状態でも発注完了メッセージがでてきません…
>四本値シートのゴールデンクロスの値を別シートから見られたい場合は
Sheets("四本値(移動平均)").Cells(6, 13)
もしくは
Sheets("四本値(移動平均)").Range("M6")
となります!!
迷っていた形だったのでそっちでしたか!ありがとうございます!
2022年01月12日
ストレッチ博士
まずは発注 IDだけ手打ちすれば発注できるようにシート作りませんか。
それも無理ならまずVBAの基本的な学習が先です
2022年01月12日
大野 了
ゴンさん、こんにちは!!
そうですね・・・
VBAの発注関数自体は、注文シートの中に記述があるのは確認できたのですが、
このシート自体がコンパイルエラーが起きているようです。
※コンパイルエラーとはVBAの構文等がおかしく、まったく動作できない状況となります。
このためVBA自体が動いていないため、発注も行われていないと思われます。
VBA エディタで
メニューバー ー デバッグ - VBAProjectのコンパイル
を押下して頂くと、エラーの内容とエラーの箇所が分かり明日の出、
こちらで一度コンパイルエラーを取り除いて頂けますと、VBAが正常に動かくかもしれません!!
簡単なエラーでしたら、こちらで修正して動かしてみようかとも思ったのですが、
Exit Subが存在しないなど、プログラムの終わりがないというような
エラーも出ており、こちらでは判断が少々厳しかったです。
一度、コンパイルエラーがなくなるまで修正して頂き試して頂けますでしょうか?
これで動くとよいのですが・・・
>ストレッチ博士さん
確かに小さく作って、少しずつトライアンドエラーで機能を増やしていくやり方も良いですね!
2022年01月12日
ゴン
先物(移動平均線クロス)シート - コピー - コピー のコピー.xls (186.0KB)
大野様、いつもありがとうございます!
何度もデバックを繰り返し、コンパイルエラーがなくなるまで一通り修正いたしました。
マクロ実行のボタンを押したあと、実行できず、無効になっている可能性があるとの項目がでてきました。ネットで調べても実行されません…
その際の対処法を教えてください。
RSSでは『発注不可です』とのメッセージは出てきます。
そして、発注・決済条件とVBAのコードが一致しているのかを見ていただけませんでしょうか…?
2022年01月13日
大野 了
ゴンさん、こんにちは
こちらはマクロの実行がセキュリティにて無効化されていると思われます。
シート起動時に上の方に『コンテンツの有効化』のボタンが表示されていれば、
クリックすると動くと思います。
もし、表示されていなければ、
ファイル ー オプション - トラストセンター - トラストセンターの設定 - マクロの設定
で『警告して、VBA マクロを無効にする』にチェックを入れてください。
これで、起動時にマクロを有効化するかどうか聞いてくると思います!!
2022年01月13日
ゴン
大野様、ありがとうございます!
マクロ実行ボタンを押下後、エラーは出なかったのでこれは動いてるってことでいいのでしょうか!?
トラストセンターのマクロ設定を確認したところ、チェックはついておりました。
私のPCの処理速度が遅いのかもしれないのですが、発注がかかるか確認ができません…
大野様の方で確認していただくことは可能でしょうか...?
何度もお手数おかけしてしまい申し訳ございません。
大野様のお陰でもうすぐ完成できそうです。
本当に感謝しております。
2022年01月14日
大野 了
ゴンさん、こんにちは!!
発注がかかるかどうかの確認という事ですが、
こちらは『注文()』という関数の中の発注の関数が動作するかという事になりますでしょうかー?
上記の事で間違いなければ、
If Sheets("四本値(移動平均)").Range("M6") = "買い" And (NowPosi = 0 Or NowPosi = 1) Then
で、ゴールデンクロスの条件を判断されていますが、
四本値(移動平均)シートのM6は、"買い"などの文字ではなく、0,1でシグナルのフラグを表現されていますので、
シグナルが発生しても、発注がかからない状態となっております!("1"と"買い"の文字は異なるため)
If Sheets("四本値(移動平均)").Range("M6") = "1" And (NowPosi = 0 Or NowPosi = 1) Then
として頂くと、シグナルが立った時に発注がかかると思われます。
また、以下の実際の発注関数に関してですが
Call FNEWORDER("N225mini", "202201", "1", "", "", "3", "0", "0", "12", "1""1", "1", "Pass", CStr(hODRID), "3", "memo")
1.限月が昔の限月になっている
2.第10引数と第11引数の間にカンマが無い
以上の点をご修正頂けましたら、とりあえず、FNEWORDERの関数は動作すると思われます!!
※自分の方でも動作しました。
ですが、他にも注文()内だけですが、他にも対応する必要な個所はありそうです!!
1.ローカル変数のNowPosiを判断されてますが変数の中身を設定していないため、
下の方に記述があります決済発注は動作しないと思われます。
NowPosiの意味合いなどがわからないため、何とも・・・
2.hODRIDがローカル変数になっているため、この関数が呼ばれるたびに初期化され0に戻ってしまいますので、
2回目以降の発注は発注IDが重なってしまい発注が行われなと思われます!!
Static変数にして頂くか、グローバル変数にして頂く必要があると思われます!!
以上、発注()に関して気が付いた点となります!!
2022年01月15日
ゴン
先物(移動平均線クロス)シート - コピー (version 1).xlsb - コピー.xls (225.0KB)
大野様、いつもありがとうございます!
お返事が遅くなってしまい、すみません。
ご指摘いただいた箇所を修正したところ、注文時にメッセージが出てくるようになりました!(口座に入金していない為、エラーがでます。)
3点質問がございます。
①ロスカット値や利確値はセルの値設定で指定しているのですが、VBAで組み込むにはどのようなコードを組めばよろしいのでしょうか?ちなみに、値を自由に変更できるようにしたいです。(セルの値設定のみで大丈夫なようでしたら、そのままにしようと思っております。)
②ポジション決済の際も四本値シートのゴールデンクロスorデッドクロスで判断するのですが、コードの記述はこれで合っていますでしょうか?
・Function PosCheckから下(ポジションのチェックなど)のコード全てですが、他の質問者さんのコードを参考にしました。
ここの部分のコードは不必要でしょうか…?
(トリガーなどの条件は新規発注のIF文に含まれているため)
質問が多く、お手数をおかけしますが何卒よろしくお願いいたします。
おかげさまでもう少しで完成できそうです!
2022年01月19日