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

 
barabashkakvn:
int(round)の件、了解です。ありがとうございます。明示的な型変換は 問題ないでしょう。明示的な型変換をしなくても動いたが。
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
int(round)の件、了解です。ありがとうございます。明示的な型変換は 問題ないでしょう。しかし、明示的な型変換を行わなくてもうまくいきました。
うまくいったのですが、コンパイラの備考に......。迷惑な存在です。
 
barabashkakvn:

エラーは出ていない。ビルドは最新のものです。

ありがとうございます!MT5のアップデートが役に立ちました。2013年7月23日のビルドで、エラーがなくなりました。

誰がコンパイラからこんな重大なエラーが出ることを予想しただろう。

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

ありがとうございます!MT5のアップデートが役に立ちました。バグはなくなりました。 ビルドは2013年7月23日のものです。 ちなみに旧ビルドでは、タイプ変換の ワラントがなかったので、気がつきませんでした。

誰がコンパイラからこんな重大なエラーが出ることを予想しただろう。

要は、うまくいったということです :) 以上、寝てください。
 

時間間隔での最小値を求める必要がある。時間間隔での最小値を求めるために、以下のようなコードを作りました。

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

この区間で最小値を求めるには、CopyLowという関数を使う。

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

すると、私の理解が正しければ、1次元配列のLow[] が得られます。

ArrayMinimumでその中の最小値を探しています

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

今日、開始時刻を1時間、停止時刻を2時間に設定し、Alertを呼び出してmin=-1をチェックしようとしました。

質問:この問題では、この問題を解くための関数が正しく選択されているか、どこかに間違いがないか?最低 価格を教えてほしい。

 
こんにちは トレーダーの皆様、多通貨EAで3スライドのプログラムピースの正しい設計をお願いします。

ハンドブックで調べようとしたのですが、クラス単位の例で、まだ準備ができていないのです。

クラスを使わないでEAを書きたいのですが。余計なものは一切排除し、1人3枚のスリップを獲得するために

次のようなプログラムの断片を書きました。

input int Kurtz_Period=5; // 速く動くカーツ周期

input int Mittel_Period=8 ;

入力 int Long_Period=13;

int maHandle; // 移動平均 インジケータのハンドル

double ma_buf[]; // これは、MA関数から読み取った移動平均のバッファ配列です。

// そして,対応する配列にコピーされます.

datetime Time_buf[]; // これはバーのオープン時間の配列です。

datetime Time_[6][150]; // バーのオープン時刻の配列

double Kurtz[6][70]; //これは高速に動くKurtzの配列で、行番号は使用する通貨の数に対応し、列は動く回数に対応します。

double Mittel[6][70]; // 移動平均Mittelの配列です。

double Long[6][70]; // これは長周期スライド用の配列です Long

string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // これは通貨名のテキスト配列である。

int nomer_instr; // これは楽器(通貨)番号で、通貨ごとにサイクルを整理するためだけのものです。

int OnInit()

{

//-----

//-------

}

void OnDeinit(const int reason)

{

//---

ArrayFree(Time_buf)です。

ArrayFree(ma_buf); // 解放された配列をゼロにします.

//-------

}

void OnTick()

{

//---------------------

ArraySetAsSeries(time_buf, true); //time_array配列にtimeseriesのようなインデックスを設定する。

ArraySetAsSeries(ma_buf,true); //配列ma_buf のインデックスを時系列に設定する。

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // これはすべての使用通貨に対してのループです

{

int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // これは通貨建値の桁数である。

CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf); // 各バーの履歴時間データをバッファにコピーする。

for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // 1 本目のバーオープンの時刻。

//最初の3つのスライディングバーのカウントを生成するブロック:Kurtz,Mittel,Long

manHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("Error in copying indicator buffers ---PERIOD_M1,Kurtz_Period--- Moving Average - error number. "指標バッファのコピーにエラーが発生しました。",GetLastError());

を返します。

}

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

/*

//===============================================================

// 時系列でのバーオフセットと数値正規化の精度をチェックするBLOCK

// 高速で動くMA-5

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // Expert Advisorのモードを選択するキーで、現在はデバッグモードになっています。

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("====================");

if(i==1) Alert(" 1 本目のバーの開始時間。Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" bar number:i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

//---------------------------------------------------------------------------------------------------------------------------

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Error in Copying indicator buffers ===PERIOD_M1, Mittel_Period,=== Moving Average - エラー番号:",GetLastError());

を返します。

}

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

//----------------------------------------------------------------------------------------------------------------------

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("指標バッファのコピー中のエラー ===PERIOD_M1, Long_Period,===Moving Average - エラー番号:",GetLastError());

を返します。

}

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

// 最初の3枚のスライドのカウントを形成するブロックの終端:Kurtz,Mittel,Long

}// 使用通貨によるループを終了する

//============================================================

その他プログラム運営者

//============================================================

//-----------------------------------------

}//OnTick() 終了

//+------------------------------------------------------------------+

このプログラムでは、コンパイル時にエラーは検出されませんが、各スリップのLogbookでテストしたところ

エラーメッセージ: 4806 は「要求されたデータが見つかりません」です。

どこでエラーになっているのか教えてください。

ありがとうございます。

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

タイプキャスティングの 原理を理解していないのか?とてもシンプルなんです。

int stオペランドはdatetime tp[]よりもマイナーな型であることが判明しました。]

そのため、操作の中で秒への変換がありません。

int st=tp[0];

時間間隔での最小値を求めてみました。ちゃんとできているのか不安です。前の投稿を見ることができますか?

週末にチェックするための新しいティックがない状態で、どのようにAlertやCommentを呼び出すことができるのでしょうか?

 
forexman77:

時間間隔での最小値を求める必要がある。時間間隔での最小値を求めるために、以下のようなコードを作りました。

この区間で最小値を求めるには、CopyLowという関数を使う。

すると、私の理解が正しければ、1次元配列のLow[] が得られます。

ArrayMinimumでその中の最小値を探しています

今日、開始時刻を1時間、停止時刻を2時間に設定し、Alertを呼び出してmin=-1をチェックしようとしました。

質問:この問題では、この問題を解くための関数が正しく選択されているか、どこかに間違いがないか?最低限 必要なものを

よく お読みください。

戻り値。

この関数は,配列の直列 性を考慮した上で,見つかった項目のインデックスを 返します.失敗した場合は、-1を返します。

ですから、こうあるべきなのです。

Alert("min=",Low[ArrayMinimum(Low)]);
 

土日も含めてチェックとテストは、スクリプトで行う。

 
DC2008:

土日も含めてチェック、テストはスクリプトで。

ありがとうございました。
理由: