質問掲示板
岡三RSS
集いの広場

アップロードされたファイルおよび投稿内容についての注意事項 別窓

複数の単語で検索する方法 別窓

【国内株式、先物・オプション】岡三RSS質問箱

たく

if分を使った決済注文ができません

いつもお世話になっております。
岡三RSSを使って先物の取引をしています。

if文を使ってある条件になったときに決済注文を出したいのですが、
=IF(条件, fneworder("n225mini~"))
という文を書いているのですがエクセルを起動すると同時に
「建玉番号、もしくは決済順序が指定されていません」

というメッセージが出てきて発注エラーとなります。
確かに建玉番号の引数にはfopposition関数から返ってきた値を入れるようにしているのでエラーになるのはわかるんですが、
そもそも条件が真になっていないはずなんです。

新規発注をしたときにメモをつけて、
fopposition関数でメモを取得し、帰ってきた値が新規発注したメモと一致した場合に決済発注をするようにしていますので、
エクセルを起動したとき(建玉がないとき)に真であるはずがないのです。

なのになぜ発注がされようとしているのでしょうか?
エラーとなったらこの発注IDももう使えないので実質この決済注文が実行されることはないということになってしまいます。

どなたか解決方法をご教示ください。
よろしくお願いいたします。

2018年09月27日

Ryo Ohno

たくさん、こんにちは!!

どのような計算式を使われているかわからないため、
返信が難しいですが、今、自分の方でも

=if(False,fneworder())

と、必ずfalseになる文を作って実行してみたのですが、
fneworderは、やはり実行されませんでした。

とすると、やはり何かしらの理由で、条件式が真になってしまっていると思うのですが、
使用している関数などをもう少し詳しく教えて頂くことは可能でしょうか?

2018年09月28日

ログインしてコメントを投稿する

たく

Ryo Ohnoさん、お久しぶりです

条件ですが、
=IF(AND(H208="pos1",F201<=E207),fneworder("N225mini",0,2,G208,"",1,13,0,1,1,1,1,***,"setA"))

となっております。
H208はメモを取得して指定した注文が約定していた場合にその注文を決済するようにしてあります。
F201<=E207はその時の値が指定した値を下回ってしまった場合に決済注文を発注するというものですね…
これだけでは情報が不十分かと思われますがどうでしょうか…

これはザラ場で使うシステムなのでE207は指定の時間以外は0になるようになっていて、そもそも0を下回るはずも建玉がないのでメモを取得することもできないはずなんです。

これで真となる場合が考えられないのですがいかがでしょうか…

2018年09月30日

ログインしてコメントを投稿する

Ryo Ohno

たくさん、こんばんはー!!

