私は完全に迷子になった

 

私はあなたが言うところの「EA」を作りたいのです。あなたがそれを略語として使い続けるのはおかしいですが、私に関する限り、それは「進化的アルゴリズム」の略で、まさに私のメソッドが実際にそうであることを示しています。もしそれが機能するならそれはそうだ、スプレッドが十分低ければな。それはフェンスの上だ

とにかく、プログラミングの経験があります。そして、それを見た限りでは、MQL4はC++とほとんど同じに見えます。でも、肝心なところが抜けているんです。変数や定数、その他いろいろなことは既に知っていますが、作業するための基本的なテンプレートのようなものが必要で、いくつかの概念的なことが少し欠けています。どなたか、単純でありながら私が必要とするすべての要素を備えたお粗末な例のトレーディングロボットプログラムを投稿して、その各部分が何をするのかを説明し、私が「ああ、これが私が必要とすることを行う方法だ」と言えるようにしていただけませんか?

基本的に、私のプログラムは私のコンピュータのRAMに次のものをダウンロードできるようにしたい(通貨取引プラットフォームを通じてコンピュータにデータをダウンロードする)。

高値、安値、始値、終値(スプレッドの値が異なるため)、プログラム内で指定した時間増分(これが可能であれば)、最新のものを含め、完了次第(1分ごと、5分ごと、10分ごと、などなど。10分ごとなら、0から10分までカウントするティックごとに更新される変数があり、10分になったらまたデータを更新します)。また、清算時の口座総額のダウンロード、ポジションの総数や サイズ、ポジションの種類(例えばUSD/JPYは10000または100000DOLLARSの円相当、EUR/USDは10000または100000EUROSのドル相当、しかし私の口座価値はドル建てとなるため、ポジションの可変ロットを決定できるようにしたい)など。現在の買い値と売り値から、プログラムはもちろん単純に一方を他方から引いて、スプレッドの現在値を得ることができます。

次に、プログラムが以下のアクションを実行できるようにしたいと思います(通貨取引プラットフォームを通じて私のコンピュータからデータをアップロードします)。

成行注文や指値注文で売買する。また、指値注文をした場合ですが、通った時の価格は、入れた指値が出ることが期待できるのか、それとももっと良いのか、教えてください。例えば、EUR/USDの買いの価格が1.3500で、1.3501で買う指値注文を出したとすると、1.3501と1.3500のどちらを支払うのでしょうか?そこでブローカーに騙されると思ったほうがいいのでしょうか?それとも、注文がシステムに入るまでに価格が1.3502以上であれば、成行注文を出すのと機能的に同じなのでしょうか?

最後に、サンプルプログラムは、他の関数への関数コールを含むようにしたいのですが。もし、MQL4のように値渡し、参照渡しの両方が可能であれば、サンプルプログラムにそれぞれの例(何をしているかがわかるようにコメントされているもの)を入れてください。

また、一般的にC++のように複数の実際のファイル(拡張子はmql4?)を含むのか、それとも一般的に1つのmql4ファイルだけなのか、取引プラットフォームによってコンパイルされるのか、それともコンパイラが必要で、取引プラットフォームはコンパイラが生成するマシンコードなどを使用するのか、教えて下さい。

もし誰かがこれをやってくれたら、これらの要素をすべて含んだダミープログラムを作るだけで、私にとって非常に有益なだけでなく、他の人にとっても有益になると想像します。どなたかやってくださる方、よろしくお願いします。

 
さらに、0から始まって10分(またはあなたが使うどんな時間でも)までのカウントアップをする変数については、正規化されるべきです - 時間単位で割って - 0と1の間で変化する2倍であるように。そうすれば、5分チャート、10分チャート、1分チャートに適用できるかもしれませんが、時間単位が何であれ、この変数は常に0と1の間で変化します。
 
