datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970int tss=(int)ts;//преобразование в секундыAlert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970int tspp=(int)tsp;//преобразование в секунды
int(round)の件、了解です。ありがとうございます。明示的な型変換は 問題ないでしょう。しかし、明示的な型変換を行わなくてもうまくいきました。
エラーは出ていない。ビルドは最新のものです。
ありがとうございます!MT5のアップデートが役に立ちました。2013年7月23日のビルドで、エラーがなくなりました。
誰がコンパイラからこんな重大なエラーが出ることを予想しただろう。
ありがとうございます!MT5のアップデートが役に立ちました。バグはなくなりました。 ビルドは2013年7月23日のものです。 ちなみに旧ビルドでは、タイプ変換の ワラントがなかったので、気がつきませんでした。
誰がコンパイラからこんな重大なエラーが出ることを予想しただろう。
時間間隔での最小値を求める必要がある。時間間隔での最小値を求めるために、以下のようなコードを作りました。
この区間で最小値を求めるには、CopyLowという関数を使う。
すると、私の理解が正しければ、1次元配列のLow[] が得られます。
ArrayMinimumでその中の最小値を探しています。
今日、開始時刻を1時間、停止時刻を2時間に設定し、Alertを呼び出してmin=-1をチェックしようとしました。
質問:この問題では、この問題を解くための関数が正しく選択されているか、どこかに間違いがないか?最低 価格を教えてほしい。
ハンドブックで調べようとしたのですが、クラス単位の例で、まだ準備ができていないのです。
クラスを使わないで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 は「要求されたデータが見つかりません」です。
どこでエラーになっているのか教えてください。
ありがとうございます。
タイプキャスティングの 原理を理解していないのか?とてもシンプルなんです。
int stオペランドはdatetime tp[]よりもマイナーな型であることが判明しました。]
そのため、操作の中で秒への変換がありません。
時間間隔での最小値を求めてみました。ちゃんとできているのか不安です。前の投稿を見ることができますか?
週末にチェックするための新しいティックがない状態で、どのようにAlertやCommentを呼び出すことができるのでしょうか?
時間間隔での最小値を求める必要がある。時間間隔での最小値を求めるために、以下のようなコードを作りました。
この区間で最小値を求めるには、CopyLowという関数を使う。
すると、私の理解が正しければ、1次元配列のLow[] が得られます。
ArrayMinimumでその中の最小値を探しています。
今日、開始時刻を1時間、停止時刻を2時間に設定し、Alertを呼び出してmin=-1をチェックしようとしました。
質問:この問題では、この問題を解くための関数が正しく選択されているか、どこかに間違いがないか?最低限 必要なものを
よく お読みください。
戻り値。
この関数は,配列の直列 性を考慮した上で,見つかった項目のインデックスを 返します.失敗した場合は、-1を返します。
ですから、こうあるべきなのです。
土日も含めてチェックとテストは、スクリプトで行う。
土日も含めてチェック、テストはスクリプトで。