初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 188

 
Vikon:

こんにちは。

グラフィカルなオブジェクトをどの間隔で表示するのかがわからない

すべてのタイムフレームで

ありがとうございます。

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
MQL4で行われているような、未使用の関数や変数に関するメッセージを取得するキーがコンパイラにあるかどうか、誰か知っていますか?

mql4ではどうなっているのでしょうか?

未使用の関数に関する警告を表示しないことについて質問されたレナートは、表示しないと答えた。プラガブル・ライブラリの使用に関連して。以前は旧ビルドにありました。今はそうではありません。EA本体で使っていない機能を探すのは、とても不便です。未使用の変数については、関数本体で見つかった場合のみ説明し、start() や OnTick() では説明しない。

 
artmedia70:

mql4ではどうなっているのですか?

未使用の関数に関する警告を表示しないことについて質問されたレナートは、表示しないと答えた。プラグインライブラリを使用しているため。以前は旧ビルドにありました。今はそうではありません。EA本体で使っていない機能を探すのは、とても不便です。未使用の変数については、関数本体で見つかった場合のみ説明し、start() や OnTick() では説明しない。

OOPでは関数ではなく、メソッドだからです。各ライブラリには多くのメソッドを持つクラスがあり、そのうちのいくつかは使われていないかもしれません。また、クラスは他のライブラリも参照しており、その中のいくつかのメソッドは使用されていません。その結果、使われないメソッドが大量に発生する可能性があります。

コンパイルされたコードの量から判断して、コンパイラは自動的に未使用のメソッドを排除している。つまり、自分で探しても意味がない。この作業はコンパイラがやってくれるからだ。

 
Reshetov:

なぜなら、OOPでは関数ではなく、メソッドだからです。各ライブラリには多くのメソッドを持つクラスがあり、そのうちのいくつかは使われていないかもしれません。さらに、クラスは他のライブラリも参照し、そのライブラリのメソッドの一部も未使用である。その結果、未使用のメソッドが大量にスタックされる可能性があります。

コンパイルされたコードの大きさから判断して、コンパイラは自動的に未使用のメソッドを排除している。つまり、この仕事はコンパイラがやってくれるので、自分で探しても意味がないのです。

これは問題ではありません。問題は、まさにクラス内の 未使用のメソッドを見つけることです。私自身は500以上のメソッドを持っています。相互関係は非常に複雑です。ランタイムコードは避けられない。使わなくなったものをざっと見てみるのはとても有効かもしれませんね。
 
Reshetov:

なぜなら、OOPでは関数ではなく、メソッドだからです。各ライブラリには多くのメソッドを持つクラスがあり、そのうちのいくつかは使われていないかもしれません。さらに、クラスは他のライブラリも参照し、そのライブラリのメソッドの一部も未使用である。その結果、未使用のメソッドが大量にスタックされる可能性があります。

コンパイルされたコードの大きさから判断して、コンパイラは自動的に未使用のメソッドを排除している。つまり、この仕事はコンパイラがやってくれるので、自分で探しても意味がないのです。

由利 これは当然です。しかし、ソースコードをお客さんに渡すとなると、きれいにしたいものです。そして、紆余曲折のプロセスが始まる。テンプレートはそれほど多くなく、特定のTCクラス用にいくつか用意されています。この件に関係ない関数を片付けなければならない。EA本体の中だけで未使用の関数や変数を指し示す「魔法のボタン」が欲しいです。
 

前問の議論は終わっているかと思います。トピックが終了し、質問をするのに適切なタイミングを知ることは困難です。ヒントを教えてください。St_handleとMA_handleの 計算結果を1つの2次元配列に埋める方法がわからず、1次元配列にしか 渡すことができません。

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
これは問題ではありません。問題は、まさにクラス内の 未使用のメソッドを見つけることです。

クラスで使われていないメソッドとはどういう意味ですか?OOPではこのようなことは行われません。アルゴリズムによるプログラミングとは対照的に、通常のOOPプログラマーは、同じクラスが後に他のアプリケーションで使われたり、クラスライブラリの一部になる可能性があるため、あらゆる場面で必要なフィールドとメソッドを備えたクラスを作成する。もちろん、1つのプロジェクト内であっても、ソースコードを探し出して必要なフィールドやメソッドを後から追加する必要がないように、削ぎ落としたものではなく、完全なクラスを作成した方が良いことは言うまでもありません。

OOPでは、アルゴリズムプログラミングで多くの人が慣れる、どんな経済性も、後で不利になることがあります。使わないものはすべて、プログラマーではなく、コンパイラがコードから除外しなければならない。

もちろん、OOPはアルゴリズムプログラミングと比較して、ソースコードが大きくなります。しかし、このプロジェクトの「余分な」コードの多くは、他のプロジェクトで再利用できるので、これはデメリットではなく、メリットなのです。

C-4:


私自身は500以上のメソッドを持っています。相互関係は非常に複雑です。 初歩的なコードは避けられない。使わなくなったものがすぐにわかるので、とても便利です。

難問を作ろうとしないこと、つまり1つのクラスにすべてを詰め込もうとしないことです。クラスライブラリを作成する必要があります。つまり、機能を別々のクラスに分解し、このようなものにコメントを含めることを忘れないでください。私もPascalの後にJavaを学び始めた当初は、アルゴリズムプログラミングのように、あるタスクに必要なものをすべて1つのクラスにしてしまう、つまりOOPを 使わないで、すべてを1つのクラスにしてしまおうとしました。その結果、ユニバーサルではない混乱が生じ、後でどこにでも適用することは不可能であり、そのようなコードを理解することが困難であることは言うまでもない。
 
Andrei-1:

ヒントを教えてください。St_handleとMA_handleの 計算結果を1つの2次元配列に埋める方法がわからず、1次元配列にしか 渡すことができません。

何が言いたいの?つまり、なぜオッカムのカミソリを使わず、こぶを作るのか?つまり、2次元配列は2つの1次元配列に比べて何が優れているのでしょうか?結局、まずはデフォルトの指標で作られた2つの一次元のものから、二次元のものに何かを押し込んで、そこから何かを取り出す必要があるのです。無駄な作業をし、他人を巻き込もうとしている。

一次元配列に問題があるとすれば、その苦労が報われることだろう。

 
フォーラムを覗いた後、これがどれほどのメモリを必要とするのかを知りました。一次元の配列を埋めて、その中の信号を探し、上書きして、また信号を探すことにした。こんな感じ。1時間に1〜2回の検索で十分です。
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

話がずれていたらごめんなさい・・・。

介助者

delphi 7のDLプロシージャで...

procedure test1(var data: array of Double); stdcall;
begin
ShowMessage('Entered ');

を終了します。

mt4 で。

#import "gayss.dll"
void test1( double &data[] );
#import

ArrayResize(data, 6);
data[0]= 2;
data[1]= 4;
data[2]= 8;
data[3]= 16;
data[4]= 21.となります。

data[5]= 3;

test1(データ)です。

とエラーが表示される...2014.02.06 17:39:04.241 スタック破損、'SOG_2014.mq4' の DLL関数 呼び出しをチェック (80,7)

正しい方法を知っている人は...。