ぱっとみ、まったく問題がなさそうですね・・・(^^;

原因までは特定ができないのですが・・・
E207が特定の時間以降に0以外になるのであれば・・・
その条件をIF文の中に入れてしまうというのはいかがでしょうか?

例えば11時以降じゃないと決済がかからないように、0になっているというのであれば・・・

=IF(AND(H208="pos1",F201<=E207,TIMEVALUE(TEXT(NOW(),"HH:MM:SS"))>=TIMEVALUE("11:00")),fneworder("N225mini",0,2,G208,"",1,13,0,1,1,1,1,***,"setA"))

のような感じで・・・

Excelは必ず左上の関数から計算式が実行されるわけではないので、
もしかしたら、時間を判断してE207の中身が0になる前に、先にこの発注用のセルの関数が動いてるかもしれません
※それでも、メモが空白なので発注はしないと思いますが・・・

なにはともあれ、if分の中に入れることにより、時間の判断も同じタイミングでやるようになりますので、
指定時間以降に必ず、実行するようになると思います!!

2018年09月30日

ログインしてコメントを投稿する

たく

Ryo Ohnoさん、こんにちは

なるほど、if文の中で時間を指定するのは考えて居ませんでした。
後ほど動作確認したいと思います。

別の問題なのですが、
10:30〜12:30の値で1番高い値を計算する方法を考えているのですが、
fcandle関数で取得した時間のセルをifs関数で辿りながら10:30のセルを見つけ、そこから8個分のセル(15分足なので2時間分)のセルの中からmax関数で1番高い値を見つけて…
というふうにしているのでふが、この10:30のセルを見つける動作がかなり長文になってしまってすごく見づらい上に書き間違いがあってもわかりづらく、何かいい方法はないでしょうか。

10:30になった時点で、取得した最高値を一つの定数にしてしまえば話が早いのですが、マクロというものを使わなければならないらしくそれがよくわからないので…

2018年10月03日

ログインしてコメントを投稿する

Ryo Ohno

最大値取得サンプル.xlsx (14.5KB)

返信が遅くなって申し訳ありません。

そうですねー
判断用の行をひとつ増やしていいなら・・・

10:30~12:30を判断する行と、MAXIFSの組み合わせが簡単だと思います。
もしくは、VLOOKUPで10:30~12:30を抜き出して、その範囲でMAXを取るとか・・・

とりあえず、MAXIFSのサンプルを作ってみたのでアップします!!

ご参考になれば幸いです!

2018年10月05日

ログインしてコメントを投稿する

たく

Ryo Ohnoさん、こんばんは
そんな関数があったんですね知らなかったです!

試してみたら思い通りの物が書けましたありがとうございます!!

決済注文の件ですが、時間を条件に追加しても
「建玉番号、もしくは決済順序が指定されていません」
のポップアップは出てくるままでした…

エクセルを起動したときは
「発注不可設定になっていますのポップアップが画面を埋め尽くすほど何回も出てきます。(この時点で同じ発注IDで何回も発注しようとしてるの?という疑問もあるのですが)

その後に発注可能状態にすると「建玉番号、もしくは決済順序が指定されていません」が1回だけでてきます。

そもそもfneworderを書いているセルはfalseとなっているんですけどねえ…
謎は深まるばかりです、、


あともう一つ質問申し訳ないのですが、
if文の中に「現在時刻が10時30分00秒であるときに」
というものを追加したいときは、
IF(TIMEVALUE(TEXT(NOW(),"HH:MM:SS"))=TIMEVALUE("10:30:00"),~~)
を使えばよいのでしょうか?

2018年10月05日

ログインしてコメントを投稿する

Ryo Ohno

MAXIFSはお力になれたみたいでよかったです!!


条件の中に時間を入れてもダメでしたか・・・
発注不可状態で起動時に何度も発注がかかってるとすると・・・
別の何かの要因があるかもですね・・・
こうなるとExcelシートを全体的に観てみないと、厳しそうです・・・(すみません
とはいえ、時間の指定が入っているので、その時間までは発注はかからないと思うのですが・・・


>if文の中に「現在時刻が10時30分00秒であるときに」
>というものを追加したいときは、
>IF(TIMEVALUE(TEXT(NOW(),"HH:MM:SS"))=TIMEVALUE("10:30:00"),~~)
>を使えばよいのでしょうか?
はい、大丈夫です!!
NOW関数は再計算がかからないと現在の時間が更新されないので、
Tick関数でもなんでもいいので、定期的に値が更新される関数を
必要なくてもシートのどこかに入れておくと定期的に再計算走り日付が更新され続けていくので便利です!!

2018年10月06日

ログインしてコメントを投稿する

たく

システムトレード.xlsx (22.9KB)

Ryo Ohnoさん、こんばんは
返事が遅くなり申し訳ありません。

エクセルファイルを添付するのでどうかよろしくお願いします。

どうやらc208とc210に書いてある発注がうまくいっていないようです…

2018年10月08日

ログインしてコメントを投稿する

Ryo Ohno

システムトレード.xlsx (23.0KB)

こんはんは!!

たぶんですが、原因がわかりましたー
たくさんの言われてるように、C208とC210が原因のようです。

自分も解析してみて、今回初めて知ったのですが、
IFSの関数は、IFの関数と違い、
一度、条件に対する処理がすべて動いてから条件式がされるようです。
※VBAの条件式の動きがそんな感じですので、その流れを引き継いでいるのかもしれません。

ですので、C208とC210のところに記述されている
=IFS(条件1,fneworder(),条件2,fneworder(),TURE,FALSE)
の部分のfneworder()が、
Excel起動時に、まず問答無用で実行されてから、
その後、条件1や条件2の判断処理が行われます。

ですので、このIFSの分をご面倒ですが、IFを2重にかけた形に書き換えると、
自分の方では起動時の変な発注はなくなりましたー


修正をしたファイルを送り返しまーす。

2018年10月09日

ログインしてコメントを投稿する

Ryo Ohno

あと、一つ気が付いたのですが・・・

B207~210の
(TIMEVALUE(TEXT(NOW(),"HH:MM:SS"))=TIMEVALUE("10:30:00")
の部分ですが、これだと10:30:00ピッタリじゃないと発注がされず、
何かしら拍子で、1秒ぐらい更新が止まってしまうと、
発注がされない可能性がありますので、もう少し幅を持たせてあげたが良いかもしれませーん!!

2018年10月09日

ログインしてコメントを投稿する

たく

Ryo Ohnoさん こんばんは

なるほど、そういうことでしたか…全く知る由もありませんでした
ありがとうございますm(_ _)m

時間の範囲は10秒ほど余裕を持たせようと思います
ご指摘ありがとうございます
一旦これで動作確認してみますm(_ _)m

2018年10月10日

ログインしてコメントを投稿する

Ryo Ohno

こんばんは!!

便利なんですけど厄介ですね・・・IFS・・・

なにはともあれ、うまくいくことを祈っていますっ!!

2018年10月10日

ログインしてコメントを投稿する

すべての投稿を表示する

to_top
to_top

アップロードされたファイルにはウイルスチェックを行っておりますが、未知のウイルス等に感染されている場合がありますので、アップロードされたファイルのご利用はご注意ください。
また、取引パスワード等の重要な情報を投稿内容に含めないようご注意ください。
なお、アップロードされたファイルの利用や投稿内容によって、投稿者自身や他の利用者が被った損害に対して当社は一切責任を負いません。

また、セキュリティの関係上、一部コマンド等を含む内容を送信するとエラー画面が表示され、投稿ができない場合がございます。何卒ご了承ください。

岡三RSS集いの広場では、複数の単語による検索が可能です。

例)関数 and サンプル
→AND検索となり、「関数」および「サンプル」を含む検索結果が表示されます。

例)関数 or サンプル
→OR検索となり、「関数」または「サンプル」を含む検索結果が表示されます。

例)関数 not サンプル
→NOT検索となり、「関数」を含むが「サンプル」は含まない検索結果が表示されます。

※and、or、notの前後は半角スペースで区切ってください。
※単語の間を半角スペースで区切るだけだと、OR検索となります。