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

 
mario065:

こんにちは。

もちろん、そんなことはありません。

七面鳥が何羽もいる場合は、1羽が食べる数だけペアを組まなければなりません。

1つのハンドラですべてのペアを使用することができます。

ハンドルを1つずつ使う、つまりインジケータバッファをコピーしてから、次のインジケータの値をハンドルに代入する。

しかし、ハンドルは初歩的な整数であり、実質的にリソースに影響を与えないのに、なぜハンドルを保存する必要があるのか理解できないのですが?

 
Reshetov:

ハンドルを1つずつ使う、つまりインジケータバッファをコピーしてから、次のインジケータの値をハンドルに割り当てる。

しかし、ハンドルは初歩的な整数であり、実質的にリソースに影響を与えないのに、なぜハンドルを保存する必要があるのか理解できないのですが?

こんにちは。

昨年はこんな外部関数を 書きました。

void CalculatePairs(string dSymbol) {

   atrHandle1=iATR(dSymbol, TimeFrame1, ATRPeriod);
   atrHandle2=iATR(dSymbol, TimeFrame5, ATRPeriod);
   atrHandle3=iATR(dSymbol, TimeFrame15, ATRPeriod);
   atrHandle4=iATR(dSymbol, TimeFrame30, ATRPeriod);
   atrHandle5=iATR(dSymbol, TimeFrame60, ATRPeriod);
   muvHandle1=iMA(dSymbol,TimeFrame1,MAPeriod,0,MAMethod,InpPr);
   muvHandle2=iMA(dSymbol,TimeFrame5,MAPeriod,0,MAMethod,InpPr);
   muvHandle3=iMA(dSymbol,TimeFrame15,MAPeriod,0,MAMethod,InpPr);
   muvHandle4=iMA(dSymbol,TimeFrame30,MAPeriod,0,MAMethod,InpPr);
   muvHandle5=iMA(dSymbol,TimeFrame60,MAPeriod,0,MAMethod,InpPr);
   if(atrHandle1<0 || atrHandle2<0 || atrHandle3<0 || atrHandle4<0 || atrHandle5<0 ||
   muvHandle1<0 || muvHandle2<0 || muvHandle3<0 || muvHandle4<0 || muvHandle5<0 )
     {
      Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
     }

   double ma1[],ma2[],ma3[],ma4[],ma5[];
   double atr1[],atr2[],atr3[],atr4[],atr5[];

   ArraySetAsSeries(ma1, true);ArraySetAsSeries(ma2, true);ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);ArraySetAsSeries(ma5, true);
   ArraySetAsSeries(atr1, true);ArraySetAsSeries(atr2, true);ArraySetAsSeries(atr3, true);
   ArraySetAsSeries(atr4, true);ArraySetAsSeries(atr5, true);

   if (NormalizeDouble(CopyBuffer(muvHandle1,0,0,1,ma1),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle2,0,0,1,ma2),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle3,0,0,1,ma3),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle4,0,0,1,ma4),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle5,0,0,1,ma5),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle1,0,0,1,atr1),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle2,0,0,1,atr2),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle3,0,0,1,atr3),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle4,0,0,1,atr4),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle5,0,0,1,atr5),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}

   Result = 0;
}
double FGroup(){
      CalculatePairs(Currency1);{
         Pair1 = Result;}

もちろん、計算するまではエラー4806が出ますが、その後は問題なく動作しています。

今日、このコードを開いて、他の方法はないかと考えてみました。

エラーはエラーです。

8ペア、5タイムフレームの場合、いくつのハンドルを取得すればよいのでしょうか?

これはリソースの問題ではなく、もっといいものを作らなければならないのです。

Документация по MQL5: Основы языка / Функции / Описание внешних функций
Документация по MQL5: Основы языка / Функции / Описание внешних функций
  • www.mql5.com
Основы языка / Функции / Описание внешних функций - Документация по MQL5
 
mario065:

こんにちは。

昨年はこんな外部関数を 書きました。

もちろん、計算するまでは、エラー4806が出ましたが、その後は問題なく動作しています。

今日このコードを開いたのですが、他の方法はないのでしょうか。

  1. 何の方法?
  2. CalculatePairs()関数はエラーしか表示されないのに、なぜ必要なのですか?

あなたのコードからこの関数を削除して、よく眠ってください。

 
Reshetov:
  1. 何の道?
  2. エラーしか出ないのに、なぜCalculatePairs()関数が必要なのですか?

あなたのコードからこの関数を削除して、よく眠ってください。

表示されていない「すごい」計算もあります。

そして、選択されたペアを他の関数が受け取り、再び何かを行う。

方法は簡単です。

例えば、こんな感じです。

シンボルやタイムフレームを持たないインジケーターのハンドルを作成します。

CopyBufferを 作成する際に、タイムフレームとペアを指定する。

例えば、こんな感じです。

int OnInit()

以下のようになります。 ハンドル = インジケータ名

void OnTick()

次のようになります:CopyBuffer(指定されたシンボル、タイムフレーム、コピー元、コピー量、コピー先)

これはあなたとの対話 :) に過ぎません。

 
mario065:

