あなたは間違った場所に来ていると思います。
このフォーラムでは、他の人のためにコードを書くことはありません。
私たちは、あなたが自分でコードを書くことを期待しています。
もしあなたが行き詰まったら、私たちは正しい方向を指し示します。
もし誰かがあなたのためにコードを書いてくれることを望むなら、ここに行って ください。
彼らはmql4とmql5をやっています。
[...]
さて、数日後に迫ったMT4のメジャーアップデートの話から一転して。
あなたのバックグラウンドによります。良くも悪くも、現在MT4とMQL4は世界のリテールFX市場をほぼ独占しており、「EA」という言葉は最低でも数十万人の人にとって意味があるのだと思います。
MQL4言語には事実上2つのバージョンが存在します。過去9年間存在したものはクラスやオブジェクトを持たず、したがってC++というよりCに近いものです。一方、ポインタや明示的なメモリ割り当てがありません。
来週月曜日にリリースされるMT4とMQL4の新バージョンでは、クラスが追加されましたが、ここでも明示的なメモリ割り当てや管理はありません。C++に近いのか、それともJavascriptに似ているが、ダックタイピングやラムダ関数などが ないのか、議論の余地があります。
簡単に言うと、プラットフォームはあなたのためにこれを自動的に行い、あなたはその標準的な動作をオーバーライドする簡単な手段を持っていません。外部の価格データをダウンロードし、それをMQL4で操作することは、特に新しい拡張バージョンではなく、従来のMQL4では、あまり良いことではありません。
MQL4では、現在の価格と、プラットフォームが対応しているすべての時間枠の過去の価格を簡単に操作することができます。M1、M5、M15などですが、M3、H2などではありません。
スプレッドは確かに変化しますが、MT4プラットフォームの魅力的な特質の1つは、過去の買値しか提供しないことです。(現在の価格と現在のスプレッドは当然利用可能です)。
事実上、プラットフォームは常にこのデータをストリームしています。明示的に「ダウンロード」することはありません。例えば、MQL4コードは常にAccountEquity()関数を介して口座の現在の純資産にアクセスすることができます。オープンポジションは自動的に入金通貨で報告されます。
ブローカーに依存しますが、全体として、プラットフォーム/ブローカーは、単に現在のBBO以上での指値注文を受け付けないだけです。この例外はすぐには思いつきません。
大まかに言えば、プロジェクトは1つの.mq4ファイルだけで構成されますが、複数の#included .mqhファイルが存在することができます。したがって、共通のコードライブラリを持ち、プロジェクト間でそれらを再利用することができます。ただし、複数の.mq4ファイルが存在する場合は、同じプロジェクトの一部として一緒にコンパイルすることはできません。MQL4の起源はC言語ですが、典型的な大規模プロジェクトでは、1つの.mq4ファイルと1つまたは複数の様々な種類のライブラリ(プリコンパイルまたは#included)が存在します。
コンパイラは、マシンコードではなく、バイトコード/pコード/何でも-あなたが呼びたいもの-を生成します。.mq4ファイルを明示的にコンパイルすることもできますし、ソフトウェアの必要なフォルダに置いておけば、次回起動時に自動的にコンパイルされて使用できるようになります。
時間がない。このフォーラムのみんなは、9年ぶりのMQL4の重要なアップデートについて議論するのに忙しすぎるのです。
私は誰かに商業的価値のあるものを作ってくれと頼んだわけではありません。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分前を指します。それとも、時間単位はチャートに適用されるのではなく、プログラム自体にハードコーディングされているのでしょうか?また、現在のスプレッドは、どのようにアクセスするのでしょうか?これらは「ストリーミング」で簡単にアクセスできると言いますが、どのようにアクセスするのでしょうか?
よろしくお願いします。
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) などの別の用語で表現されます。
私はあなたの要求を理解し、から始めるために作業例では非常に便利です。
また、グーグルから学ぶために専門家のアドバイザーの無料のソースを見つけることができます。
単純なタスクを行うコードを探し、関数でそれらをグループ化し、あなたのコードがシンプルで読みやすく保つようにしてください。
start() { SearchOrders(); DetectEnvironment(); UpdateIndicators(); RiskAssessment(); CalcVolume(); if( EnterSignal() ) OpenOrder(); if ( ExitSignal() ) CloseOrder(); TrailingStop(); DisplayInfos(); }
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
私はあなたが言うところの「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ファイルだけなのか、取引プラットフォームによってコンパイルされるのか、それともコンパイラが必要で、取引プラットフォームはコンパイラが生成するマシンコードなどを使用するのか、教えて下さい。
もし誰かがこれをやってくれたら、これらの要素をすべて含んだダミープログラムを作るだけで、私にとって非常に有益なだけでなく、他の人にとっても有益になると想像します。どなたかやってくださる方、よろしくお願いします。