mql4について知るべきことをすべてインスタンスで教えてくれるようなプログラムはありません。あなたはすでにプログラミングをある程度しているので、例えばeaのコードベースを見て いくことをお勧めします。もし、コードを見て学ぶのが好きではなく、言語の説明を見て学びたいのであれば、mql4_bookを チェックしてみてください。また、簡単に参照できるドキュメントも あります。
 
誰かが書いてくれないかと頼んでいたのです。もしあなたが言語の基本的なフォーマットを知っていれば、5分ほどで、私の投稿を読むのにかかったのと同じくらいの時間がかかるはずです。プログラムを書いて、それぞれの例をタイプアップして、それをアップするだけです。mql4の本を見ると、変数とは何かという説明から、関数についての私の知識を前提にした話まで、まっすぐ進んでいて、私が必要とするものよりずっと単純なものから、私が理解できる以上のものへと移行するポイントを探そうとすると眠くなってしまうんです。誰かが私のために「経済アドバイザー」を書いてくれることを望んでいるわけではありません。ただ、私が使いたいと思うようなあらゆる命令が書かれているバカげたものなのです。私が使いたいと思うあらゆる情報と、私が入力したいと思うあらゆる命令を、私のコンピューターの変数にダウンロードするようなものだ。今考えてみると、売買指値や 成行注文だけでなく、存在する注文をキャンセルするものも欲しい。結局、実行されなかった場合に、はぐれた指値注文を放置して、プログラムがそれらを忘れてしまうのは困る。
 
zortharg: 私は、誰かが書いてくれるかどうかを尋ねていたのです。もしあなたが言語の基本的なフォーマットを知っているなら、5分くらいで書けると思います。プログラムを書いて、それぞれの例をタイプアップして、それを貼るだけです。mql4の本を見ると、変数とは何かという説明から、関数についての私の知識を前提にした話まで、まっすぐ進んでいて、私が必要とするものよりずっと単純なものから、私が理解できる以上のものへと移行するポイントを探そうとすると眠くなってしまうんです。誰かが私のために「経済アドバイザー」を書いてくれることを望んでいるわけではありません。ただ、私が使いたいと思うようなあらゆる命令が書かれているバカげたものなのです。私が使いたいと思うあらゆる情報と、私が入力したいと思うあらゆる命令を、私のコンピューターの変数にダウンロードするようなものだ。今考えてみると、売買指値や成行注文だけでなく、存在する注文をキャンセルするものも欲しい。結局、実行されなかった場合に、はぐれた指値注文を放置して、プログラムがそれらを忘れてしまうのは困る。

あなたは間違った場所に来ていると思います。

このフォーラムでは、他の人のためにコードを書くことはありません。

私たちは、あなたが自分でコードを書くことを期待しています。

もしあなたが行き詰まったら、私たちは正しい方向を指し示します。

もし誰かがあなたのためにコードを書いてくれることを望むなら、ここに行って ください。

彼らはmql4とmql5をやっています。

 
zortharg:

[...]

さて、数日後に迫ったMT4のメジャーアップデートの話から一転して。


EAを作りたいんです。でも、あなたがそれを略語として使い続けるのはおかしいですけどね。

あなたのバックグラウンドによります。良くも悪くも、現在MT4とMQL4は世界のリテールFX市場をほぼ独占しており、「EA」という言葉は最低でも数十万人の人にとって意味があるのだと思います。


そして、私が見た限りでは、MQL4はC++とほとんど同じように見えます。

MQL4言語には事実上2つのバージョンが存在します。過去9年間存在したものはクラスやオブジェクトを持たず、したがってC++というよりCに近いものです。一方、ポインタや明示的なメモリ割り当てがありません。

来週月曜日にリリースされるMT4とMQL4の新バージョンでは、クラスが追加されましたが、ここでも明示的なメモリ割り当てや管理はありません。C++に近いのか、それともJavascriptに似ているが、ダックタイピングやラムダ関数などが ないのか、議論の余地があります。


基本的には、私のプログラムは私のコンピュータのRAMに次のようなものをダウンロードできるようにしたいのです[...]。