見せていない "すごい "計算があるんです。

なるほど、ArraySetSeries()はデータのない配列、つまり情報が読み込まれる前の配列に適用され、バッファをコピーした後に必要なのですね。
 
Reshetov:
なるほど、ArraySetSeries()はデータのない配列、つまり情報が読み込まれる前の配列に適用されますが、こちらはバッファをコピーした後に必要です。

その通りです。

しかし、CopyBufferで 行う方が誰にとっても簡単だと思います つまり、どのペアとフレームを指定するかです。

どのペアとフレームを指定するかだけで、インジケーター自体も同じ計算をします。

MT5のアーキテクチャそのものが、より簡単にできるようになれば。

良いアイデアですね :) .

 
Reshetov:
なるほど、ArraySetSeries()はデータのない配列、つまり情報が読み込まれる前の配列に適用され、バッファをコピーした後に必要なんですね。
差はない。
 
保留中の注文を 出そうとすると、インストールされ、同期化について書かれ、ターミナルのすべての注文を削除し、その後、サプライヤーからの注文が表示されます。
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Yedelkin:

Expert AdvisorがMFIを使用している場合、そのコードにはこのインジケータの ハンドルを取得する行が含まれている必要があります。そのため、移動平均の扱い方については、「MQL5リファレンス ガイド/テクニカル指標 iMA」にて解説しています。

また、「MQL5でインジケータを 使いこなす」の記事も読んでみてください。

記事を読ませていただきました。しかし、「MFIインジケータウィンドウとバークローズ価格の登録にあるiMAハンドルを削除するにはどうすればよいですか」という私の質問には答えてくれませんでした。

ご指摘のiMAハンドルは、インジケーターウィンドウに配置されたiMAには適用されません。標準的な方法による説明では、アドバイザーはチャートからiMAハンドルを削除します。
 
Leser: 記事を読むしかし、"MFIインジケータウィンドウにあるiMAのハンドルを削除し、バーの終値を登録するにはどうすればよいですか?"という私の質問には答えてくれませんでした。

当初は次のように問題点を整理していましたね。"The Expert Advisor uses MFI;Ma is not on the chart (window #1), but in window with MFI indicator (window #2)" と表示されています。もしあなたのExpert AdvisorがMFIを使用しているなら、そのコードにはこのインディケータのハンドルを取得する行が含まれていなければなりません:「MQL5 Reference Guide / Technical Indicators / iMFI」

そこで、まず、お使いのExpert Advisorが「window #2」からどのようにインジケータ・ハンドルを取得しているかを確認することから始めるとよいでしょう。そして、そこで何かを考え出すのです。

レッサー :記事を読ませていただきました。しかし、私の疑問の答えにはなっていない「。MFIインジケーターのウィンドウにあるiMAで、バーの終値を登録 する」。
MFI指標の値、あるいはバーの終値など、どのようなデータを基にMA指標を構築しているのでしょうか。バーの終値を登録する」ことについては、これまで何も語られていない。そのため、「Indicator from Indicator」という記事へのリンクを貼ったのです。
理由: