エラー、バグ、質問 - ページ 1175

 
A100:

.......................... 関数(検索、計算など)は一般に長さとサイズを返し、失敗した場合は -1 を返すので、エラー処理が非常に簡単になります。

を、半分犠牲にするほどではありません。
 

ごあいさつリバースシグナルが発生した場合、注文のグリッドに共通のテイクアウトを設定するには、どのような関数を使用すればよいか、初心者のためのヒントがあれば教えてください。

 
ファイル操作の勉強中です。MQL4/5は、csvファイルとtxtファイルのどちらが速いかご存知の方はいらっしゃいますか?
 
paladin800:
ファイル操作の勉強中です。MQL4/5は、csvファイルとtxtファイルのどちらが速いかご存知の方はいらっしゃいますか?
ビン
 
papaklass:
ファイルを扱うことで、どのような問題を解決しようとしているのでしょうか?
ポジションの状態をファイルに書き 出し、MT4でこのデータを読み込む必要があります。あるシンボルと他のシンボルとの位置の相関が必要です。例えば、EURUSDのポジションが 既に一定量ある場合、GBPUSDのポジションはこれ以上建てないようにします。ファイル操作なしでできる方法は知っているので、視野を広げるために、ファイル操作の方法を学びたい んです。
 

EAからリンクされたリソースインジケータを呼び出し、それ自体が別のリンクされたリソースインジケータを使用する方法についてコード例を教えてください。例えば、あるインジケータAがあり、そこからBが呼び出される。Aを使用するエキスパートCもあります。どのような場合に#resourceやiCustomを呼び出す 際に何を記述すればよいのでしょうか?

この点については、ヘルプが明確に書かれているわけではありません。インジケータAでの通常の構築:#resource "\Indicators﹑.ex4" →iCustom(::IndicatorsB.ex4) は、A単体で起動した場合は正常に動作 しています。しかし、AをExpert Advisorの#resource "\Indicators A.ex4"に挿入 すると、添付のインジケータのリソースをロードできないエラーが表示され、何らかの形でライブラリディレクトリに言及した絶対的に間違った合成パスが示され、インジケータBは自身の内部 (MQL4Libraries::IndicatorsB.ex4::IndicatorsB.ex4)を検索 されます。

 
meat:

ArraySizeについては、先日MQL4で同様の問題を提起しました(https://www.mql5.com/ru/forum/152471)。私が理解する限り、MQL5でも全て同じはずです。

おそらく、私のメッセージはそこで考慮されたのでしょう :) この問題に関して、サービスデスクは、原因はオプティマイザの不正な動作であり、新しいビルドでタイプをuintに変更すると回答しています。ちなみにArrayResizeもuintにするそうです。 ulongにしないと、近い将来、大容量を保存するときに32bitの値がないために、この問題に戻らざるを得なくなるとアドバイスしておきました。

エラー時の値-1については、以下の理由で問題ないはずです。(int)-1 = (uint)-1 = 0xFFFFFFFFFF = UINT_MAX,つまりビット表現は同じです。 しかし比較演算は異なる結果になります。

が不正確になります。

ご指摘ありがとうございます。ArraySizeとArrayRangeの戻り値は変更せず、int型のままとします。 コードオプティマイザを修正し、ご指摘のエラーは発生しないようにしました。

MQL配列の総要素数はINT_MAXを超えてはならず、これは変更されません。
MQLプログラムでより大きなサイズの配列が必要な場合は、別のクラス(例えば、CBigArray)を作成する必要があります。
 

mql5でiCustomを使いこなそうとしている。mql4でマスターしました :)

問題はMACDに似たものを描くことですが、クイック移動平均の代わりにExamplesフォルダにあるVIDYAというインディケータを使う必要があります。

標準的なMACDのコードを取り、MAの代わりにVIDYA用のパラメータを入れました。問題は、すべてコンパイルされるのに、何も描画 されないことです。

下のコードで、標準のMACDのコードを変更した2か所に印をつけました。それ以外はすべて同じです。他に見逃しているものがあれば教えてください。コードのどこかに下流があるのでは......と思っています。

//+------------------------------------------------------------------+
//|                                                         MACD.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Moving Average Convergence/Divergence"
#include <MovingAverages.mqh>
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   2
#property  indicator_type1   DRAW_HISTOGRAM
#property  indicator_type2   DRAW_LINE
#property  indicator_color1  Silver
#property  indicator_color2  Red
#property  indicator_width1  2
#property  indicator_width2  1
#property  indicator_label1  "MACD"
#property  indicator_label2  "Signal"
//--- input parameters
Первый вставленный кусок:
input int                Per=7;               // Per
input int                Per1=21;             // Per1
input int                Shift=0            // Shift
Конец

input int                InpSlowEMA=84;               // Slow EMA period
input int                InpSignalSMA=9;              // Signal SMA period
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price
//--- indicator buffers
double                   ExtMacdBuffer[];
double                   ExtSignalBuffer[];
double                   ExtFastMaBuffer[];
double                   ExtSlowMaBuffer[];
//--- MA handles
int                      ExtFastMaHandle;
int                      ExtSlowMaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMacdBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtFastMaBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,ExtSlowMaBuffer,INDICATOR_CALCULATIONS);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpSignalSMA-1);
//--- name for Dindicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"MACD("+string(InpSlowEMA)+","+string(InpSignalSMA)+")");
//--- get MA handles
Второй вставленный кусок
   ExtFastMaHandle=iCustom(NULL,0,"Examples\\VIDYA",
                     Per,
                     Per1,
                     Shift
                     );
Конец
   ExtSlowMaHandle=iMA(NULL,0,InpSlowEMA,0,MODE_SMA,InpAppliedPrice);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
//--- check for data
   if(rates_total<InpSignalSMA)
      return(0);
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtFastMaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtFastMaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   calculated=BarsCalculated(ExtSlowMaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtSlowMaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//--- get Fast EMA buffer
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtFastMaHandle,0,0,to_copy,ExtFastMaBuffer)<=0)
     {
      Print("Getting fast EMA is failed! Error",GetLastError());
      return(0);
     }
//--- get SlowSMA buffer
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtSlowMaHandle,0,0,to_copy,ExtSlowMaBuffer)<=0)
     {
      Print("Getting slow SMA is failed! Error",GetLastError());
      return(0);
     }
//---
   int limit;
   if(prev_calculated==0)
      limit=0;
   else limit=prev_calculated-1;
//--- calculate MACD
   for(int i=limit;i<rates_total && !IsStopped();i++)
      ExtMacdBuffer[i]=ExtFastMaBuffer[i]-ExtSlowMaBuffer[i];
//--- calculate Signal
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Nilog:

mql5でiCustomを使いこなそうとしている。mql4では、仮想的に使いこなすことができました :)


ログに何を書き込むのですか?エラーチェックは行わない(ハンドル受信時など)。新しいインジケーターのバッファ番号は、古い番号と一致していますか?
 

既出かもしれませんが、新しいバー、バッファのPLOT_EMPTY_VALUEの値が0.0に設定されているが、実際には全く異なる値が存在する場合がある、という質問です