簡単に言うと、プラットフォームはあなたのためにこれを自動的に行い、あなたはその標準的な動作をオーバーライドする簡単な手段を持っていません。外部の価格データをダウンロードし、それをMQL4で操作することは、特に新しい拡張バージョンではなく、従来のMQL4では、あまり良いことではありません。

MQL4では、現在の価格と、プラットフォームが対応しているすべての時間枠の過去の価格を簡単に操作することができます。M1、M5、M15などですが、M3、H2などではありません。


買いと売りの価格の高値、安値、始値、終値のデータ(スプレッドの値が変化するため)

スプレッドは確かに変化しますが、MT4プラットフォームの魅力的な特質の1つは、過去の買値しか提供しないことです。(現在の価格と現在のスプレッドは当然利用可能です)。


また、清算時の口座の総価値[...]、ポジションの総数とサイズ[...]をダウンロードしたいのですが、私の口座の値はドル建てになります。

事実上、プラットフォームは常にこのデータをストリームしています。明示的に「ダウンロード」することはありません。例えば、MQL4コードは常にAccountEquity()関数を介して口座の現在の純資産にアクセスすることができます。オープンポジションは自動的に入金通貨で報告されます。


例えば、EUR/USDの買い価格が1.3500で、1.3501で買う指値注文をしていたとすると、1.3501と1.3500のどちらを支払うのでしょうか?

ブローカーに依存しますが、全体として、プラットフォーム/ブローカーは、単に現在のBBO以上での指値注文を受け付けないだけです。この例外はすぐには思いつきません。


C++のように複数の実際のファイル(拡張子はmql4?)を含む場合、または単一のmql4ファイルを含む場合。

大まかに言えば、プロジェクトは1つの.mq4ファイルだけで構成されますが、複数の#included .mqhファイルが存在することができます。したがって、共通のコードライブラリを持ち、プロジェクト間でそれらを再利用することができます。ただし、複数の.mq4ファイルが存在する場合は、同じプロジェクトの一部として一緒にコンパイルすることはできません。MQL4の起源はC言語ですが、典型的な大規模プロジェクトでは、1つの.mq4ファイルと1つまたは複数の様々な種類のライブラリ(プリコンパイルまたは#included)が存在します。


そして、トレーディング・プラットフォームは、コンパイラによって生成されたマシン・コードなどを使用します。

コンパイラは、マシンコードではなく、バイトコード/pコード/何でも-あなたが呼びたいもの-を生成します。.mq4ファイルを明示的にコンパイルすることもできますし、ソフトウェアの必要なフォルダに置いておけば、次回起動時に自動的にコンパイルされて使用できるようになります。


もし誰かが、これらの要素をすべて含んだダミープログラムを作ってくれたら、私にとって非常に便利なだけでなく、他の人にとっても便利なものになると思うのですが......。

時間がない。このフォーラムのみんなは、9年ぶりのMQL4の重要なアップデートについて議論するのに忙しすぎるのです。

 
zortharg: 誰か書いてくれないかなぁと。
選択肢は3つだけです。検索して 探すか、コーディングを学ぶか、誰かにお金を 払うか。私たちは、あなたのためにコードを書くつもりはありません。私たちは、あなたの 試行錯誤(SRCを 使用)と問題の性質を投稿していただければ、喜んで手助けをします。
 

私は誰かに商業的価値のあるものを作ってくれと頼んだわけではありません。WHRoederさん、私は誰かに「私のために私のメソッドをコード化してくれ」と頼んでいるのではありません。私はただ、出発点が必要なのです。あなたが「検索」の下に置いたリンクから何かを見つけ出すことができるかもしれませんが、私は本当に「これが必要なものです」という骨が折れるようなものが欲しいのです。プログラムが実際にどのようなものであるべきかがわからない。何が厳密に必要なのかがわからない。何の参考にもならないままいきなり自分でやろうとしても、何が足りないのかもわからないから、コンパイラエラーが出るだけだ。また、うまくいくはずのものを作っても、初期化を間違えて、ちゃんとやったかどうかもわからなくなる。よし、こんなのはどうだろう。簡単な例で。実生活でやったら損をするようなもの:daringness*(あなたの口座の価値)*(現在の価格と1時間前の価格の差)/Xであるポジションを維持するエキスパートアドバイザー、Xは1から始まるが時間単位ごとにXはX=.9*X+.1*(現在の価格-1時間前の価格)^2なるように更新、daringnessはユーザー指定パラメータである。また、売買の数を決定するために、すでに所有しているポジションの数も決定しなければならない。というわけで、ただの馬鹿なプログラムですが、私が出発点として作業するために必要な要素がほぼすべて含まれています。

