ここから本文です

FXメタトレーダー入門の221ページに、 if(Volume[0]>1 || IsTradeAllowed()==fa...

ara********さん

2011/1/1920:18:17

FXメタトレーダー入門の221ページに、

if(Volume[0]>1 || IsTradeAllowed()==false)return(0);


というプログラムがあるのですが、Volume[0]>1と
IsTradeAllowed()==false の意味が分かりにくいので詳しい方分かりやすく説明お願いします。
後、
「bool」という型も分からないので詳しいお願いします。

補足お二人様とても分かりやすく回答頂きありがとうございます。
一点だけxchsshzoさんに質問させて下さい。

ただし、このような記述は、あまりお勧めしません。理由は、「Volume[0]<=1」
と、書かれてましたけど、「Volume[0]<=1」ではなく、「Volume[0]>=1」ですか?
多少混乱しております><

恐縮ですが、回答お願いしますm(__)m

閲覧数:
1,226
回答数:
2

違反報告

ベストアンサーに選ばれた回答

xch********さん

編集あり2011/1/2014:22:23

1.Volumu[0]>1について

まず、start()関数内に記述されたプログラムは、ティックが更新されてレートが変化するたびに、上から下へ一回ずつ読み込まれます。

なので、たとえば、ゴールデンクロスで買い注文を出したいとき、

「if(1本前の短期線<=2本前の長期線 && 1本前の短期線>1本前の長期線)」

という条件だけで新規注文するようにプログラムしてしまうと、この条件が満たされている間、ティックが更新されるたびに、新規注文が繰り返されてしまい、多重発注になってしまいます。

そこで、1本前のバーが完成し、新しいバーが形成された直後に一回だけ新規注文をするようにして、多重発注を防止することが必要になります。

この点、Volume[0]は、現在のバーのティック数を返す関数で、新しいバーができたときに、「1」を返し、その後、ティックが変更するたびに、「2」、「3」、…と変化していきます。

このVolume[0]が「1」より大きいときには、その下のプログラムを読み込まないようにする(return(0);)ことによって、多重発注を防止しようというわけです。

ただし、このような記述は、あまりお勧めしません。

理由は、「Volume[0]<=1」というのは、場合によっては非常に短い時間で、その間にたまたま通信トラブル等があった場合に、「Volume[0]>=2」以降、それより下のプログラムが読み込まれないわけなので、新規注文ができなくなるだけなら構いませんが、ゴールデンクロスによるショートポジションの損切り等がプログラムされているような場合、下手をすると、その損切りまでできなくなってしまう可能性もあり、極めて危険だからです。

私の場合は、多重発注を防止するためには、Volume[0]関数を使わずに、通貨ペアとマジックナンバーの一致するポジション数をカウントして、「そのポジション数が0のときだけ=他に同種のポジションを持っていないときだけ」新規注文をするようにプログラムするようにしています。具体的な記述方法については、もう少し先に勉強をすすめてから学習した方がよいと思います。

2.IsTradeAllowed()==falseについて

これについては、「実践編のP214」あたりに詳しく記述されています。

3.bool型について

「int」は整数型、「double」は少数型、というのはご存知ですよね。これに対して、bool型というのは、数値を返すのではなく、その関数の条件が満たされていれば、「true=真」を返し、満たされていなければ、「false=偽」を返します。任意の変数のときのように、わざわ「ざbool」と記述しないのは、はじめからメタトレーダー内に組み込まれた関数で、すでに宣言済みだからです。

よって、

「IsTradeAllowed()==false」というのは、「トレードが許される==偽」という意味で、「通信トラブル等、何らかの理由により現在トレードができない状態」であることを示しています。

質問した人からのコメント

2011/1/20 23:56:53

成功 お二方ありがとうございました。
理解できました。

xchsshzoさんの本があればぜひ読みたいといつも思っております^^ 笑♪

ベストアンサー以外の回答

1〜1件/1件中

shi********さん

2011/1/2012:52:41

Volume[n] は、右側(最新)から n 番面目のバーに於けるティック数を返します。 n=0 とは最新(現在)のバーを指します。
また、最新バーを形成する時、ティック数は1になります。
こられのことから、Volume[0]>0 とは、「新たなバーを形成した以降」ということになります。

IsTradeAllowed() とは、取引しえる環境にあるかどうかを問う関数で、OKなら true、ダメなら false を返します。

このような true か false を受け取る定数を bool 型と呼びます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる