RSSユーザー
条件に達していないはずなのにIF文の条件決済関数が起動してしまいます
現在の評価損益額が設定したロスカット金額を下回ると決済発注されるIF文が、意図したタイミングで作動しません。
① Excel起動時に、条件に達していないのに、fneworderの関数が走り、エラーメッセージが出て決済されないことがあります。
② ①の状態になった後にロスカット金額に達しても、決済されません。(①で発注IDが無効になっているためかと)
③ 上記に気づいてExcelを再起動すると決済されます。
本来はロスカット条件に達したら即決済したいのですが、①で条件が真になってないのに条件発注の関数が走るので、その後に意図した動作にならないのです。
実際のシートを添付しますので、どなたか確認していただけないでしょうか?
・A38セルのIF文が条件発注の式です
・1日1回発注するので、発注IDは取引日付より取得します
お手数ですがよろしくお願いいたします。
2019年01月04日
Ryo Ohno
こんにちは!!
誤発注の件ですが、一度ポジションを持ったのちに、誤発注がかかってしまうということでよろしいでしょうか?
まず、前提条件として、岡三RSS(というかExcel)の関数の実行順序は左上のA1セルから実行されるわけではなく、不定となりまーす。
今回のA38の発注関数は、利食い価格(J15),損切価格(K15),評価損益額(J20)が正しく計算できている前提ですが、
実行順が不定のため、利食い価格、損切価格、評価損益額が計算される前に
A38の発注の条件の判断が動いてしまうことがあります。
ポジションがないのと、前提がわからなかったため、完全に調べ切れていないのですが、
多分、利食い価格などが、正常に計算される前に発注条件が判断されてしまい、発注が掛かっていると思います。
また、計算式上、建玉単価と数量が空白になってしまったの場合、
利食い金額とロスカット額が0円になってしまうため、こちらも合わせて対応しておいた方がよいと思います。
(FOPPOSITION関数が書き換えの時に一瞬空白になるときがあります、この時に発注関数が動いてしまうと、問答無用で決済がかかってしまいます。)
申し訳ありません、再現出来なかったので必ず直ると事が確認ができていませんが、
回避策としては・・・
A38の発注関数に『数値であること』『利食い,ロスカット額が0以上(以下)であること』を
条件に入れるのが簡単と思われまーす。
=IF(OR(J20>J15,J20<K15),fneworder(),"-")
↓
=IF(AND(ISNUMBER(J15),ISNUMBER(K15),ISNUMBER(J20),J15>0,K15<0,OR(J20>J15,J20<K15)),fneworder(),"-")
この条件で、
利食い価格(J15),損切価格(K15),評価損益額(J20)がすべて数字になっている
かつ、
利食い価格(J15),損切価格(K15)に目標の金額が設定されている
かつ、
利食い価格(J15)以上,損切価格(K15)以下
になった時だけ発注がかかるようになります。
2019年01月06日
Ryo Ohno
これで解決することを祈ります!!
2019年01月06日
けん
Ryo Ohnoさん、いつもご回答いただきありがとうございます。
#前回不注意でハンドルネームの入力を忘れましたが、
何度かお世話になっているけんです。
実はどのタイミングで誤発注がかかるのか、不定期なのでイマイチ不明瞭なのですが、基本的にはポジションを保有していない時、Excelを起動したときに発注がかかり、ポジションが無いのでエラーになるケースが多い気がします。Excelを起動したときに必ず誤発注されるのではなく、どのタイミングでそうなるのかたまになるのでよく把握しておりません。。。
なぜ、条件式が判断される前に発注がかかってしまうのか、いまひとつ理屈が分からないところではありますが、Ryo Ohnoさんからいただいた条件式をそのままコピーさせていただき、しばらく運用しながら様子を見たいと思います。
本当にご丁寧にありがとうございます。
2019年01月07日
Ryo Ohno
あっ!!けんさんだったんですね!
お久しぶりです!!
>なぜ、条件式が判断される前に発注がかかってしまうのか、いまひとつ理屈が分からないところではありますが
こちらは、セルの計算が実行される順序が不定のため(岡三RSSのデータも並列に書き込まれる)
条件式が判断される前に発注がかかってしまうというより、
条件式が判断される前に、まだ利食い価格などの計算が終わっていないという感じでしょうか・・・
今回のシートの場合
以下の順序でセルの計算が動くと、正常に動作すると思うのですが
1.評価損益額(J20)・・・評価額を取得
2.利食い価格(J15)・・・J20の評価額を元にして計算(100000円など)
3.損切価格(K15)・・・J20の評価額を元にして計算(-100000円など)
4.発注(A38)・・・J15とK15の金額から発注の判断
しかし、もし以下の順番で動いてしまうと、誤発注されてしまいます。
1.評価損益額(J20)・・・評価額を取得
2.発注(A38)・・・J15とK15の金額から発注の判断
※まだ利食いの計算がされてないので、利食い価格も、損切価格も0円の場合がある
評価額が10000円とかなっていたりすると、決済の発注がすぐにかかってしまう
3.利食い価格(J15)・・・J20の評価額を元にして計算(100000円など)
4.損切価格(K15)・・・J20の評価額を元にして計算(-100000円など)
イメージですがこんな感じでしょうか・・・
岡三RSSの更新順やセルの更新順が不定のため、
うまく行ったり、行かなかったりしてしまうのが、これが原因と思われまーす。
2019年01月08日
けん
Ryo Ohnoさん、こんばんわ。返信ありがとうございます。
なるほど!理屈が分かりました。
そうすると、色々判断する条件をもっと強固にする必要がありそうですね。自分にはちょっと難しそうですが、助けていただきながら、頑張ってみたいと思います!
いつもありがとうございます。m(_ _)m
2019年01月08日
Ryo Ohno
岡三RSSがデータをシートに書き込むタイミングと
Excelが計算するタイミングが絡んで、なかなか難しい部分がありますからね・・・
自分が経験したことが少しでもお役に立てれれば幸いですっ!!
2019年01月08日
けん
Ryo Ohnoさん
すいませんが、本件また妙な状態になったので助けていただけると幸いです。
前回、条件文を直していただきその後しばらくうまくいっていたのですが、最近またこういう現象になりました。
☆ポジション保有時、Excelを再起動させると、条件に達していないのに、決済されてしまいます。
都合があってExcelを再起動させたいのですが、今回もまた同様のタイミングの問題が残っているのでしょうか?Excelは再起動しない方がよいのでしょうか?
お手数ですが、よろしくお願いします。
2019年03月12日