[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 385

 
Las-tochka:

チャートに転送して、パラメータを設定するだけで


この方が良いというわけではありませんが)))

ファイルの種類


MQL4では、プログラムコードを含む3種類のファイルが存在します。mq4、ex4、mqh。

mq4 タイプのファイルは、プログラムのソースコードです。このタイプのファイルには、あらゆるタイプのプログラム(Expert Advisors、スクリプト、インジケータ)のソースコードが含まれています。プログラムのコード作成には、MetaEditorを使用します。プログラムコードの全部または一部が完成した後、保存しておき、後でこのエディターを開いてさらに修正することができます。mq4タイプのファイルは、クライアント端末での実行に使用できません。プログラムの実行を開始するためには、あらかじめコンパイルしておく必要があります。プログラムのソースコードをコンパイルすると、同名で拡張子がex4のファイルが作成されます。

ex4 ファイルは、クライアント端末で実用に耐えるようにコンパイルされたプログラムである。このタイプのファイルには、編集の可能性はありません。プログラムを変更する必要がある場合、そのソースコード(mq4ファイル)にアドレスして編集し、再度コンパイルする必要があります。ex4ファイルの名前から、それがスクリプト、Expert Advisor、またはインジケータであるかどうか、参照するプログラムの種類を判断することはできません。ex4ファイルはライブラリファイルとして使用することができます。

mqh 型のファイルはインクルードファイルです。ユーザープログラムのうち、使用頻度の高いブロックのソースコードです。このようなファイルは、コンパイル段階でExpert Advisor、スクリプト、カスタムインジケータの ソースに含めることができます。通常、インクルードファイルには、インポートする関数の説明(stdlib.mqh や WinUser32.mqh など)や共通の定数や変数の説明(stderror.mqh や WinUser32.mqh など)が含まれています。mqhファイルは、原則としてDirectory_terminal/experts/include ディレクトリに格納されます。

インクルードファイルは、通常、#include指示文を使ってメインソースファイルにコンパイルする段階で「インクルード」されるため、このように呼ばれています。mqhファイルはプログラムのソースコードを含むことができ、MetaEditorはそれらをコンパイルしますが、それらは独立した自給自足ではなく、すなわちex4タイプの実行可能ファイルを生成するためにコンパイルを必要としません。.mq4ファイルはインクルードファイルとして使用することもでき、その場合はterminal_directoryのincludeに 格納する必要があります。

クライアント端末のナビゲータの「Expert Advisors」、「Custom Indicators」、「Scripts」セクションには、拡張子がex4で、対応するディレクトリにあるファイル名のみが表示されます。旧バージョンのMetaEditorでコンパイルしたファイルは起動せず、グレーアウトしています。

その他、完全なプログラムを形成しないが、アプリケーション・プログラムを作成する際に使用されるファイルの種類もある。例えば、プログラムを複数の別々のファイルからコンパイルしたり、以前に作成したライブラリを利用することができます。ユーザー関数のライブラリーをユーザーが作成し、頻繁に使用するユーザープログラムのブロックを保存することができます。ライブラリは、terminal_directoryのcontent-librariesに 格納することを推奨します。mq4、ex4ファイルはライブラリとして使用することができます。図書館は自分たちだけで立ち上げることはできません。ライブラリ関数を呼び出すとコンピュータのリソースが余分に消費されるため、ライブラリよりもインクルードファイルの使用が望ましいです。

チュートリアル「MQL4プログラミング入門」の最初のパートでは、mq4プログラムのソースコード・ファイルとex4プログラムのコンパイル済みファイルに注目します。

 
をグラフ上に適用するには、どこに置けばよいのでしょうか?
 
Las-tochka:


もう一つ面白いことがあります。あるロボットが、異なるブローカーの端末mt4でテストされたとき、引用符がないため、異なるテスト結果が得られます。 でも、これだけあれば、ミスアライメントエラーはまったくないのでは? ショックだ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?

バタフライ効果が顔を出しています)))

いかがでしょうか?

テスターは潜在的な利益や損失を確実に表示する必要はなく、EAのロジックが正しく動作するかどうか、コードにすべての計算やロジックの誤りがないかどうかを確認するためだけに存在すると思います。
 

BeerGod:
Думаю что тестер никоем образом не обязан достоверно показывать потенциальную прибыль/убытки, он лишь для того чтобы увидеть правильно ли рабоает логика советника, всё ли в порядке с математикой и логическими ошибками в коде.

質問の是非について、何か情報はありますか?

問題は利益ではありません。 そして、テスターは何のためにあるかというと、道具であり、それをどう使うかは各自の自由だと私は考えています。


 
Myth63:
グラフ上で使用するためには、どこに貼ればよいのでしょうか?


エキスパート、インジケーター、スクリプトをチャート上で実行したい場合は、ナビゲーターのツールバーで対応するプログラムを左クリックし、チャート上にドラッグするだけです。

でも、ページ左下の https://book.mql4.com/ru/ からチュートリアルをダウンロードしたほうがいいです) グッドラック!。

 

ごきげんよう。

他の期間のMAを表示するインジケータを使用しています。

ウィンドウに2、3個置くと、端末が恐ろしく遅くなるようになった!?

専門家の方々、インジケーターの遅さは、15行しかないのですが、何か問題があるのでしょうか?

理解者を固定する。

感謝しています。

#property indicator_chart_window
#property indicator_buffers 1

extern double tf = 240; // Тф с какого береть МА
extern int period = 34; // Период МА
extern string _МА_ = "0--SMA 1--EMA 2--SMMA 3--LWMA";
extern int method = 2; // Метод МА
extern int price = 4; //
extern int shift = 0; //

extern string _LINE_ = "ЦВЕТ ТОЛЩИНА СТИЛЬ БАР";
extern color clr = Yellow; // Цвет линии
extern int width = 2; // Толщина линии
extern int style = 2; // Стиль линии
extern int CountBars = 500; // Количество баров отрисовки МА

datetime time_0;
double ma[];
//+------------------------------------------------------------------+
int init() {
//----
SetIndexBuffer(0, ma);
SetIndexStyle(0, DRAW_LINE, style, width, clr);
SetIndexLabel(0, "MA " + tf);
IndicatorShortName("Moving Average (" + tf + ", " + period + ")");
if (CountBars >= Bars)
CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars + 1);
return (0);
}
//+------------------------------------------------------------------+
int start() {
//----
int cb = IndicatorCounted();
SetIndexDrawBegin(0, Bars - CountBars + 1);
int i = Bars - cb - 1;
double ctf = Period();
double r = tf / ctf;
while(i >= 0) {
int k = MathFloor(i / r);
ma[i] = iMA(Symbol(), tf, period, shift, method, price, k);
i --;
}
if (Time[0] == time_0) return (0);
time_0 = Time[0];
return (0);
}
//+------------------------------------------------------------------+

 
Myth63:
をグラフ上に適用するには、どこに置けばよいのでしょうか?
エキスパートからフォルダーエキスパート、それ以外のタイプは名称が似ています。ターミナルを再起動すると、ナビゲータで利用できるようになりますが、ソースコードがあるものとは異なり、グレーアウトしています。
 

こんにちは、アドバイスしてください:私の問題は次のとおりです。エキスパートアドバイザーでは、(3つのすべての指標は、それぞれのゾーンを越えているときに)取引する唯一の信号があるはずです。

if(SignalType_1 && (RSI >= 35 && Stoch >= 20 && CCI >= -100)) return(+1)する。

ここで質問です。この行を正しく書いて、信号が1つしかないようにするにはどうしたらよいでしょうか。(そうでなければ、Expert Advisorは、次のアルゴリズムに従って取引を行うことが判明:RSIは、ライン35を横切る - 取引、STOCHはライン20を横切る - 取引、CCIはライン-100 - 取引、それは3つの取引を行います)。

3つの指標すべてがゾーンを超えたとき、たった一つのトレードシグナルがあります。

 
artemka_1981:

こんにちは、アドバイスしてください:私の問題は次のとおりです。エキスパートアドバイザーでは、(3つのすべての指標は、それぞれのゾーンを越えているときに)取引する唯一の信号があるはずです。

if(SignalType_1 && (RSI >= 35 && Stoch >= 20 && CCI >= -100)) return(+1)する。

ここで質問です。この行を正しく書いて、信号が1つしかないようにするにはどうしたらよいでしょうか。(そうでなければ、Expert Advisorは、次のアルゴリズムに従って取引を行うことが判明:RSIは、ライン35を横切る - 取引、STOCHはライン20を横切る - 取引、CCIはライン-100 - 取引、それは3つの取引を行います)。

3つの指標すべてがゾーンを超えたとき、初めて取引のシグナルがONEになる。

こんな風に試してみてください。

bool GO = true;// глобальная переменная
//---------------------

if(GO && SignalType_1 && RSI >= 35 && Stoch >= 20 && CCI >= -100) {GO=false; return(+1);}//запретить повторный вход
//---------------
{OrderClose(.......); GO = true; }//открыть семафор при закрытии позиции.
 
DhP:

この方法で試してみてください。

ありがとうございます。試してみます。