"ダミー "からの質問 - ページ 57

 
Lizar:

記事に掲載されているバージョンを見てみようと思います。今のところ、スパイの専門家を何人か作っていますが、とてもうまくいっています。

MetaDriver。

この技術はテスターでは使えないと思います。

効くんです。

テスターで動くだけでもすごいことです。まだ実装できていません。しかし、これは経験不足によるものでしょう。今のところタイマーに落ち着きましたが、長いですね。

Expert Advisorをチャートに貼り付けようとすると、以下のメッセージが表示されます。

USDJPYがどう関係するのか理解できない。コード中の初期化時のハンドルの取得をコメントアウトしても、このメッセージは出てきます。

 
Lizar:

効くんです。

Konstantinさん、あなたのスキームをリアルタイムとテスターの両方で多通貨モードで動作させるには、通常はOnTick() またはOnTimer()にあるEA実行コードをOnChartEvent() に置く必要があると理解してよいでしょうか?
 
tol64:

テスターで動くだけでもすごいことです。まだ実装できていないんです。しかし、これは経験不足によるものでしょう。とりあえずタイマーに落ち着きましたが、長すぎです。

Expert Advisorをチャートに貼り付けようとすると、このようなメッセージが表示されます。

USDJPYがどう関係するのか理解できない。コード中の初期化時のハンドル取得をコメントアウトしても、このメッセージは出ます。

まだ見ていない。

Tol64 です。
Konstantinさん、あなたのスキームをリアルタイムとテスターの両方で多通貨モードで動作させるには、通常はOnTick() またはOnTimer()にあるEA実行コードをOnChartEvent() に置く必要があると理解してよいでしょうか?

はい。

 
tol64:

テスターで動くだけでもすごいことです。まだ実装できていないんです。しかし、それは経験不足によるものでしょう。とりあえずタイマーに落ち着きましたが、長すぎです。

Expert Advisorをチャートに貼り付けようとすると、このようなメッセージが表示されます。

USDJPYがどう関係するのか理解できない。コード中の初期化時のハンドル取得をコメントアウトしても、まだメッセージは出ます。

見てきました。Expert Advisorが動作しています。エラーメッセージに 誤植があっただけです。

表示されたのは、MarketWatchのウィンドウでシンボルが選択されていないというメッセージでした。Expert Advisor が扱うシンボルを MarketWatch ウィンドウに設定するか、OnInit() で適切なシンボルに対するスパイロの呼び出しをコメントアウトします。

exSpy Control panel MCM.mq5 の修正版を添付します。

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
ファイル:
 
Lizar:

拝見させていただきました。専門家が動いている。エラーメッセージに 誤字があっただけです。

表示されたのは、MarketWatchのウィンドウでシンボルが選択されていない旨のメッセージでした。Expert Advisor が扱うシンボルを MarketWatch ウィンドウに設定するか、OnInit() で適切なシンボルに対するスパイロの呼び出しをコメントアウトします。

exSpy Control panel MCM.mq5 の修正版を添付します。

自分の注意力のなさに苦笑したくらいです)))USDJPYはMarket Watchのウィンドウに表示されました。他のマークはなく、プリントには同じメッセージが書かれているだけでした。)))

ありがとうございます。

 
tol64:
Konstantin, Expert Advisor の実行コードは通常OnTick() またはOnTimer() にありますが、OnChartEvent() に配置すれば、リアルタイムとテスターの両方で多通貨モードで動作するようになると理解してよいですか?

必要な機能はすべて別のプロシージャや関数の形で実装し(私は後者をお勧めします)、Expert Advisor の任意の場所から呼び出す方がよいでしょう。

OOPを使えば、必要な機能はすべてmainクラス(通常はExpertクラスの子孫)のいくつかのメソッドの集合として実装することができる。

 
Interesting:

必要な機能はすべて別のプロシージャや関数として実装し(私は後者をお勧めします)、Expert Advisor のどこからでも呼び出せるようにするのがよいでしょう。

OOP を使用する場合、必要なすべての機能をメインクラス(通常は Expert Advisor クラスの子孫)のいくつかのメソッドのセットとして実装することができます。

現時点では、すべての機能がほぼこの方法で実装されています。ほとんど。つまり、コード全体が、基本的な計算を含むいくつかの関数になっているのです。まだOOPを完全にマスターしているわけではありませんが、OOPを使うことで得られる利益はすでに目に見えています。コードは日々増え続け、やがてOOPなしにはとても不便になることでしょう。

私は別のトピックで、さまざまな多通貨のテスト方法の結果をお伝えしています。このテーマについては、まだ不明な点が多くあります。

 

引用符が読み込まれないのはなぜですか?例えばEURUSDの場合、その年の8月分までしか読み込まない。以上です。これ以上負荷をかけたくないということなのでしょう。引用符で囲まれたファイルを探せるところはないですか?

バーの本数を 無制限に設定しました。何度もリフレッシュしました。何度もHOMEを押した。それでもうまくいきません。

 

また、すべてのMT5ファイルとその詳細の「発表された完全なリスト」はどこにあるのでしょうか?

今日はバオバブから降りたばかりで、すみません。

 

多時間軸のフラクタル指標

このインジケータの本質は、ある時間枠のフラクタル(または一度に複数の時間枠のフラクタル)を別の時間枠に表示することです。

出典記事:https://www.mql5.com/ru/code/7304、 MQL4でのインジケーターコード

まず、.mq4-versionから.mq5用に微修正してコピー&ペーストしてみました(このコードは引用もしていません。MQL4のソースコードでHigh[shift+i]のような配列の内部での不注意な操作を見つけたときに問題が発生したのです。

bool Fractal (string F,int Per, int shift) {...}

MQL5で書き換えてみました(OnCalculateの外側でこのような配列のデフォルトの可視性はない)。

そこで、PERIOD_...をパラメータに複数のiFractalsハンドルを呼び出して、MQL5用に書き換えてみました。その結果、フラクタルはバラバラになり、それに対応するTF上のフラクタル矢印の一連だけが適切にフィッティングできることもあるが。驚くべきことに、他のタイムフレームからターミナルの同じタイムフレームに戻ると、フラクタルが異なって表示され、次のことを示唆している:私はいつも同じエラー画像が安定して繰り返されるべきだと思ったが、このよくわからない指標のターミナルのデータは、理解できない方法でさまよう。もちろん、2番目の変形には、bool Fractal(string F,int Per,int shift) {...}も含まれていないので、インジケータの開発経験者に宛てたいと思います。

なんとか描けたのがこちら。

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

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 B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

明らかに、OnCalculateの内部とbool型の外部関数での条件チェックが不足しているか、私のコードにすでにあるものを正しく使用していないだけです。また、配列は正しい場所で正しく初期化し、時系列に設定する必要があるのでは?