ふむふむ。mql4でstatic_castが存在するかどうかわかりませんが、結果を別のdatetimeに保存しておけば、datetimeに対する通常の算術演算は何でも使えるんでしょうか?例えばX[]がdatetimeの配列で、分数を処理したい場合、YがlongではなくdatetimeであればY=(X[17]+30)/60を取ることができるんですよね?そうですよね?というか、X[17]が29 mod 60でX[16]が30 mod 60だとまずいので、Y=(X[17]-X[16]+30)/60を取るかもしれません、最初のやり方だと2分間隔だと思われますね。
Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?
もうひとつ、ArrayCopySeriesの記述が曖昧なことがすでに問題になっていたんです。ある部分ではarray[] に書き込まれることを示唆していますが、他の部分ではそうでないことを示唆しています。そして目を通すと、通貨データを配列にコピーしないのであれば、この関数の目的が絶対に理解できません。
もうひとつ知りたいことがあります。EAには、init, deinit, startの3つの主要な機能があると書かれています。initは最初に実行されたときに一度だけ実行され、startは新しいtickがあるたびに実行され、deinitについては何も書かれていません。この例 https://book.mql4.com/samples/expert には init がありません。startがあります。これは、Fun_Errorのような、明らかにエラーを処理するための、いくつかの複雑なものを持っています。initはありません。変数についてはどうでしょう。initの中で定義された変数は、それが終了して "start "が実行されたときにも有効なのでしょうか?それとも、両方の変数の外側で宣言すべきですか?startの中で宣言された変数は、startが再び実行されるたびにクリアされますか?その外側で宣言された変数も有効ですか?そうでないといいのですが!どの関数の外側で宣言された変数も、ALTERしていいのかどうかさえよくわかりません。私が見たところ、それらはすべてグローバルな静的変数であるように思えます。
ところで、iTimeのような関数で使う通貨記号はシングルクォートかダブルクォートなのでしょうか。このような小さなことが1000もあります。このような小さなことが千差万別で、そのどれかが原因で、最終的にコンパイルされないことがある。そして、千差万別の小さな偶発的な間違いがあると、デバッグができなくなります。
RaptorUK もちろん、あなたは私を助ける義務はありません。そして、もしあなたの考える楽しい時間が、フォーラムで人々を荒らし、助けを求める フォーラムにいる人々を馬鹿にすることだとしたら、そもそもフォーラムに行く目的は明らかに人々を荒らすことであり、あなたは確かに自分自身を楽しみ、フォーラムユーザーの正しい役割であると信じるものを満たしているのだと思います。私はというと、もし私が答えられる質問に答えることで、誰かを助ける資格があるのなら、仮にそうすることもいとわないでしょう。例えば、統計的に独立しない12個の指標があったとして、それらが統計的に依存しているという事実を補う方法で、それらを最適に組み合わせて複合指標にする方法を知っています。もちろん、私は今、あなたを助けるつもりはありません。もし、あなたが線路に足を取られているのを見たら、「手伝うことはできるけど、私に何の得があるのか」と言うだろう。
FMIC そのドキュメントには、全く意味のないことが書かれています。...
私は高水準言語と低水準言語に精通しているにもかかわらず、この本を最初から最後まで読むのは困難ではありませんでした。
私は45歳で、1986年からソフトウェア開発者として働いており、工学(低電流電子工学)の学士号を取得しています。C、C++、C#、Pascal、Cobol、Fortran、Perl、その他多くの今は無き言語に精通しています。また、x86、Z-80、Pics、その他多くのアーキテクチャのアセンブラプログラミングにも精通しています。繰り返しになりますが、MQL4を読み、学習するのに苦労はしませんでした。
つまり、MQLを学ぶという実際の目標に焦点を当てるのではなく、ドキュメントを批判するというあなたの高邁な態度は、たった一つのことを意味するのみです -実際、あなたはドキュメントが書かれた非プログラマーよりも愚か です。
MetaTraderやMQLが自分には関係ないと思っているのなら、なぜここにいるのでしょうか?マジで!?なぜ?
他にもたくさんのトレーディングアプリケーションや アルゴリズムシステムがあります。どれか一つを選んで、悩んできてください
ところで、"RaptorUK "はこのフォーラムのMODERATORです。あなたこそTROLLです!
このスレッドへの投稿はこれが最後です!あなたは努力する価値がありません。
RaptorUK もちろん、あなたは私を助ける義務はないでしょう。そして、もしあなたの考える楽しい時間が、フォーラムで人々を荒らし、助けを求めるフォーラムにいる人々を馬鹿にすることだとしたら、そもそもフォーラムに行く目的は明らかに人々を荒らすことなのに、あなたは自分自身を楽しみ、フォーラムユーザーの正しい役割と信じるものを果たしていることになりますね。私はというと、もし私が答えられる質問に答えることで、誰かを助ける資格があるのなら、仮にそうすることもいとわないでしょう。例えば、統計的に独立しない12個の指標があったとして、それらが統計的に依存しているという事実を補う方法で、それらを最適に組み合わせて複合指標にする方法を知っています。もちろん、私は今、あなたを助けるつもりはありません。もし、あなたが線路に足を取られているのを見たら、"手伝うことはできるけど、私に何の得があるんだ?"と言うでしょう。
このコメントについて、説明した方がいいのでは?
この掲示板の人たちの厚かましさよ。
このフォーラムでは、多くの人が自由な時間を割いて、助けようとしています。そして、あなたは、まるでそれが権利であるかのように、助けてもらうことを期待している。 私は、あなたがその態度を示すまで、誰もが喜んであなたを助けると思います。
私は、自分がなぜここにいるのか、そして何人かの人は、私が助けようとすることに感謝さえしていることを知っているのです。. . 私は、それがあなたを超えていると思います。
では、icloseで過去の価格を一回ずつダウンロードしなければならないのですか? https://docs.mql4.com/series/iClose 私が思うにその問題点は、ダウンロードしている最中にデータが更新される可能性があることです。ブロックとして全体をダウンロードするのは非常に素晴らしいことです。iTimeで時間をダウンロードし、icloseを使い、同じインデックスで再びiTimeを使い、もし時間が変わっていたら、新しいバー時間間隔が始まっているので、インデックス番号を戻さなければならないのではと思います。私の推論は正しいのでしょうか、それとも何か私が理解していないことがあるのでしょうか?
ArrayCopySeries()という関数は、なぜ自分でシリーズをコピーする必要があるのでしょうか?
配列は宣言されますが、サイズを指定する必要はありません。
配列にアクセスすると、mqlが「魔法」を使って、(うまくいけば)正しい値を正しい位置にポップアウトさせます。
このページには例があります。
とはいえ、オンラインドキュメントは現在同期していませんので、メタエディタのヘルプを主な参考文献としてお使いください。
納得がいくまで例を見つめてください。
datetimeデータ型です。http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx、datetime変数は標準的にはこのドキュメントに書かれているよりもずっと複雑であることがわかります。例えば、MILLISECONDSの情報が入っています。これは、西暦9999年までの任意の年号を指定することができます。しかし、このドキュメントでは、それが異なっていることを示唆していますが、十分な詳細には触れていません。おそらく、C++の標準的なdatetime変数ではなく、MQL4特有のものなのでしょう?1970年初頭からの秒数で、2037年の終わりまで有効です。この時間間隔では、2^31秒近くあることになります。符号なし長整数では1970年から22世紀までしか使えないので、符号あり長整数であることがわかります。符号付き長整数の場合、実際に算術演算に使うことができるのでしょうか?それはわかりません。曖昧なんです。これは文字列のような変数になる可能性がありますが、文字列がどのようなものになり得るかについて、ある種の制約があるだけです。また、いくつかの不完全な使い方が示されています。しかし、そのアクセスや操作の方法については、十分に明示されていません。整数演算でintと一緒に使うだけでいいのでしょうか?サンプルの時間インデックスを読み取る場合、1分チャートから別の1分チャートから1を引くだけで、それらが連続した分であれば、60の差(プラスマイナス1かもしれません)を期待できますか?
単純なことを尋ねるのに、なぜこんなに多くの言葉が必要なのでしょう :)
旧MQL: https://docs.mql4.com/dateandtime datetime型( 1970年1月1日午前0時からの経過秒数を表す整数 )のデータを操作するための関数 群です。
新しいMQL: https://www.mql5.com/en/docs/basis/types/integer/datetime -datetime 型は、 日付と時刻を1970年1月1日からの経過秒数として保存 するためのものです。 この型は8バイトのメモリを占有しています。
時刻を格納するために古い32ビット整数を使用していたほとんどの言語は、2038年が来たときに破滅しないように、64ビットに移行しました。
あなたは、ただ推測のように足し算と引き算をするだけです。しかし、これはdatetimeデータ型 として維持し、long 変数に格納する誘惑を避ける。
。
THANK YOU ydrol!
ふむふむ。mql4でstatic_castが存在するかどうかわかりませんが、結果を別のdatetimeに保存しておけば、datetimeに対する通常の算術演算は何でも使えるんでしょうか?例えばX[]がdatetimeの配列で、分数を処理したい場合、YがlongではなくdatetimeであればY=(X[17]+30)/60を取ることができるんですよね?そうですよね?というか、X[17]が29 mod 60でX[16]が30 mod 60だとまずいので、Y=(X[17]-X[16]+30)/60を取るかもしれません、最初のやり方だと2分間隔だと思われますね。
やれやれ、これまで作ったコードはもうこんなに長くなってしまいました。しかも、データを読み込むだけなのに、データが何分も(あるいは週末ずっと!)飛んでいるのを、データをもっとずらして補間して補正しなければなりません。このトルコがうまくいく確率は、これを書き終えたらどうなんでしょうね、ハハハ。このように、matlabのプログラムから、ようやくスプレッドや手数料に勝てる取引方法が見えてきたのですが、実際に実践するのはまた別の話です。
ydrol 以外の皆さん、OK、それぞれの○○コンテストの勝者と宣言します、おめでとうございます、勝者なので、もうこのスレッドに書き込むのはやめてもいいですよ。
Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?
算術演算の結果がまだ時点である場合(たとえば1970年からの秒数)、それをdatetimeのままにしておきます。(そうでなければ、longまたはintにキャストしてください(そうする必要はありませんが、後で混乱を避けることができます)。
みんなを敵に回すのはよくないので、アプローチを変えるだけで、欲しいヘルプを得ることができます :)
さて、いくつかのコードを書いてみたところ、確かにdatetimeを入力とする演算結果をintsに保存しないようにするのは非常に難しいようです。しかし、static_cast<long>は理論的にはC++と同じように動作するのだろうか?ドキュメントには何も書かれていないようですが。
そういえば、タイムゾーン。UTCなのか?あの本、1970年1月1日0:00からの秒数をひたすら言っているんだけど。UNIX時間のようにUTCだと仮定することもできますが、ここで使われている「datetime」変数とC++が使っているものとの間に少なくともいくつかの食い違いがあること(たとえばミリ秒がない)はすでに立証されています。それとも、すべてのブローカーがそれぞれのタイムゾーンに基づいて独自のオフセットを持ち、データに基づいて週の始まり(10080分モジュロ)がどこにあるかを把握するために、コードにそれを持たせる必要があるのでしょうか?ポイントは、10080分のうち7200分しか市場が開いていないので、取引が始まる時間と終わる時間を知ることです。そうすれば、週末が近づいたときにポジションを縮小することができ、週の初めから全開にしたり、もっと悪いことには、週の終わりと次の週の初めの間の価格の不一致に基づいて大胆な取引決定をしたりすることはありません。あるいは、ボラティリティのような情報を決定する際に、休止を忘れることさえあります。私はこれを1分後の価格の二乗平均変化と定義し、2分後の価格の二乗平均変化の1/4倍、3分後の価格の二乗平均変化の1/9倍、4分後の価格の二乗平均変化の1/16倍を加え、全体を1/(1+1/2+1/3+1/4)=0で割ることにしています。48.
おいおい、何と言うか、私は助けを求めてやってきて、彼らは最初から意地悪く、私に敵対していたのだ。もし誰かが助けを求めてきたら、私がすることは、教えないか、教えてあげるかのどちらかです。もし誰かが質問したときに答えがわからなければ、それに答える代わりに世間話をすることはしませんし、もし質問にきちんと答える時間を取りたくなければ、時間をかけて質問した相手を馬鹿にしたり、役に立たない非回答を与えたりすることもしないのです。地球上に1日以上住んでいれば答えを知っているはずの質問をする人や、その質問が修辞的で、特に特定のグループを侮辱するように作られている場合は、最後の1つに関しても余裕がある。私は要領の良い人間で、倫理的な規範に基づいて行動します。私は、相手が私に意地悪をするまでは、人に礼儀正しく接し、相手が私から嘘や不正行為や盗みをするまでは、人に正直であり、その後、私のデフォルトの市民行動の規範は窓から消えて、私はその代わりに嘘や不正行為や盗みをし、同情や抑制を示すことはないでしょう。単純な世の中の見方かもしれませんが、私は頑固で容赦がないのです。
でも、あなたには、お世話になりました。また、何かお手伝いできることがあれば、お尋ねください。別に、私が手伝えるようなことをあなたが探しているとは思っていませんが。
さて、いくつかのコードを書いてみたところ、確かにdatetimeを入力とする演算結果をintsに保存しないようにするのは非常に難しいようです。しかし、static_cast<long>は理論的にはC++と同じように動作するのだろうか?ドキュメントに記載がないんだけど。
あ、そういえば、タイムゾーン。UTCなんでしょうか?
EDIT:おっと、指摘されているように、datetimeには特定のタイムゾーンはないんですね。どこから取得したかによる。 (これは、最終的にベースとなったUnixTimeとは異なり、不必要に複雑化する原因となっています!)
datetimeのタイムゾーン(1970年からの秒数)は、UTCを基準としています。UnixTimeと同じです。UnixTime - 64 bit unix time です。
UnixTimeはうるう秒(1段落目参照)などを無視するので、モジュロ演算は分や時間に対して有効です。
datetime - datetime = long (seconds duration) - ただし、取引に関する限り、私が想定しているほとんどの場合、それはint型になります!
datetime +/- seconds(long) = datetime(別の日付)
datetime +/- seconds(int) = datetime(別の日付)