むむのり
日経225の自動売買について
初めまして。むむのりと申します。
最近、岡三RSSに興味を持ちまして、RSSを使っての自動売買を検討しております。
ロジック作成の練習として、サンプルシートを使って下記のロジックで225ミニの自動売買処理を組もうとしているのですが、いろいろ手詰まりとなっております。
動画セミナー等を見ているのですが、理解が追い付かず、申し訳ありませんがご教授いただけますでしょうか。
ロジック…5分足確定時の終値で、
・5MAが10MAを上回り、かつ5分足の終値が5MAより上回る場合は「買い」で成行新規発注。
・5MAが10MAを下回り、かつ5分足の終値が5MAを下回る場合は売りで成行新規発注。
・それぞれの「売り」「買い」は15分後、つまり発注のもととなる確定した5分足から、5分足が3つ確定した後に、成行決済注文をする。
質問は次の4つです。
①買いと売りのサインは5分足を岡三RSSで表示し、サインが出るように数式を組みました。その数式に「売」と「買」という文字が出るようにし、買いと売りのシートでIF関数を使って成行注文できるような式を次のように入力してます。
=IF(四本値!N13="買",fneworder(C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22))
この式で注文はできるのでしょうか。なにかおかしい点はありますでしょうか。
②次に発注IDなのですが、この発注IDについて理解が追い付いておりません。サインが出た場合、何度も同じ注文を出すことを防ぐためとQ&Aに書いてましたが、サンプルシートにではデフォルトで「F001」と最初から入っております。これが入っていると連続して自動売買処理ができないのではないでしょうか。このサンプルシートをつかって1日に何回も注文と決済をくりかえしたいのですが、この発注IDを消すのがまずいと直感的に感じますので、発注IDを活かして連続で注文と決済を繰り返すには、どのような方法があるのでしょうか。
③仮のこのロジックで売りと買いの注文ができたあとに、15分後、つまり注文から5分足が3つ確定したところで、15分前に注文した建玉を成行決済するロジックをどのように組めばいいか、見当が付きません。どのようにしたらよいか教えていただけますでしょうか。
④このRSSでの自動売買処理ですが、練習するデモ環境みたいなのはありますでしょうか。
いきなり本番は少しこわいため、練習が必要と思います。
いろいろと申し訳ありませんが、どなたか教えていただけますと幸いです。現在作成中のサンプルシートをアップしておきます。
2019年01月25日
Ryo Ohno
むむのりさん、こんにちは!!
返信が遅くなりました。
ご質問の件ですが・・・
>①買いと売りのサインは5分足を岡三RSSで表示し、サインが出るように数式を組みました。その数式に「売」と「買」という文字が出るようにし、買いと売りのシートでIF関数を使って成行注文できるような式を次のように入力してます。
はい、式的には問題ないと思います!!
そのままですと、発注IDが変わらないため、2回目以降の発注がかかりませんが、
発注IDを以下の様に時間ごとに毎回変わるようにしてあげれば、大丈夫と思われます。
>②次に発注ID
こちらは、むむのりさんのご心配の通り、同じ発注IDを繰り返して使うことができませんので
一日に何度も(正確にはExcelを起動している間)発注がある場合は、
発注毎に、毎回違う発注IDを指定してあげる必要があります。
もし、1秒以内に何度も発注を行わない場合は、NOW関数を使用して時間を発注IDにしてしまうのが簡単です。
>③仮のこのロジックで売りと買いの注文ができたあとに、15分後、つまり注文から5分足が3つ確定したところで、
現状のシートを大きく変えないで実現するとなると、少し難しいのですが
N15が『買』『売』いずれかだった場合、最も日時の小さいものを決済するというのはいかがでしょうか?
シートを見たところ、時系列に流れているため、もし9:10で『買』サインが出た場合、
5分後には、一つ下に、10分後には2つ下にそのサインが移動していくと思われます。
15分経つと、3つ下にそのサインが移動すると思われますので、
そこに『買・売』のサインがあれば、決済を行うというのはいかがでしょうかー?
>このRSSでの自動売買処理ですが、練習するデモ環境みたいなのはありますでしょうか。
これ、自分もほしいです(>_<)
残念ながらないので、自分の口座でやる必要があります・・・
発注だけでよいなら、その時だけわざと約定しないような指値に設定して、動かしたりしています。
わかり辛い点も多いと思いますので、
もし何かあれば、再度ご連絡を頂けますと幸いですっ!!
2019年01月28日
むむのり
190130 5分足で売買サイン.xlsx (283.6KB)
Ryo Ohno様
ご返信ありがとうございます。
①発注IDについて
可変ということですので四本値シートのC12の約定時刻に設定し、5分毎に発注IDが変わるようにしました。これで連続で発注ができるようになったと私は認識しておりますが、間違いがありますでしょうか?ご指摘いただいた点を踏まえたシートをUPしておきます。
②15分後の決済について
>N15が『買』『売』いずれかだった場合、最も日時の小さいものを決済するというのはいかがでしょうか?
シートを見たところ、時系列に流れているため、もし9:10で『買』サインが出た場合、
5分後には、一つ下に、10分後には2つ下にそのサインが移動していくと思われます。
15分経つと、3つ下にそのサインが移動すると思われますので、
そこに『買・売』のサインがあれば、決済を行うというのはいかがでしょうかー?
こちらについては、私も同様なことをかんがえておりました。四本値シートの黄色のセル、つまり15分後のところに”買”サインが出てれば、決済をするようなロジックです。Ohnoさんのおっしゃるようなイメージで決済の項目を追加してみました。これでご認識はあいますでしょうか?
③決済について
実はこの②の決済方法を考えてて、あれ?うまくいかないな?とおもった点があります。つまりエクセルシートを開いたときに、その瞬間で5日分の5分足を取得しますので、直近5分足とその15分前の5分足も一度にサインがシート上で表示されます。
つまり何が言いたいかというと、建玉がまだ立っていない状況で、15分後のサインを拾ってしまい、カラの状態なのに決済注文がでてしまうことがあり得ます。これでなにかエラーみたいなのが起こりますか?ちょっと説明がしづらいのですがここは。。
④指定決済について
そこで③についてですが、指定決済というものがあれば、新規注文した建玉をピンポイントでそれを選んで決済ができるのではないでしょうか?メモ欄を使って指定決済できるようなことがQ&Aにあったのですが、具体的にどのようにやるかわかりますでしょうか?
⑤練習環境について
指値の設定などをして本番環境でみなさん練習されているのですね。。このRSSというのは結構すごい機能だと思うのですが、岡三オンライン様はあまりそこまで力をいれてらっしゃらないのでしょうか。。テクニカルサポート窓口などを作っていただければいいと思うんですが。。
理解が追い付かず申し訳ありません。お時間あるときで結構ですのでご返信頂けますでしょうか。よろしくお願いします。
2019年01月30日
Ryo Ohno
むむのりさん、こんばんは!!
>①発注IDについて
現状のこのロジックですと・・・
C12で、9:10に新規発注があったとすると
15分後、
C15の表示も、9:10になってしまい発注IDが同じになってしまいますので、
何か後ろに新規の売り買い、決済の売り買いを識別するやつを追加した方がよいと思います
例えば・・・
新規買い:『=四本値!C15 & "NL"』
新規売り:『=四本値!C15 & "NS"』
決済買い:『=四本値!C15 & "CL"』
決済売り:『=四本値!C15 & "CS"』
などとすると、時間がかぶさっても大丈夫と思います!!
>②15分後の決済について
ですよね・・・
動かせてないのが申し訳ないのですが、自分もやるとしたら同じような形になると思います!!
>③決済について
確かに、むむのりさんのおっしゃられますと取り、エラーになりそうです。
もしその時は『決済対象の建玉がありません』的なエラーが出て終わります。
そのままでも問題は無いと思うのですが、
エラーが出てしまうのが気持ち悪いと言うことであれば、FOPPOSITION関数で
今抱えているポジションを取得し、決済注文のIFに決済関数の有無を追加するというのはいかがでしょうか?
>④指定決済について
はい、先物の場合、建玉番号を指定すると対象の建玉をピンポイントで決済することができます。
新規発注の時のメモ(C20など)に任意の文字を入れて、新規発注を行いますと
FOPPOSITION関数でメモの項目を取得すれば、発注関数で指定した値が返ってきます。
あとはこのメモの値を検索条件として、VLOOKUP関数などで取得すれば、対象の建玉番号を取得できます!!
>⑤練習環境について
テクニカルサポートも、VBAやExcelの関数の話になると、
Microsoftのアプリケーションですし厳しい点も、きっとあるんでしょうね・・・
2019年01月30日
むむのり
いつもお世話になっております。
早速のご返答ありがとうございます。
アドバイスをいただいたおかげでだいぶ理解が進みました。
①建玉番号
このC:建日時古順とは先入先出法の意味でしょうか。つまり古い建玉から自動的に決済されていくという意味でしょうか。
②決済注文のルール
このRSSでの決済注文の場合、例えば売りの決済発注をする際に買いの建玉を持っていない場合はエラーになるのでしょうか?それとも売りの建玉が注文される、つまり新規で売りが立ってしまうのでしょうか?
③発注ID
発注IDには&をいれてかぶらないようにしました。
④練習環境
テクニカルサポートがなければせめてデモ環境さえ用意してくれればユーザー側で試行錯誤するんですけどね・・・
2019年01月31日
Ryo Ohno
こんばんは!!
>①建玉番号
>このC:建日時古順とは先入先出法の意味でしょうか。つまり古い建玉から自動的に決済されていくという意味でしょうか。
はい、むむのりさんのおっしゃられます通りで、
『C:建日時古順』は自分で決済する建玉を選ばず、
先入先出法で古い建玉から指定枚数分、自動的に選ばれて決済されます。
>②決済注文のルール
>このRSSでの決済注文の場合、例えば売りの決済発注をする際に買いの建玉を持っていない場合はエラーになるのでしょうか?
>それとも売りの建玉が注文される、つまり新規で売りが立ってしまうのでしょうか?
こちらは新規で売りが立つことはなく、『決済対象無しのエラー』になります。
>④練習環境
特に損切のテストの時はほしいです・・・
ホントに損にしないといけないので・・・(笑
2019年01月31日
むむのり
いつもお世話になります。
ご返信ありがとうございました。
まだいろいろよくわからない点もありますが、
いったん今の状況のシートを使用し、
テクニカル指標を見直して運用を開始してみたいと思います。
いろいろ相談に乗っていただきありがとうございました。
2019年01月31日
超初心者
先物サンプル.xls (0.6MB)
Ryo Ohno様
初めまして。超初心者です。
一括エントリー、分割決済を岡三RSSで自動化して、決済の負担を減らしたいと検索していたところ、Ohno様と質問者様の過去ログに触れました。
まさに下記のような分割決済を理想としており読み進めていたのですが、全く理解ができなくて・・・(涙)
お忙しい所大変恐縮ですが、質問させて下さい。
サンプルシートはダウンロードしたのですが、Ohno様のおっしゃっているポジション情報 A47 B47 その他セル番号は
サンプルシートの「注文」タブのシートの該当セルにその計算式を書き加えて行く、ということでしょうか。
もしくは全く見当はずれのことを申しておりますでしょうか。下記作業をするにあたり、ヒントを頂けますと幸いです。
ダウンロードしたサンプルシートを添付致しました。
また、以下は2014年9月7日の過去ログのコピーです。
*****
1.決済は最高で7分割
2.決済金額は、最大で7種類設定したい
例) 15000円で建てたときに
1:+50円
2:+100円
3:+150円
4:+200円
3.損切りは1種類で、円で指定したい
4.もし、1回利確したら、建値まで、損切り価格を引き上げて、負けないようにしたい
5.両建てでエントリすることもあり、各々に上記の設定がしたい
6.場の状況で、上記の価格は変更したい
7.大引けで、全建玉を決済したい
サンプルシートを改造するという方式で、説明させて頂きます。
利確、損切用の発注のリストと、現在のポジション情報を追加することにより可能と思います。
ポジション情報
A47・・・=FOPPOSITION(″売買″,A48)
B47・・・=FOPPOSITION(″数量″,B48)
C47・・・=FOPPOSITION(″建玉単価″,C48)
B51・・・=SUMIFS(B48:B50,A48:A50,″買″)
C51・・・=VLOOKUP(″買″,A48:C50,3,FALSE)
B51は現在、買いで持っている建玉の合計枚数が出ます。
発注直後は、発注した枚数と同数が出ています
C51は、買いで発注したときの約定額が表示されます。
57行目以降は、利確用の7つの設定をします。
B37にある決済用のIF文変更したものを、7つ用意し、各々に金額を設定出来るようにします。
A56・・・1つ目の決済のための+/-値
B56・・・=$C$51+A56 (決済判断金額 実際に決済を行う金額です)
C56・・・その金額で決済したい数量
D56・・・発注ID
E56・・・=IF(B39>B56,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C56,C14,C15,C16,C17,D56),″未発注″) 決済のための条件
これで、建時の金額にA56で追加した金額を超えたら、発注関数が動きます。
D56で発注IDを指定しているので、いったん、決済判断金額を超えて、下落して
再度、決済判断金額を超えても発注は掛かりません。
上記の56行目をコピーして、2~7の発注条件を作成してください。
67行目以降は、損切り用の設定をします。
A67・・・損切りのための+/-値
B67・・・=IF(C13=B51,$C$51+A67,$C$51)
C67・・・=B51
E67・・・発注ID
F67・・・=IF(B39<B67,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C67,C14,C15,C16,C17,D67),″未発注″)
B67は
C13(建玉数) とB51(現在のポジション数)が同じ場合は、
約定額から、損切りのための+/-値を加減した金額となります。
もしC13(建玉数) より B51(現在のポジション数)が少ない場合、
(一度でも利確決済した場合)、約定額になり、損切の金額が約定額に切りあがります。
72行目以降に引成の設定をします
A72・・・=NOW()
B72・・・=IF(TIME(15,10,0)>TIME(HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())),″RS″,″PC″)
C72・・・=B51
E72・・・=IF(B72=″PC″,fneworder(C5,C6,C29,C8,C9,C30,5,C32,C72,C14,C15,C16,C17,D72),″未発注″)
この例ですと、B72が、15:10過ぎたらPCと変わりますので、
ここでポジションの決済が走ります。
売りポジションは上記の設定の反対バージョンを作って頂けると大丈夫と思います。
また、これは、このRSSで建てたポジション以外の、先物のポジションが無いことが前提となっています。
もし、他のポジションを考慮する場合、もう少し複雑となります。
*******
新規売り→買返済 のOCO返済の書き込みしてみました
これでいいのでしょうか、一度見て下さり、お教えくださればありがたいです。
A77 =FOPPOSITION(″売買″,A78)
B77 =FOPPOSITION(″数量″,B78)
C77 =FOPPOSITION(″建玉単価″,C78)
C81 =VLOOKUP(″売″,A78:C80,3,FALSE)
A86 利確値幅 手記入 (1回目)
B86 =$C$81-A86
C86 数量(入力)
D86 発注ID
E86 =IF(B39>B86,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C86,C14,C15,C16,C17,D86),″未発注″)
その後返済回数に応じて繰り返し
損切り
A97 損切り値幅
(例えば50円逆行したら損切りしたい場合ですが 50円と記入ですか? -50円と記入となりますか?)
B97 =IF(C13=B81,$C$81+A97,$C$81)
C97 =B81
E97 発注ID
F97 =IF(B39<B97,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C97,C14,C15,C16,C17,D97),″未発注″)
引け成り
A102 =NOW()
B102 =IF(TIME(15,10,0)>TIME(HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())),″RS″,″PC″)
C102 =B81
E102 =IF(B102=″PC″,fneworder(C5,C6,C29,C8,C9,C30,5,C32,C102,C14,C15,C16,C17,D102),″未発注″)
以上です
特に計算式の中の
> or <,
+ or -,
がこれで良いのか?
又損切り幅 入力の際 + なのか? - なのか?
*****
>特に計算式の中の
>> or <,
>+ or -,
>がこれで良いのか?
>又損切り幅 入力の際 + なのか? - なのか?
すみません、確かにです。
肝心なことを書き忘れていました。(^^;
ちなみに、Higuchiさんは
『損切りは-で入れたがわかりやすい』
とかありますでしょうか?
もし、ありましたら、リクエスト頂けると、そのように計算式直してみます。
また、同じシートに売り用のを作成してしまうと、
買いと、売りのエントリ用の情報が1つになってしまい、
同値での両建てしかできなくなりますので、
シート自体をコピーして、そちらに売り用のヤツを作ったが良いと思われます。
*****
まとめました。
================================================
○買いの場合
A47・・・=FOPPOSITION(″売買″,A48)
B47・・・=FOPPOSITION(″数量″,B48)
C47・・・=FOPPOSITION(″建玉単価″,C48)
B51・・・=SUMIFS(B48:B50,A48:A50,″買″)
C51・・・=VLOOKUP(″買″,A48:C50,3,FALSE)
A56・・・1つ目の利益確定のための金額(+表記)
B56・・・=$C$51+A56 (決済判断金額 実際に決済を行う金額です)
C56・・・その金額で決済したい数量
D56・・・発注ID
E56・・・=IF(B39>B56,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C56,C14,C15,C16,C17,D56),″未発注″) 決済のための条件
A67・・・損切りのための金額(+表記)
B67・・・=IF(C13=B51,$C$51-A67,$C$51)
C67・・・=B51
D67・・・発注ID
E67・・・=IF(B39<B67,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C67,C14,C15,C16,C17,D67),″未発注″)
A72・・・=NOW()
B72・・・=IF(TIME(15,10,0)>TIME(HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())),″RS″,″PC″)
C72・・・=B51
D72・・・発注ID
E72・・・=IF(B72=″PC″,fneworder(C5,C6,C29,C8,C9,C30,5,C32,C72,C14,C15,C16,C17,D72),″未発注″)
================================================
================================================
○売りの場合
================================================
A47・・・=FOPPOSITION(″売買″,A48)
B47・・・=FOPPOSITION(″数量″,B48)
C47・・・=FOPPOSITION(″建玉単価″,C48)
B51・・・=SUMIFS(B48:B50,A48:A50,″売″)
C51・・・=VLOOKUP(″売″,A48:C50,3,FALSE)
A56・・・1つ目の利益確定のための金額(+表記)
B56・・・=$C$51-A56 (決済判断金額 実際に決済を行う金額です)
C56・・・数量(入力)
D56・・・発注ID
E56・・・=IF(B39<B56,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C56,C14,C15,C16,C17,D56),″未発注″) 決済のための条件
A67・・・損切りのための金額(+表記)
B67・・・=IF(C13=B51,$C$51+A67,$C$51)
C67・・・=B51
D67・・・発注ID
E67・・・=IF(B39>B67,fneworder(C5,C6,C29,C8,C9,C30,C31,C32,C67,C14,C15,C16,C17,D67),″未発注″)
A72・・・=NOW()
B72・・・=IF(TIME(15,10,0)>TIME(HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())),″RS″,″PC″)
C72・・・=B51
D72・・・発注ID
E72・・・=IF(B72=″PC″,fneworder(C5,C6,C29,C8,C9,C30,5,C32,C72,C14,C15,C16,C17,D72),″未発注″)
================================================
>1) 私は損切り幅の入力については +でも-でもどちらでも気になりません。
> 決まったとおりに出来ます。
両建てという事ですので、+と-が入り乱れると、分かり辛いと思いましたので、
損切り幅も+で入力する形にしてみました。
買い、売り関係なく
○○○円、利益が出たら、利確
○○○円、損失が出たら、損切
の感覚で記述ができるかなーと思いまして・・・
>シート自体をコピー
1.エクセルの『注文』シートのタブ(一番下にある、シートの名前のところです)を右クリック
2.メニューが出る
3.『移動またはコピー』を選択
4.シートの移動またはコピーウィンドウが開く
5.(末尾へ移動)を選択
6.『コピーを作成する』をチェック
7.『OK』ボタン押下
これで、『注文』シートの右に『注文(2)』と言うシートがコピーされて作成されます。
あとは、シートの名前をわかりやすい名前に変更して頂けると大丈夫と思います。
*******
大変長くなってしまって申し訳ございません。
何卒ご助言賜ります様、宜しくお願い申し上げます。
2019年03月17日