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

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

 

著書のご紹介

2010年05月24日(月)

プログラムの字下げスタイル [プログラミング]

ランダムウォークとランダムトレードの記事の続きを書こうかと思ったのですが、プログラムの説明で気になったことがあったので、ちょっと寄り道です。

CやMQL4のプログラムでは、for文で繰り返す部分や、if文で条件分岐する部分を「{ }」で囲ってブロック化し、その中身を字下げ(インデント)して見やすくします。

この字下げのスタイルが色々あるので、ちょっと調べてみました。

参考にしたのはWikipediaのこのページです。

まず、Cのプログラムでよく使われるのが、次のスタイルです。

for(i=0; i<10; i++){
func1();
func2();
}

これは、K&Rスタイルと呼ばれ、ブロック開始の「{ 」はfor文に続けて書き、ブロック終了の「 }」は別の行としてfor文の頭に揃える書き方です。

K&Rというのは、知る人ぞ知るC言語の開発者のカーニハンとリッチーの頭文字を取ったものです。C言語の参考書やサイトでは、たいていこのスタイルで説明してあります。

一方、MT4にサンプルでついてくるMQL4プログラムでは、次のような字下げスタイルでプログラムが書かれています。
for(i=0; i<10; i++)
{
func1();
func2();
}

このスタイルでは、「{ }」はそれぞれ独立した行となり、さらに「{ }」自身が数文字分字下げされます。GNUスタイルと呼ばれているそうです。

ところで、私がブログや書籍などで紹介しているプログラムでは、次のようなスタイルを使っています。
for(i=0; i<10; i++)
{
func1();
func2();
}

これは、GNUスタイルと同じく「{ }」はそれぞれ独立した行になりますが、「{ }」自身の字下げはしません。BSD/オールマンのスタイルと呼ばれているそうです。

最近のMicrosoft Visual Studio中のC++、C#のサンプルプログラムなどでも使われているので、目にすることもあるかと思います。

個人的には、ブロックの範囲が見た目でわかりやすいので、プログラムの解説としてちょうどいいかなと思い、使っています。

以上、3種類のスタイルを紹介しましたが、どういうスタイルを使うかは好みの問題です。

自分流のプログラムのスタイルを身に付けるのも、プログラムの習得において重要な過程だと思います。

Posted at 10時58分 パーマリンク


2010年03月09日(火)

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

if文の条件式の書き方には色々あります。

前回と同じ例を取り上げると、10から20までと80から90までの場合に条件が成立する場合は次のように書けました。

if((x > 10 && x < 20) || (x > 80 && x < 90))

今度は、この条件の否定、つまり、10から20までと80から90までの場合でない場合に何か条件分岐するケースを考えてみます。

このように数値の大小比較だったら、10以下か、20以上80以下か、90以上の場合ということになるので、そのまま
if(x <= 10 || (x >= 20 && x <= 80) || x >= 90)

と書くことができます。

もっと簡単に考えると、10から20までと80から90までの場合でないということで、条件の前に否定を表す「!」という記号をつけてもOKです。但し、否定する条件全体は括弧で囲んでください。
if(!((x > 10 && x < 20) || (x > 80 && x < 90)))

その他にも、各条件を否定して、&&と||を入れ替えるという方法もあります。各条件の否定というのは、x>10の否定ならx<=10という具合に不等号を逆にすることです。すると、
if((x <= 10 || x >= 20) && (x <= 80 || x >= 90))

のように書けます。これはド・モルガンの定理として知られている変形の仕方です。

条件の否定を使うとif文を書き換えることができます。例えば、
if(条件1)
{
 処理1
}
else
{
 処理2
 処理3
 処理4
}

というプログラムがあったとします。ここで条件1を否定すると、
if(!条件1)
{
 処理2
 処理3
 処理4
}
else
{
 処理1
}

と書くことができます。

どちらがいいかはケースバイケースでしょうが、条件式の意味と処理内容を対応させるように書くと、後で見てわかりやすいプログラムになると思います。

人に解読されるとまずいプログラムだと話は別ですが(^^)

Posted at 13時41分 パーマリンク


2010年03月02日(火)

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

CやMQL4でif文を使う際の注意点をもう一つ。

if文で条件が複雑になる場合、基本的には単純な条件を組み合わせることになりますが、そのときに論理和(OR)論理積(AND)の違いに注意しなくてはいけません。

OR は「または」という意味、ANDは「かつ」という意味に置き換えればわかりやすいでしょう。

例えば、xが10から90の間の場合、x>10かつx<90なので、

if(x > 10 && x < 90)

のように「&&」というANDの演算子で条件を結びました。

逆に10以下と90以上の場合に条件が成り立つ場合を考えてみましょう。

日本語だと「何々と何々の場合」というように「」という助詞を使います。

これは英語に直訳すると「and」になるかもしれませんが、論理的には「AND」の意味ではなく、「OR」の意味となります。

なので、
if(x <= 10 && x >= 90)

ではダメで
if(x <= 10 || x >= 90)

と書かなくてはいけません。

こんどは、もうちょっと複雑にして、「10から20までと80から90までの場合」に条件が成立するケースをみてみましょう。

さっきと同じく「10から20まで」の条件と「80から90まで」の条件はOR「||」で結ばれるので次のように書けます。
if(x > 10 && x < 20 || x > 80 && x < 90)

あるいは「||」の前後を入れ替えて
if(x > 80 && x < 90 || x > 10 && x < 20)

と書いてもよさそうです。

Cプログラムの場合、どちらの式でも正しく条件分岐されます。しかし、MQL4では、上の式は正しく条件分岐されますが、下の式はどの場合も成立しません。

なぜでしょう?

これはCとMQL4の仕様の違いがあるからです。

例えば「3+4*5」という式では「4*5=20」を先に計算して「3+20=23」を後から計算します。これを「優先順位」というのですが、論理演算子の場合も優先順位があります。

但し、
Cの場合:&& → || の順
MQL4の場合:|| → && の順

と、逆になっているのです。

なので、Cの場合、
if((x > 80 && x < 90) || (x > 10 && x < 20))

のように && を先に評価するのに対して、MQL4では、
if(x > 80 && (x < 90 || x > 10) && x < 20)

のように || を先に評価するのです。

その結果、80より大きい条件と20より小さい条件を同時に満たすことはあり得ないので、どんな場合でも条件が成り立たないということになるのです。

これは、Cを知っている人からすると、結構な落とし穴です。

MQL4では、複雑な条件式を書く場合、先に評価させたい条件を括弧「()」で囲んでおく方が確実と言えるでしょう。

Posted at 17時24分 パーマリンク


過去の記事へ

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

Sponsor AD

シストレナビモバイル

シストレナビモバイル
ケータイでバーコードを読み取りアクセス(詳細はこちら

プロフィール

豊嶋久道

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

活動状況・Website

ToyolabFX
Toyolab FX-手ぶらで為替取引
FXトレーディング研究所。
FXメタトレーダー入門
FXメタトレーダー入門
最先端システムトレードソフト使いこなし術。
FXメタトレーダー実践プログラミング
FXメタトレーダー実践プログラミング
システム開発過程を段階的に学ぶ。

2017/4

            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 29
30            

PHOTO

ランダムウォークとランダムトレード(6)

ランダムウォークとランダムトレード(6)

カテゴリーリスト

最近の記事

スポンサードリンク

検索


上記の検索結果のRSS情報です RSS1.0

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

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

RSS1.0

[Login]


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