kazu
買い注文の約定と同時に損切り注文を出す方法について
自動売買で買い注文の約定と同時に損切り注文を出したいと思っています。保有に該当銘柄が入ったことを確認して同銘柄に逆指値で損切り注文を出すよう関数を入れていますが、買い注文が約定した瞬間に「返済可能な建玉がありません。」と表示され発注が行われません。
この方法でなくても構いませんが、VBAを使わず買い約定と同時に損切り注文を出せる方法を教えて頂けませんでしょうか。
2019年11月27日
アップロードされたファイルにはウイルスチェックを行っておりますが、未知のウイルス等に感染されている場合がありますので、アップロードされたファイルのご利用はご注意ください。
また、取引パスワード等の重要な情報を投稿内容に含めないようご注意ください。
なお、アップロードされたファイルの利用や投稿内容によって、投稿者自身や他の利用者が被った損害に対して当社は一切責任を負いません。
また、セキュリティの関係上、一部コマンド等を含む内容を送信するとエラー画面が表示され、投稿ができない場合がございます。何卒ご了承ください。
岡三RSS集いの広場では、複数の単語による検索が可能です。
例)関数 and サンプル
→AND検索となり、「関数」および「サンプル」を含む検索結果が表示されます。
例)関数 or サンプル
→OR検索となり、「関数」または「サンプル」を含む検索結果が表示されます。
例)関数 not サンプル
→NOT検索となり、「関数」を含むが「サンプル」は含まない検索結果が表示されます。
※and、or、notの前後は半角スペースで区切ってください。
※単語の間を半角スペースで区切るだけだと、OR検索となります。
大野 了
kazuさん、こんにちは!!
>保有に該当銘柄が入ったことを確認して同銘柄に逆指値で損切り注文を出すよう関数を入れていますが
こちらはPOSITION関数を使用し、約定した銘柄が出力された後に、
逆指値で発注した時に、
「返済可能な建玉がありません。」と表示される感じになりますでしょうか?
お聞きした感じですとkazuさんが書かれてる内容で大丈夫なような気がしますが、
関数実行のタイミングの問題からもしれません。
タイミングがらみでうまくいかないことが、多々ありますので・・・
原因の絞り込みのために、以下の点を教えて頂けますと幸いです。
・毎回発生しますでしょうか?
・発生するタイミングとして、2回目の新規発注後だけということがあったりしませんでしょうか?
もしくはすでに別のポジションがあったりしませんでしょうか?
・もしよかったら、逆指値側とPOSITION関数のパラメータを教えて頂けますでしょうか?
これらが細かくわかると、VBAを使わずに何とかできるかもしれません!!
2019年11月27日
kazu
大野 様
ご回答頂きありがとうございます。
逆指値の注文には以下の関数を利用し、保有に建玉が検出されたあとに発注されるようにしています。
=IF(SUMIF(保有!$A:$E,C27,保有!$E:$E)=100,IF(C36<>0,REPAYMENTORDER(C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45),"待ち"),"待ち")
※保有シートE列:保有数量
※C27:銘柄コード
※C36:始値
上記ないようで、しばらくした後に発注IDを変更すると正常に動作するため、タイミングが早すぎる(建て玉が認識されていない)のではないかと推察しております。
ご確認頂いている内容については以下の回答となります。
・毎回発生いたします。
・1回目の発注から発生いたします。また、同銘柄の別ポジションはありません。
・POSITION関数のパラメータは以下となります。
=POSITION("","0",E3,E4)
ご多忙のところ恐れ入ります。
よろしくお願い致します。
2019年11月27日
大野 了
kazuさん
こんばんは!!
保有シートの作りがわからないので、正確なところは何とも言えないのですが・・・
kazuさんの関数の作りから想像しますと、
保有シートにはPOSITION関数により、現在のポジション情報が表示されており、
E列には保有数量が表示されている。
また、保有シートのA~D列には銘柄コードなどの他の情報も表示されている。
C27には発注を行いたい銘柄コードを表示されており、
この銘柄コードと同じ行の保有数情報が100株になったら、
『約定している』ということで、逆指値の注文を行うという感じでしょうか?
もしこのような認識で間違いなければ、怪しそうな点が2点ありました。
1.SUMIFの条件列が複数列になっている。
SUMIFの第一引数は条件の対象行の指定となるのですが、
現在『保有!$A:$E』となっており、
複数列に対して銘柄コードを見るため、SUMの条件判断が不定となります。
現状ですと、A~E列に表示されている値によっては、
約定していなくても100と帰ってくる可能性があり、
『返済可能な建玉がありません。』と表示されてしまう可能性があります。
C27が銘柄コードということですので、もしA列に銘柄コードを表示しているのであれば、
SUMIF(保有!$A:$A,C27,保有!$E:$E)
の様に銘柄コードが表示されている行のみにして頂けますと、条件が正常に動作すると思います。
2.POSITION関数のずれ問題
POSITION関数の結果が一瞬ずれてしまうという問題があるのですが、
このためだけに対応すると大変ですので、
もし、銘柄コードの有無だけでよいのであれば、
SUMIF関数ではなく、
=COUNT(保有!$A:$A,C27) > 0
として頂ければ、A列にC27で指定した銘柄コードが表示されたら
発注がかかると思います!!
この2点で解決できれば良いのですが・・・
2019年11月27日
kazu
大野様
ご回答頂きありがとうございます。
一旦逆指値の注文を諦めて、現在値を監視し成り行きで損切り注文を発注する方法に変更することで暫定対応しました。
とはいえ逆指値での対応が理想ですので、いずれご教示頂いた方法を実践してみようと思います。
丁寧にご対応いただきありがとうございました。
2019年11月28日
大野 了
kazuさん、こんにちは!!
自分はVBAになりますが、kazuさんと同じで
現在値を確認して成り行きで損切注文を出す形にしています。
確かに逆指値で出せるのが理想ですよね・・・
滑りにくいですし・・・
あと、1点書き間違いをしていました・・・
=COUNT(保有!$A:$A,C27) > 0
↓
=COUNTIF(保有!$A:$A,C27) > 0
でした。
もしまた何かあれば、投稿していただけますと幸いです。
2019年11月28日
岡三オンライン証券
kazuさま
いつも岡三RSSをご利用いただき、誠にありがとうございます。
本日11:30頃に投稿された添付ファイルですが、取引パスワードと思われる記述がありましたため、コメント自体を非公開とさせていただきました。
取引パスワードなど記述がないことをご確認のうえ、アップされるようお願いいたします。
また、取引パスワードは重要な情報のため、ご変更されることをお勧めいたします。
今後とも、どうぞよろしくお願いいたします。
2019年12月02日