●FXでバフェット流・キャピタルゲインを求めて●
FXで自動売買をしています。MetaTrader4にて資金を運用中
<<MT4 マウスクリックで発注・注文変更プログラム | ホーム | アウトプットのためにインプットの時間~近況報告>>
while無限ループ ~ リアルでは動いてもバックテストできない話。 MetaTrader4プログラミング
しばらく前に、MSのSkyDriveをおそわりました。URL
使ってみるとすごく便利です。ありがとうございます。
アップロードするに300MBまで可能。
条件によっては無料で25GB保存可能なので、便利です。
アップローダーとして使って知人にデータを渡すには便利です。
ところで、類似サービスとしてgoogleも同様のgoogledriveを始めたようです。
URLそれをするに関係でgoogle+の登録を試してみました。
googleでもsaru999は同名で数年使っているので、まずはsaru999でやりました。
結果は、だめでした。数字や特殊文字は不可です。
当て字を探して、猿休休休= saru 9 9 9 ですが、これも駄目。
そして、猿 休 =saru 9 は、いったん通りまして喜んでいたのですが、翌日メールが来ました。
内容は「4 日以内に名前を編集しないとプロフィールは停止する」という話。
こんどは、猿算休=saru+3*9として再提出。さてどうなるのだろうか。..
うまく審査が通ってくれるといいのですが。..
来週開けに答えは出るみたいですが。。。
駄目ならば、googledriveでの共有や、サークルなど、一部使えない機能がでるそうです。
まるで、外国人が日本に帰化するときに、日本の漢字を当て字にして悩むのを連想してしましました。
漢字は、音や意味や文字数など、選ぶとなるとなかなか難しいです。
一方、こういう経験はあまりないことなのでおもしろかったりする部分もあったりします。
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
話は変わります。
MetaTaderでEAを書いていて出会ったデバッグの話の記事です。
・・・・・
プログラムが正常稼働しないバグには段階があります。
aコンパイルエラー
bエラーコード。 コンパイルは通っている。
c思い通りに動かない。プログラム自体は正常稼働。
dバックテストとリアルトレードで異なる動きをする
となっています。
制作者側からみて、簡単な順序で並べると
a<b<c<d
です。
もっとも難しいのは、dです。
プログラム修正前に、同じバグを発生させること事態が難しかったりします。
dでは、リアルトレードの特定の通信障害で起こる不具合などあります。。。
さて、今回はd類似の分野の話です。
バックテストとリアルトレードで共同が異なる話。
今回は、バックテストで不具合がでて、リアルトレードではうごいてしまうプログラムです。
・・・・・
まず基本知識から始めます。
プログラムとしては、while文の話。
while文はループの命令文です。
条件式が成り立ったらループを抜け出すと書くわけです。
無限ループにすると思い通りの動きにならないのでそれ避けるわけです。
ということで、、、
今回使用のEAファイルのダウンロードはこちらURLから。
・・・・・
ループを抜ける命令文は以下の3つがあります。
return
break
continue
###
Quiz 1
ここでクイズです。
3つプログラムA,B,Cのうちで動かないものは?
(画像)

###
Ans1 (A B C)
とあって、for文と違いwhile(true)では回数制限がないので、returnとbreakは予定通り動きますが、continue文は無限ループになってだめですね。
・・・・・
で、こんどは
今回であったバグはreturnとbreakでも無限ループになる話。
さきほどうまくいった、if(条件式)return(0);でも無限ループになる訳です。
正確には、バックテストでは無限ループになってダメ。リアルトレードでは無限ループにならないのでOK。ということ。
おもしろいのは、バックテストとリアルで異なる動作をする点ですね。
###
Quiz2 (D E)
正常稼働と、うまくバックテストでうごかないものは?

Ans2
Dが正常稼働で、Eがうまく動きませんね。
Eのうまく動かないほうでも、リアルではうまく動くんです ^^;
解説は記事の末で。。。
・・・・・
最後です。
###
Quiz3 (F G)
正常稼働と、うまくバックテストでうごかないものは?

Ans3
Fがバックテストで正常稼働しません。これもFはリアル口座では正常稼働するんです ^^;
Gは正常稼働です。
解説
MetaTrader4は、tickが動くごとにstart()関数が計算されるわけです。違う見方ではreturn(0);文によってstart()に帰ってこないといけないんです。バックテストで正常稼働しなかったE・Fは,while文のループを抜け出すif(条件式)の条件文に問題があります。ここに、BarsやBidというロウソク足が進まないと変化しないものが書き込まれています。最初の1回に引っかかるとwhile文が無限ループに入るために正常稼働しないんです。
では、リアルでなぜ動くのかというと、リアルでは時間が過ぎると自動的にチャートのロウソク足は増えて、Bidは変化します。while文から抜け出すことができるんです。
バックテストできないと、EA製作上は非常に不便です。
よって、whileループを抜け出す条件式に、BarsやBidはつかわないほうがいい。
という話でした。
<<MT4 マウスクリックで発注・注文変更プログラム | ホーム | アウトプットのためにインプットの時間~近況報告>>
コメント
No title
コメント返し
「猿産休」 考えてみます♪
ネーミングの産みの苦しみですねw
No title
僕も、昔から使ってたアカウントで登録したら、はじかれました。
コメント返し
はじかれましたか。..
実名登録ですね。たしかに、猿休って実名の人いないですよねw
こんばんは
ちんぷんかんぷんです・・・・・
Google+ 登録できたのか・・・できてないのか・・・
イマイチよくわからないままです・・・・
No title
今回の記事の内容は、難しかったです。
まだまだ、お休みしています^^;
No title
私はPC苦手でトレードだけです。
PC使いこなせる方は素晴らしいです。
今週も宜しくお願いします。^^
コメント返し
>何度読んでも
何度も読んでくれてありがとうございます^^
>Google+ 登録できたのか
たぶん正常に出来ているでしょうね。
なぜならば、うまくいかないときはGoogleから警告メールが来ます。
私にはそれが来ましたので経験談です(恥
窮鼠さんへ
while文ってあまりつかわないのでわかりにくいですよね。
あるEAで「含み益になったらOCO」と書くときに、この文体を書いていて気がついた話です。
単なるOCO注文と、含み益OCOって書き方が違うんですよね。
mocoさんへ
PC分野って広いですよね。私もMT4はわかりますが、一般のPCはよくわからなかったりします(汗
こちらこそ今週もお願いします。
No title
今度の仕事でよく使う単語なのにw
コメントが返し
うまく動かないのがプログラムのバグ。
それを動くように、バグを取るのがデバッグです。
No title
自分でやったことのない人は、ティックとstart()の関係で既に?マークでしょう。
No title
プログラミング??FX??って人なので。w
旨いラーメンが作れるシステムをsaruさんにお願いしようかな。w
コメント返し
たしかに2人でPC並べて話した方が早いですね。
最近はプログラム初心者へは動画解説をつくって送っています。
この後はTeamViewerを使用するか思案中です。
伊達猫さんへ
うまいラーメンのつくりかたですか?
それは伊達猫さんに教わりたいです ^^
コメントの投稿
トラックバック
この記事にトラックバックする(FC2ブログユーザー) URL
| ホーム |