gchrmt4 ありがとうございます。あなたは私の質問の多くに答えてくれました。しかし、あなたが言うとき "あなたは簡単にプラットフォームが対応しているすべての時間枠の歴史的な価格を操作することができます"、私はそれを行うにはどうすればよいですか?AccountEquity()のような、ある時間の価格を返す関数が あり、それに時間単位を与え、open low high closeとどんなタイプの時間単位を使うかを指定するのでしょうか?時間単位の種類は、それを適用するチャートの種類によって決まるのでしょうか?つまり、1分足のチャートに適用すると、1時間単位前は1分前を指しますが、5分足のチャートに適用すると、1時間単位前は5分前を指します。それとも、時間単位はチャートに適用されるのではなく、プログラム自体にハードコーディングされているのでしょうか?また、現在のスプレッドは、どのようにアクセスするのでしょうか?これらは「ストリーミング」で簡単にアクセスできると言いますが、どのようにアクセスするのでしょうか?

よろしくお願いします。

 
zortharg:
AccountEquity()のように、ある時刻の価格を返す関数で、時間単位を前にして、open, low, high, closeのいずれかを指定し、どのような時間単位を使用するかを指定するものはありますか?時間単位の種類は、それを適用するチャートの種類によって決まるのでしょうか?つまり、1分足のチャートに適用すると、1時間単位前は1分前を指しますが、5分足のチャートに適用すると、1時間単位前は5分前を指します。それとも、時間単位はチャートに適用されるのではなく、プログラム自体にハードコーディングされているのでしょうか?また、現在のスプレッドは、どのようにアクセスするのでしょうか?これらは「ストリーミング」で簡単にアクセスできると言いますが、どのようにアクセスするのでしょうか?

何卒よろしくお願いいたします。

時系列関数の 全ファミリーがあります。例えば、iHigh("USDJPY", PERIOD_H1, 2) は、USDJPY H1 bar の 2 bar 戻る(現在進行中の bar は #0 )ときの高値を表示します。時間をバーインデックスに変換する関数があります。

現在のスプレッドは、いくつかの方法で利用可能です。最も単純なのはAsk-Bidです(コードが実行されているチャートのシンボルのスプレッドが表示されます)。現在のチャートと異なるシンボルのスプレッドは、別のルートで入手でき、MarketInfo("symbol", MODE_ASK) - MarketInfo("symbol", MODE_BID) や MarketInfo("symbol", MODE_SPREAD) などの別の用語で表現されます。

 

zortharg

ドキュメントと呼ばれるものはここにあります (一部非推奨): docs.mql4.com/

そしてこちら(近日公開、一部非推奨): mql5.com/ja/docs


そこには、あなたが今まで知りたかったことすべてがあります。また、ターミナル自体に例があります。スクリプト、エキスパートアドバイザー、インジケータの例です。また、DLLをインポートして、MQLを超えるようなことを実現することもできます。

そこから取得できれば準備は完了ですが、そうでない場合は...。


 

私はあなたの要求を理解し、から始めるために作業例では非常に便利です。

https://www.mql5.com/en/code

また、グーグルから学ぶために専門家のアドバイザーの無料のソースを見つけることができます。

単純なタスクを行うコードを探し、関数でそれらをグループ化し、あなたのコードがシンプルで読みやすく保つようにしてください。

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
理由: