MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1144

 
Valeriy Yastremskiy:

それはわかるのですが、mql5は残念ながらわかりにくいです。私もfxsaberさんと同じで、4が使いやすく、最適化などには5を使うべきだと思います。一般論として、OOPの練習をせずにmql5をマスターした人がいれば教えてほしいのですが。もちろん、C++ 4以降は関係ありません、私の勘違いかもしれませんが。

この2つの言語は全く同じものです。それ以上でも以下でもない。そして、(誰もが怖いと思っている)OOPはどちらも 全く同じです。 知らなかったんですか?インターネットで怖い話を読んだり、YouTubeで「善と賢と永遠を蒔く」ブロガーを見たりしたことはありませんか?MQL5から人々を遠ざけようと、巧妙にナンセンスなことを言う人たち。

残念ながら、どちらの言語も全く同じです。わかりやすさでも、OOPの特徴や存在感でも。
しかし、MQL5にはもっと多くの可能性があります。

 
Alexey Viktorov:

そこでスペイン人を送り込んだのだが......まあ、怖がらせてやれ。指標にしてあげてください - 時間がない。英語で書かれています。何かあれば説明します。でも...そのうちわかるよ。

 
Alexey Viktorov:

アルテムの答えは覚えていないし、検索する気もない。彼の記事にあるコードはすべて、mql5とmql4については、多端子か2バージョンです。これらのバージョンをmql4で確認したところ、すべて正常に動作しました。

たしかに、これらの記事は難解ですが、私より年上でなければ、その価値はあります。そして私は、プログラマーとしては卑猥なほど年をとっている。

もう1つのバリエーションはよりシンプルですが、速度がかなり低下します。オーダーチケットを配列に書き出し、この配列でオーダーを選択し、オーダー終了時刻を確認します。ゼロより大きい場合は、注文が終了したことを意味する。クローズドオーダーのコメントに "sl "が含まれている場合、そのオーダーがストップでクローズされたことを意味します。注文が終了した場合は、配列から削除される。または、配列が完了した後、残りの未決済注文で補充されます。イマジネーションは全般的に飛んでいます。

どのオプションを選ぶかは、あなた次第です。そして、コバレフの教科書に関する私の投稿をいくつか読んでみてください。int start()を書くことを提案しているのは教科書で、更新されたmql4ではvoid OnTick()を要求しています。

インジケーターやスクリプトについては、ドキュメントを参照してください。ところで、アップデートされたmql4では、Sergeyがこのチュートリアルを書いたときよりもずっと簡単にインジケータを書くことができるようになったんだ。

ありがとうございました。あなたの情報は私にとってとても貴重なものでした。特にstart()関数について。

 
Alexey Viktorov:

アルテムの答えは覚えていないし、探しもしない、彼が答えたかもしれないことを推測することはできる.

これが私の答えです。やるべきことを明確に示しながら。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。

アルチョム・トリシキン さん 2020.04.28 08:22

これは簡単に説明すると、注文や ポジションの数を監視し、以前の状態と比較する必要があるのです。前のティックで12ポジション、現在のティックで8ポジションであれば、4ポジションの変化があります。従って、最後の4つ(終値で)のポジションを取り上げ、何が起こったのかを理解する必要があります。

でも、「奇跡」が書かれた添付のコードを見れば、言葉で説明する必要はないでしょう。しかし、それは助けるためにあるのであって、ために・のために書くのではありません。


 
ANDREY:

ありがとうございました。あなたの情報は私にとってとても貴重なものでした。特にstart()関数について

良い点は、必要なもの、EA、スクリプト、インジケータをエディタで作成し、エディタが適切なフィールドでテンプレートを作成することです。
 
Artyom Trishkin:

そして、あなたのコードは、厳密に指定された時間にそれぞれ2つの売りポジションを開き、それが許可されたときに最後のポジションを開いた時間を表示するということ以外に何をするのでしょうか?すべてです。コードの動作の "驚異 "につながることができる初期化されていない変数、および非常に、非常に古いstart()ハンドラを使用して、クモの巣の年と埃っぽい棚から引き出された、市場で(いつかあなたが何かを販売したい)古代のハンドラでバリデータを見逃すことはありません - それは間違ったプログラムの種類と言うだろう。

ご意見ありがとうございました。GBP/USDのペアをテストしたとき、価格の動きに1つのパターンを見つけました。このパターンは、小さな修正と同様に小さなドローダウンで、バランスチャートは、2008年以来、現在の瞬間まで、常に上向きにリードしています。やはり、バランスチャートの修正やドローダウンは大きくはないですが、数ヶ月続くこともあります。
私はこのパターンのさまざまなバリエーションをテストし始め、そのために最適化に頼ったのです。しかし、結果的には、複数のパラメータを一度に使って最適化すると、膨大な時間がかかることがわかりました。私の場合、1年ぐらいかかりました。遺伝的アルゴリズムなんて、私には似合わない。
そこで、きちんと定式化されたコードとPront()関数、Excelの表を使えば、テストや最適化がより速く行えるという考えにたどり着きました。

以下のコードは、そのようなコードを書くための試みに過ぎません。このコードをさらに改良していきます。しかし、解決するための知識が不足している問題に遭遇しました。
私や私のコードをあまりシビアに判断しないでください...。私は、コーディングの基本を理解し始めたばかりの初心者です。しかし、私は批判を冷静に受け止め、特に建設的な批判に対しては悪びれることなく......です。

よろしくお願いします。

int s1,Mn,a,CH;
double Hay,Lou=Bid,Nm_PL[700]={0},PrS,DL=0.0030,X;
int start()
{
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
////******************************************************************
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (X!=OrderTicket( ))
{
Mn=OrderMagicNumber();CH=TimeHour(OrderOpenTime());PrS=OrderProfit( );Nm_PL[CH+Mn*24]=Nm_PL[CH+Mn*24]+PrS;
Print("----------------- ПРОФИТ-----------------------=",CH,"    Ном орд.(1-26)   ",Mn," ТП    ",PrS," ФИН.РЕЗУЛЬТ.   ",Nm_PL[CH+Mn*24]," НОМ. ИНДЕКСА   ",Mn*24);X=OrderTicket();
}
////******************************************************************
if (Bid < Lou)
{
Lou=Bid;
}
//=======================
if (Bid > Hay)
{
Hay=Bid;
}
////=======================
if (Bid - Lou > DL&& Lou!=0)
{
for(int c=0; c<=500;c+=20) 
{
a++;
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+0.0030+c*Point,Ask-0.0010-c*Point,"300",a );
}
Lou=Bid;
Hay=Bid;
a=0;
s1=0;
}
return(0);
}

複数の注文が同じティックにストップまたはテイクで閉じられた場合、プログラムはこのティックで最後の注文が閉じられた後にのみPrint()を表示します。各注文が終了した後、Print()が必要です。どうすれば実現できるのかわからない。しかし、必要なコードを見れば、すぐに理解し、記憶することができるのです。

以下は、私の問題の例です。


Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • www.mql5.com
Введение Генетический алгоритм (ГА) относится к эвристическим алгоритмам (ЭА), который даёт приемлемое решение задачи в большинстве практически значимых случаев, однако при этом правильность решения математически не доказана и применяют чаще всего для задач, аналитическое решение которых весьма затруднительно или вовсе невозможно. Классическим...
 
Valeriy Yastremskiy:
必要なもの、EA、スクリプト、インジケータをエディタで作成すると、エディタが適切なフィールドを持つテンプレートを作成してくれるのが良い点です。

STARTではなくNEW FUNCTIONというのが正しい認識です。しかし、あまり気にせず、従来通りSTARTをテストに使用しました。
MQL4の最新アップデートの詳細がどこに書いてあるのかわからないのですが。コバレフさんの本は、すべての情報が論理的に構成されており、理解しやすいのでとても気に入っています。そして、必要なことはすべて理解できるように、詳細に記述されています。なぜ、MQL5で同じ教科書を書かないのか不思議です。

 
Artyom Trishkin:

全く同じ言語が2つ。それ以上でも以下でもない。そして、(誰もが怖いと思っている)OOPはどちらも 全く同じです。 知らなかったんですか?インターネットで怖い話を読んだり、YouTubeで「善と賢と永遠を蒔く」ブロガーを見たりしたことはありませんか?MQL5から人々を遠ざけようと、巧妙にナンセンスなことを言う人たち。

