初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 440 1...433434435436437438439440441442443444445446447...1503 新しいコメント Николай Никитюк 2015.09.17 16:37 #4391 こんにちは 2015.09.17_19:07GMT+3 です。EAプログラムでダイナミックアレイの次元を設定しました。そして、コンパイラはエラーを出す。"コンマ期待"。また、プログラム文中に変数がある場合、--は「変数 such-and-such hides variable declaration at global level」という警告を出す。理解できない。ヘルプのように、すべてが正しく表示されているようです。以下は、コードの一部です。 //--- 最大バー価格の配列 bool ArraySetAsSeries(double &High[],bool); //--- bool ArraySetAsSeries(double &Low[],bool)。 //--- リザーブ(reserve)で配列のサイズを設定します. int ArrayResize(double &mrate[],int 16,int 9); int ArrayResize(double &maVal[],int 16,int 9); int ArrayResize(double &fVal[],int 3,int 2); int ArrayResize(double &zVal[],int 3,int 0); int ArrayResize(double &High[],int 1,int 0); int ArrayResize(double &Low[],int 1,int 0); //+------------------------------------------------------------------+ //| 専門家による初期化関数 //+------------------------------------------------------------------+ void OnDeinit(const int reason)//--- массив максимальных цен баров bool ArraySetAsSeries(double &High[],bool); //--- bool ArraySetAsSeries(double &Low[],bool); //--- устанавливаю размеры массивов с запасом (reserve) int ArrayResize(double &mrate[],int 16,int 9); int ArrayResize(double &maVal[],int 16,int 9); int ArrayResize(double &fVal[],int 3,int 2); int ArrayResize(double &zVal[],int 3,int 0); int ArrayResize(double &High[],int 1,int 0); int ArrayResize(double &Low[],int 1,int 0); //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { { Questions from Beginners MQL5 どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Vladimir Karputov 2015.09.17 16:46 #4392 Николай Никитюк:こんにちは 2015.09.17_19:07GMT+3 です。EAプログラムでダイナミックアレイの次元を設定しました。そして、コンパイラはエラーを出す。"コンマ期待"。そして、もしプログラムテキストの中に High[]、Low[]という名前の配列は、array-timeseriesの予約システム名であるため、宣言できない。 ArrayResize のスペルが間違っている。こうでなければならない。 //--- устанавливаю размеры массивов с запасом (reserve) ArrayResize(mrate,16,9); ArrayResize(maVal,16,9); ArrayResize(fVal,3,2); ArrayResize(zVal,3); また、配列に時系列フラグを設定すると、次のようになります。//--- массив максимальных цен баров ArraySetAsSeries(High,true); //--- ArraySetAsSeries(Low,true); Николай Никитюк 2015.09.17 16:47 #4393 2015.09.17_19:45 GMT+3.念のため、.pngファイルを添付しておきます。 ファイル: srtdaietpv_0hs8ag_vx918u.png 114 kb Николай Никитюк 2015.09.17 16:54 #4394 Karputov Vladimir:High[]、Low[]という名前の配列は、タイムストリーム配列のシステム名として予約されているため、宣言できません。 ArrayResize のスペルが間違っている。このように書くべきでしょう。 ありがとうございました。回答が早かったですね。午後8時に退社。残りは後で見ます。19:54 MSC Aleksey Vyazmikin 2015.09.17 17:43 #4395 Karputov Vladimir: 私のコードを指しているのであれば、はい、私のコードは新しいバーをチェックしています。 私は添付したコードに興味があります - それが何をするのか理解したいです。 Vladimir Karputov 2015.09.17 19:30 #4396 -Aleks-: 私は、添付したコードに興味があります。いただいたコードでは何もできない、というか動きません。エラーです。if(TimeN==0) TimeN=TimeC;この条件は一度だけ、つまり最初にプログラムを実行したときだけ機能します。この時点で、スタティック変数は 初期化されます。あなたのコードの変数TimeNは永遠のゼロ(というより1970年1月1日の日付)に等しく、この永遠のゼロは現在のバーが開く時間に等しい変数TimeCと比較されるので、以下の条件はチェックする意味が全くありません。) if(TimeN==TimeC) return; Aleksey Vyazmikin 2015.09.17 21:04 #4397 Karputov Vladimir:いただいたコードでは何もできない、というか動きません。エラーです。この条件は一度だけ、つまりプログラムの初回起動時にのみ機能します。この時点で、スタティック変数は 初期化されます。あなたのコードの変数TimeNは永遠のゼロ(というより1970年1月1日の日付)に等しく、この永遠のゼロは現在のバーの開始時間に等しい変数TimeCと比較されるので、以下の条件はチェックする意味が全くありません。)今思うと、なんで書けばよかったんだろう...。をExpert Advisorに追加しました。分かりやすい説明ありがとうございました Aleksey Vyazmikin 2015.09.17 22:24 #4398 Karputov Vladimir:新しいバーがM1タイムフレーム上にある場合、メッセージを表示します。私は完全なコードを与えていなかったことが判明した、正しいものは次のとおりです。 int init() { static datetime TimeN=0; return(INIT_SUCCEEDED); } int start() { datetime TimeC=iTime(NULL,TF,0); if(TimeN==0)TimeN=TimeC; if(TimeN==TimeC) return(0); TimeN=TimeC; // Код программы исполняется при появлении нового бара return(INIT_SUCCEEDED); } その場合はうまくいきますよね? Vladimir Karputov 2015.09.18 03:45 #4399 -Aleks-:私は完全なコードを与えていなかったことが判明した、正しいコードは次のとおりです。 int init() { static datetime TimeN=0; return(INIT_SUCCEEDED); } int start() { datetime TimeC=iTime(NULL,TF,0); if(TimeN==0)TimeN=TimeC; if(TimeN==TimeC) return(0); TimeN=TimeC; // Код программы исполняется при появлении нового бара return(INIT_SUCCEEDED); } その場合、効果はあるんですよね? このコードをコンパイルしてみましたか?OnInit()の中でTimeNという変数が宣言されており、OnInit()を終了するとこの変数は破棄されます。 そのためOnTick()関数で エラーが発生しています。'TimeN' - undeclared identifier以下は、その動作コードです。//+------------------------------------------------------------------+ //| Test.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- static datetime TimeN; datetime TimeC=iTime(NULL,PERIOD_M1,0); if(TimeN==TimeC) return; TimeN=TimeC; // новый бар, выполняем код Print("New bar"); return; } //+------------------------------------------------------------------+ Aleksey Vyazmikin 2015.09.18 05:47 #4400 Karputov Vladimir: このコードをコンパイルしてみましたか?OnInit()内で変数TimeNが宣言されており、この変数はOnInit()の終了時に破棄されます。 したがって、OnTick()関数 内でエラーが発生するのです。 以下は、動作するコードです。int OnInit() の前、つまり外部変数などが宣言されて いる部分にstatic datetime TimeN=0;と書きました。 1...433434435436437438439440441442443444445446447...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは 2015.09.17_19:07GMT+3 です。EAプログラムでダイナミックアレイの次元を設定しました。そして、コンパイラはエラーを出す。"コンマ期待"。また、プログラム文中に変数がある場合、--は「変数 such-and-such hides variable declaration at global level」という警告を出す。理解できない。ヘルプのように、すべてが正しく表示されているようです。以下は、コードの一部です。
//--- 最大バー価格の配列
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool)。
//--- リザーブ(reserve)で配列のサイズを設定します.
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
こんにちは 2015.09.17_19:07GMT+3 です。EAプログラムでダイナミックアレイの次元を設定しました。そして、コンパイラはエラーを出す。"コンマ期待"。そして、もしプログラムテキストの中に
私のコードを指しているのであれば、はい、私のコードは新しいバーをチェックしています。
私は、添付したコードに興味があります。
いただいたコードでは何もできない、というか動きません。エラーです。
この条件は一度だけ、つまり最初にプログラムを実行したときだけ機能します。この時点で、スタティック変数は 初期化されます。
あなたのコードの変数TimeNは永遠のゼロ(というより1970年1月1日の日付)に等しく、この永遠のゼロは現在のバーが開く時間に等しい変数TimeCと比較されるので、以下の条件はチェックする意味が全くありません。)
いただいたコードでは何もできない、というか動きません。エラーです。
この条件は一度だけ、つまりプログラムの初回起動時にのみ機能します。この時点で、スタティック変数は 初期化されます。
あなたのコードの変数TimeNは永遠のゼロ(というより1970年1月1日の日付)に等しく、この永遠のゼロは現在のバーの開始時間に等しい変数TimeCと比較されるので、以下の条件はチェックする意味が全くありません。)
今思うと、なんで書けばよかったんだろう...。をExpert Advisorに追加しました。
分かりやすい説明ありがとうございました
新しいバーがM1タイムフレーム上にある場合、メッセージを表示します。
私は完全なコードを与えていなかったことが判明した、正しいものは次のとおりです。
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
私は完全なコードを与えていなかったことが判明した、正しいコードは次のとおりです。
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
以下は、その動作コードです。
このコードをコンパイルしてみましたか?OnInit()内で変数TimeNが宣言されており、この変数はOnInit()の終了時に破棄されます。 したがって、OnTick()関数 内でエラーが発生するのです。
以下は、動作するコードです。
int OnInit() の前、つまり外部変数などが宣言されて いる部分にstatic datetime TimeN=0;と書きました。