記事"MQL5入門: シンプルなExpert Advisorとカスタムインディケーターの書き方"についてのディスカッション - ページ 5

 
Grzegorz Korycki:

これは、人々にmql5を説明する簡単な方法ではありません。(初心者がそれを理解するチャンスがあるような!) プログラミングの本と同じで、90%の人は何から始めたらいいのかわからない。例えばCプログラミングの本を開くと、最初の "簡単な例 "が小さなフォントで丸1ページにわたって書かれている。私のこれまでの人生で、誰にでもプログラミングを教えられるような優れたプログラミングの本は1冊しか読んだことがない。その理由は、おそらく優秀なプログラマーが書いているのだろうが、残念なことにとても下手な教師が書いているからだ。プログラミングは本当に簡単なもので、私は今よりもう少し時間があるときに、MQL4 プログラミング言語の 簡単なチュートリアルを作ってそれを証明するつもりだ。誰にでも-全くの初心者でも。最大の間違いは、言語の詳細を教えることです。彼らの仕事のほとんどは、ctrl+Cとctrl+vで、コマンドはgoogleを使うべきです。私は10以上のプログラミング言語を知っていますが(7歳からプログラミングをしています)、この11kb(!!)の「簡単な例」の説明の仕方にはいまだに恐怖を感じています。この例題からMQL5を学んだ本当のプログラミング初心者はいるのだろうか?もしいたとしても、その人たちは片手の指で数えることができるだろう。

そうでしょうか?私はコーディングの初心者ですが、あなたの言うことは完璧に正しいと言えます。私はコーディングがどのように構成されているかを理解する必要がある。プログラムのレイアウト。初心者に理解させるためのチュートリアルをウェブで探している。それは不可能です。そのようなチュートリアルに私を導くことができるアイデアはありますか?ユーチューブからダウンロードしたビデオはどれも同じです。ありがとうございます。
 

Ibrahim Melssen:
I have copy paste the Expert Advisor and try to test it with Strategytester. But it doesn't make any trades. I am new to MQL5 and programming so maybe I just made a stupid mistake. It compiled without any errors. I'd really like the strategy! Anyone ideas why it doesn't run on strategytester..?

こちらも同じだ。

 
Guin:

mql5プログラミングの 初心者です。


この例で学ぼうとしていたのですが、インジケータの構築の最後のループで少し迷っています。どこでday_n変数に値を代入したのでしょうか?


ループはday_n<day_tを チェックします。プログラムはどうやってday_nの値を知ることができるのでしょうか?



また、どのように計算されているのでしょうか?rate_total = 10で、まだ計算されたバーがないとします。だからprev_calculated = 0


day_t=time[0](TODAY!)/PeriodSeconds...1970年から数え始めるので、10日前から数え始めると仮定する。

だからday_t=10。ここで、dayt>daynかどうかをチェックする。daynは知らないが、dayt=10は知っている。値がないので、daynは0だと仮定する。

するとdaynも10になる。オーケー。

prev_calculated + 1= 1.

dayT=time[1](昨日)/period...10日前からカウントを始める。

しかし、今はdayN < dayTは偽である。それからelse式を実行し始める。わかりました。わかりました。


そしてすべてのbu[]とbd[]を計算する。わかった。ループはprev < total rateが偽のときに終了する。

しかし、新しいバーが来て、それが再び真になったとき、私は再びゼロから始めるのか?それとも10から始まって、そのままelseの部分に行くのでしょうか?


ありがとうございます!

2つの部分に分ける必要があります:

1 チャートに初めてインジケータが適用された時:prev_calculated =0 , i = 0, i = rates_totalがループから抜けるまでi++(time[0]は現在ではなく過去のものです。)

2 新しいバーを開始:prev_calculated は rates_total より小さいので、条件は真となり、ループはその新しいバーのみで実行される。

 

こんにちは、@Guin です、

あなたの質問にはまだ正しく答えられていないと思います。例のコードを使用した場合、おそらく意味のない、チャート上で見えないインジケーターが出来上がってしまうでしょう。それは、コードがこのブロックを通らないからです:

if(day_n < day_t){
        day_n = day_t;
        h_day = high[i];
        l_day = low[i]
}

なぜなら、day_n は手動でデフォルト値に設定されておらず、day_n < day_t の比較は常に false になるからです。デバッガーによると、明示的に設定されていないときのday_nの値は「2076449103」である。

day_nの定義を次のように変更してください:

int day_n = 0, day_t;


お役に立てれば幸いです。


Guin:

私はmql5プログラミングの 初心者です。


この例で学ぼうとしていたのですが、インジケータの構築の最後のループで少し迷っています。どこでday_n変数に値を代入したのでしょうか?


ループはday_n<day_tを チェックするからだ。プログラムはどうやってday_nの値を知ることができるのでしょうか?

削除済み  

素晴らしい記事だ、

共有してくれてありがとう