残念ながら、どちらの言語も全く同じです。わかりやすさでも、OOPの特徴や存在感でも。
しかし、MQL5にはもっと多くの可能性があります。

はい一般的に私は同意し、4KAでOOP喜んで))が、私の経験の教科書で初心者のアクセスでコバレフ、4KAと5KAとOOPに理解できないミシンにZhdan。どう理解したらいいのかわからない。何度カプセル化を繰り返しても、ポリフォミズムの理解は得られない。そして、どの記事を先に読めばいいのか理解していない。そして、どこで何を探せばいいのか。そのため、これまでontikのコードベースでは、開始関数からの終了が見つかっています )))))
 
ANDREY:

そうです、STARTではなく、新機能というのが正しいフィールドだと気づきました。でも、あまり気にしていなかったので、これまで通りSTARTをテストに使いました。
MQL4の最新アップデートの詳細がどこに書いてあるのかわからないのですが。コバレフさんの本は、すべての情報が論理的に構成されており、理解しやすいのでとても気に入っています。そして、必要なことはすべて理解できるように、詳細に記述されています。なぜ、MQL5で同じ教科書を書かないのか不思議です。

Alexey Viktorovが 言ったように、mql5がmql4と異なるのはOrderSend()とその他の関数だけで、私は覚えて いません。もう一つの重要な違いは、インジケータ・バッファのインデックス付けの方向ですただし、すぐに解決できますが、新機能に慣れることが先決です。しかし、指標となる数値の取得は変わりません。
初心者向けのOOPの記事が役に立った。編集者の協力も
 
ANDREY:

ご参加ありがとうございました。

...

以下のコードは、そのようなコードを書くための試みに過ぎません。今後、このコードを改良していく予定です。しかし、解決するための知識が不足している問題に遭遇しました。
私や私のコードをあまりシビアに判断しないでください...。私は、コーディングの基本を理解し始めたばかりの初心者です。しかし、私は批判を冷静に受け止め、特に建設的な批判に対しては悪びれることなく......です。

よろしくお願いします。

2つ以上の注文が同じティックにストップまたはテイクで閉じられた場合、プログラムは最後の注文がこのティックで閉じられた後にのみPrint()を表示します。各注文が終了した後、Print()が必要です。どうすれば実現できるのかわからない。しかし、必要なコードを見れば、すぐに理解し、記憶することができるのです。

以下は、私の問題の例です。


すでにお返事させていただいております。

言葉で説明すると、注文と ポジションの数を監視して、前の状態と比較する必要があります。前のティックで12ポジション、現在のティックで8ポジションだった場合、4ポジションの変化があります。従って、直近の4つの(終値による)ポジションがどうなったかを確認する必要があります。

リストの最後の順番を取るのです。

int Ht = OrdersHistoryTotal();
////******************************************************************
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

そして、まずオーダーリストの状態がどの程度変化したかを調べる必要があります。以前は12個だったのが8個になり、これは4個分のオーダー変更です。したがって、4つの注文をすべて印刷する必要があります。そして、常にリストの中で最も新しいオーダーだけを印刷するのです。

どのように変化したかを知るには?EAを実行する際に、注文数を変数、例えばint last_totalに書き込む必要があるのです。そして、各ティックで、OrdersTotal() と last_total を比較します。もし、同等でないなら、それは変化である。OrdersTotal()とlast_totalの差分を変数、例えばnum_changesに書き込み、OrdersTotal()の新しい状態をlast_totalに保存します。
ここでは、例えば、保留中の注文がトリガーされた場合など、微妙な点があるかもしれません。でも今は、まずやるべきことをやってください。
保留中の注文の数を知ることで、履歴で調べることができます。ただし、履歴リストの注文の監視を制限することもできます。上記のすべてを履歴注文のリストに対して行い、成行注文のリストに対しては行わないようにします。あったものとなったものとの差、これが分析すべき注文量です。常にリストの最後の順番だけを分析するのです。

ただし、履歴リストの最後の注文が、最後に締め切られた注文であることを保証するものではありません。というニュアンスも考慮しなければならない。しかし、その後。