基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2010年02月23日(火)

if文の注意点(1) [プログラミング]



売買ルールのプログラムでは、必ずと言っていいほど条件分岐が出てきます。

条件分岐の基本はif文です。

あるテクニカル指標の値が10より小さいとか、90より大きいとか、一つの条件であればそう難しくありませんが、複数の条件の組合せになると、思った通りに動かないこともあります。

例えば、あるテクニカル指標(ここでは x とします)が10から90の間だと条件成立(true)という場合を見てみます。

この場合、「xが10より大きいという条件(x>10)」と「xが90より小さいという条件(x<90)」を同時に満たさなくてはいけないので、これらの条件を論理積(AND)演算子の「&&」で結んでひとつの条件とします。

int start()
{
double x = 50;

if(x > 10 && x < 90) Print("true");
else Print("false");

return(0);
}

この条件は数式で書くと「10 < x < 90」となるので、「x > 10」の代わりに「10 < x」と書いても構いません。
   if(10 < x && x < 90) Print("true");

ここで初心者がよく間違えるのは、「10 < x < 90」をそのまま
   if(10 < x < 90) Print("true");

と書いてしまうことです。

これでは、想定した通りの条件分岐はされず、x が何であっても条件を満たしてしまい、常にtrueと表示されます。

しかも、困ったことにコンパイルでエラーメッセージが出ないのです。

どういうことかと言うと、上の条件式は、実際には
   if((10 < x) < 90) Print("true");

のように最初に「10 < x」という条件が評価されます。

ここで、xが10より大きければ「10 < x」はtrue(数値としては1)となり、次は
   if(1 < 90) Print("true");

という条件式の評価になります。

また、xが10以下であれば「10 < x」はfalse(数値としては0)となるので、次の条件式は
   if(0 < 90) Print("true");

となります。

このように xの値に関係なく、常に成り立つ条件に置き換わってしまうので、全く条件分岐になっていないのです。

コンパイラには人の気持ちはわかりません。コンパイラにとっては、別に文法が間違っていないので、エラーを出す気持ちにはなれないわけです。

プログラミングをマスターするということは、コンパイラの気持ちがわかるようになる、ということかもしれません。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 13時46分


ページのトップへ ページのトップへ

Sponsor AD

2010/2

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

Excelでヒストグラムの作成

Excelでヒストグラムの作成

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.