エラー、バグ、質問 - ページ 2635 1...262826292630263126322633263426352636263726382639264026412642...3185 新しいコメント Aleksandr Prishenko 2020.02.05 10:03 #26341 このプラットフォーム(MT5)は、金融市場での取引用に設計されているのか、それともサーカスなのか?あなたのアップデートのために、いちいちコードをやり直さなければならないのですか?もう、うんざりです。 Vladislav Andruschenko 2020.02.05 10:06 #26342 Aleksandr Prishenko: このプラットフォーム(MT5)は、金融市場での取引用に設計されているのか、それともサーカスなのか?あなたのアップデートのために、いちいちコードをやり直さなければならないのですか?もう、うんざりです。 ふむ 具体的に何を見直せばいいのか、私もそうかもしれません。 アップデートについては何もしていないつもりなのですが・・・・・・・。 Aleksandr Prishenko 2020.02.05 10:15 #26343 #include <MovingAverages.mqh> //--- indicator settings #property indicator_separate_window #property indicator_buffers 6 #property indicator_plots 4 //--- plot Value #property indicator_label1 "Volume;Volume1" #property indicator_type1 DRAW_FILLING #property indicator_color1 clrBlue,clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //--- plot Middle #property indicator_label2 "Middle line" #property indicator_type2 DRAW_LINE #property indicator_color2 clrMediumOrchid #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot OverBought #property indicator_label3 "Bands upper" #property indicator_type3 DRAW_LINE #property indicator_color3 clrDeepPink #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- plot OverSold #property indicator_label4 "Bands lower" //нижняя линия #property indicator_type4 DRAW_LINE #property indicator_color4 clrDeepPink #property indicator_style4 STYLE_SOLID #property indicator_width4 1 //--- enum OSCILLATOR_NAME { MACD, // MACD MOMENTUM, // Momentum RSI, // RSI MFI, // MFI AC // AC }; //--- enum LEVEL_MODE { CONST_VALUE_MODE, // Constant level value mode MA_MODE, // Moving Average mode BB_MODE // Bollinger Bands Mode }; //--- enum DRAW_MODE { LINE, // Line FILLING, // Filling HISTOGRAM // Histogram }; //--- input parameters input ENUM_TIMEFRAMES TF_Oscillator = PERIOD_CURRENT; // TIMEFRAMES Oscillator input OSCILLATOR_NAME InpOscillator = MACD; // Oscillator input int InpOscPeriod1 = 1; // MACD Fast EMA / Period for: RSI,MFI,Momentum input int InpOscPeriod2 = 34; // MACD Slow EMA input int InpOscPeriod3 = 1; // MACD Signal input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; // Applied price input ENUM_APPLIED_VOLUME InpVOLUME = VOLUME_TICK; //Applied Volume for MFI input DRAW_MODE InpDrawMode = LINE; // Draw Mode input int InpLevelsPeriod = 40; // Levels Period Upper input int InpLevelsPeriod1 = 35; // Levels Period Lower input double InpLevelsIndent = 3.0; // Deviation Upper input double InpLevelsIndent1 = 4.0; // Deviation Lower LEVEL_MODE InpLevelsMode = BB_MODE; // Levels Mode bool InpIndentAutoCorrection = true; // Levels Auto Correction //input string InpDivider = "---For Stochastic or MACD---"; // Just Divider NOT Parameter //input ENUM_STO_PRICE InpStochPrice = STO_LOWHIGH; // Stochastic Price //--- indicator buffers double ExtBuffer1[]; //Line double ExtBuffer2[];//Middle double ExtBuffer3[];//Upper double ExtBuffer4[];//Lowe double ExtBuffer5[]; double ExtBuffer6[]; //--- global variables int oscPeriod1; int levelsPeriod; int levelsPeriod1; int minRequiredBars; int oscHandle; int oscPeriod2; int oscPeriod3; double midValue; double addValue; double levelsIndent,levelsIndent1 ; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if ( InpOscPeriod1 < 1 ) { oscPeriod1 = 14; printf("Incorrected input parameter InpOscPeriod1 = %d. Indicator will use value %d.", InpOscPeriod1, oscPeriod1); } else { oscPeriod1 = InpOscPeriod1; } if ( InpLevelsPeriod < 1 ) { levelsPeriod = 10; printf("Incorrected input parameter InpLevelsPeriod = %d. Indicator will use value %d.", InpLevelsPeriod, levelsPeriod); } else { levelsPeriod = InpLevelsPeriod; } if ( InpLevelsPeriod1 < 1 ) { levelsPeriod = 10; printf("Incorrected input parameter InpLevelsPeriod = %d. Indicator will use value %d.", InpLevelsPeriod, levelsPeriod); } else { levelsPeriod1 = InpLevelsPeriod1; } if ( InpOscPeriod2 < 1 ) { oscPeriod2 = 3; printf("Incorrected input parameter InpOscPeriod2 = %d. Indicator will use value %d.", InpOscPeriod2, oscPeriod2); } else { oscPeriod2 = InpOscPeriod2; } if ( InpOscPeriod3 < 1 ) { oscPeriod3 = 3; printf("Incorrected input parameter InpOscPeriod3 = %d. Indicator will use value %d.", InpOscPeriod3, oscPeriod3); } else { oscPeriod3 = InpOscPeriod3; } levelsIndent = MathAbs(InpLevelsIndent);// Levels Indent / Deviation levelsIndent1 = MathAbs(InpLevelsIndent1);// Levels Indent / Deviation //--- minRequiredBars = 20; // oscPeriod1 + oscPeriod2 + oscPeriod3 + levelsPeriod - 1; //--- indicator buffers mapping SetIndexBuffer(0, ExtBuffer1, INDICATOR_DATA); SetIndexBuffer(1, ExtBuffer2, INDICATOR_DATA); SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); SetIndexBuffer(3, ExtBuffer4, INDICATOR_DATA); SetIndexBuffer(4, ExtBuffer5, INDICATOR_DATA); SetIndexBuffer(5, ExtBuffer6, INDICATOR_DATA); //--- string shortname = "Oscillator For BBS: "; //--- switch ( InpOscillator ) { case MACD: oscHandle = iMACD(_Symbol, TF_Oscillator, oscPeriod1, oscPeriod2, oscPeriod3, InpAppliedPrice); midValue = 0.0; shortname += "MACD (" + (string)oscPeriod1 + ", " + (string)oscPeriod2 + ", " + (string)oscPeriod3 + ")"; break; case MOMENTUM: oscHandle = iMomentum(_Symbol, TF_Oscillator, oscPeriod1, InpAppliedPrice); midValue = 100.0; levelsAutoCorrect(0.03, 5.0, 0.5); shortname += "Momentum (" + (string)oscPeriod1 + ")"; break; case RSI: oscHandle = iRSI(_Symbol, TF_Oscillator, oscPeriod1, InpAppliedPrice); midValue = 50.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "RSI (" + (string)oscPeriod1 + ")"; break; case MFI: oscHandle = iMFI(_Symbol, TF_Oscillator, oscPeriod1, InpVOLUME); midValue = 50.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "MFI (" + (string)oscPeriod1 + ")"; break; case AC: oscHandle = iAC(_Symbol,0); midValue = 0.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "AC"; break; default: oscHandle = INVALID_HANDLE; Print("Unknown Oscillator!"); return(-1); } //--- switch ( InpDrawMode ) { case FILLING: SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING); break; case HISTOGRAM: SetIndexBuffer(2, ExtBuffer3, INDICATOR_COLOR_INDEX); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_COLOR_HISTOGRAM2); break; case LINE: default: SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE); break; } //--- IndicatorSetString(INDICATOR_SHORTNAME, shortname); //--- return(0); } //+------------------------------------------------------------------+ //| Levels indent / deviation correction function | //+------------------------------------------------------------------+ void levelsAutoCorrect(double minIndent, double maxIndent, double correctIndent) { //--- if ( InpLevelsMode == BB_MODE ) { if ( levelsIndent > 4.0 ) { levelsIndent = 2.0; printf("Incorrected deviation input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent); } if ( levelsIndent1 > 4.0 ) { levelsIndent1 = 2.0; printf("Incorrected deviation input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent1); } } else { if ( levelsIndent < minIndent || levelsIndent > maxIndent ) { levelsIndent = correctIndent; printf("Incorrected indent input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent); } if ( levelsIndent1 < minIndent || levelsIndent1 > maxIndent ) { levelsIndent1 = correctIndent; printf("Incorrected indent input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent1); } } //--- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 &tick_volume[], const long &volume[], const int &spread[]) { //--- int startBar, calculated, toCopy; //--- if ( rates_total < minRequiredBars ) { Print("Not enough bars for calculation."); return(0); } //--- calculated = BarsCalculated(oscHandle); if ( calculated < rates_total ) { Print("Not all data of oscHandle is calculated (", calculated, " bars. Error #", GetLastError()); return(0); } //--- if ( prev_calculated > rates_total || prev_calculated <= 0 ) { startBar = minRequiredBars; toCopy = rates_total; } else { startBar = prev_calculated - 1; toCopy = rates_total - prev_calculated; if ( prev_calculated > 0 ) { toCopy += 1; } } //--- if ( CopyBuffer(oscHandle, 0, 0, toCopy, ExtBuffer1) <= 0 ) { Print("Getting Oscillator is failed. Error #", GetLastError()); return(0); } //--- if ( InpLevelsMode != CONST_VALUE_MODE ) { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SimpleMAOnBuffer(rates_total, prev_calculated, oscPeriod1+levelsPeriod, levelsPeriod, ExtBuffer1, ExtBuffer2); } //--- for ( int bar = startBar; bar < rates_total; bar++ ) { double value, sum = 0.0, sum1 = 0.0; double middleLine, indent, indent1; //--- switch ( InpLevelsMode ) { case MA_MODE: middleLine = ExtBuffer2[bar]; indent = levelsIndent; indent1 = levelsIndent1; break; case BB_MODE: //просмотреть формулу middleLine = value = ExtBuffer2[bar]; for ( int i = bar - levelsPeriod + 1; i <= bar; i++ ) { sum += MathPow(ExtBuffer1[i]-value, 2); } indent = levelsIndent * MathSqrt(sum/levelsPeriod); for ( int k = bar - levelsPeriod1 + 1; k <= bar; k++ ) { sum1 += MathPow(ExtBuffer1[k]-value, 2); } indent1 = levelsIndent1 * MathSqrt(sum/levelsPeriod1); break; case CONST_VALUE_MODE: default: middleLine = ExtBuffer2[bar] = midValue; indent = levelsIndent; indent1 = levelsIndent1; break; } //--- switch ( InpDrawMode ) { case LINE: ExtBuffer3[bar] = middleLine + indent; //Upper ExtBuffer4[bar] = middleLine - indent1; //Lowe break; case FILLING: ExtBuffer3[bar] = middleLine; ExtBuffer4[bar] = middleLine + indent; ExtBuffer5[bar] = middleLine - indent1; break; case HISTOGRAM: if ( ExtBuffer1[bar] >= ExtBuffer2[bar] ) { ExtBuffer3[bar] = 0; } else { ExtBuffer3[bar] = 1; } ExtBuffer4[bar] = middleLine; ExtBuffer5[bar] = middleLine + indent; ExtBuffer6[bar] = middleLine - indent1; break; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ このようなエラーは、何度かビルドしている間に見なくなりました。 case BB_MODE: middleLine = value = ExtBuffer2[bar]; for ( int i = bar - levelsPeriod + 1; i <= bar; i++ ) { sum += MathPow(ExtBuffer1[i]-value, 2); 2020.02.05 10:56:13.220 Core 1 2017.11.01 00:00:00 array out of range in 'Oscillator For BBS.mq5' (308,41) Vladislav Andruschenko 2020.02.05 10:35 #26344 Aleksandr Prishenko: このようなエラーは、何度かビルドしていますが、見たことがありません。 2020.02.05 10:56:13.220 Core 1 2017.11.01 00:00:00 array out of range in 'Oscillator For BBS.mq5' (308,41) А...なるほど...。 まあアップデートとは関係ないんでしょうけど。その理由を考えなければならない......。 Aleksandr Prishenko 2020.02.05 11:05 #26345 Vladislav Andruschenko: А...なるほど...。 まあ、アップデートとは関係ないんでしょうけど。理由を考えなければ......。 5年以上使えています))コードは変わっていない) Grigori.S.B 2020.02.05 11:14 #26346 Aleksandr Prishenko: 5年以上使えています))コードは変更されていません) プラットフォームのアップデートによるエラーというのは全く成り立ちませんね。アレイから 外れる Aleksey Vyazmikin 2020.02.05 13:25 #26347 Evgeny Potapov: こんにちは。 バッチファイルでMT4を動かしたいのですが、どうすればいいですか? どうすればいいのか、なぜ私のコードがうまくいかないのか、教えてください。 せいぜいMT4が数台動く程度で、あとはハングアップしてしまう。 もちろん、RAMが不足することはありません。 さらに、異なるPCで試したところ ひょっとして、ポータブルモードキーが必要なのでしょうか? 全端末を手動で起動するのでしょうか? Roman 2020.02.05 14:57 #26348 Alexey Viktorov: ローマン、あなたがドキュメントを 読もうとしない基本的な姿勢に引っかかったのはこれで2度目です。 また、記憶が正しければ、mql4のドキュメントには、変数を配列のサイズとして使ってはいけないと明記されていました。 全く同じではありませんが、とにかくドキュメントを引用していただきありがとうございます。 Roman 2020.02.05 15:12 #26349 Koldun Zloy: 開発者ではありませんが、コメントさせていただきます。 静的配列の 場合、コンパイラはコンパイル時に一定数のバイトをメモリに確保する必要があります。 コンパイル時にrowとcolが未知の場合、コンパイラはどの程度のメモリを確保すべきでしょうか? 呼び出し時にパラメータが省略された場合のみ、初期値が使用される。実際のパラメータは、実行時にしかわからない。 だから、ギミックはなく、言語を学ぶこと。 その通りだと思います、ありがとうございます、私も同じことを考えていました。 Cの例は、まさに私の指針になります。 int N, M; int i, j; scanf("%d", &N); scanf("%d", &M); int A[N][M]; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { A[i][j] = 10 + rand() % (20 - 10 + 1); printf("%d ", A[i][j]); } } puts("\n"); しかし、最近のコンパイラはより厳しくなっているらしい。 このコードをVSで確認したところ、配列のメモリが未割り当てであることも訴えました。 もしかしたら、このサンプルは他のコンパイラを想定しているのか、それとも言語規格に依存した時代遅れのものなのか? Andrey Dik 2020.02.05 17:40 #26350 mql5.comのページヘッダーで、プロフィールボタンの横に3つのアイコンが表示されるようになりました。 1.お気に入り 2.フィード 3.メッセージ もう一つ、こんな感じのアイコンを追加してください。 4.お金 その日のうちに受け取ったすべての資金(マーケット、フリーランスなど)の金額が表示されれば、とても便利なのに、今はそのためにプロフィールから利用可能残高を確認しなければならない。 1...262826292630263126322633263426352636263726382639264026412642...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このプラットフォーム(MT5)は、金融市場での取引用に設計されているのか、それともサーカスなのか?あなたのアップデートのために、いちいちコードをやり直さなければならないのですか?もう、うんざりです。
このプラットフォーム(MT5)は、金融市場での取引用に設計されているのか、それともサーカスなのか?あなたのアップデートのために、いちいちコードをやり直さなければならないのですか?もう、うんざりです。
ふむ
具体的に何を見直せばいいのか、私もそうかもしれません。
アップデートについては何もしていないつもりなのですが・・・・・・・。
このようなエラーは、何度かビルドしている間に見なくなりました。
このようなエラーは、何度かビルドしていますが、見たことがありません。
А...なるほど...。
まあアップデートとは関係ないんでしょうけど。その理由を考えなければならない......。
А...なるほど...。
まあ、アップデートとは関係ないんでしょうけど。理由を考えなければ......。
5年以上使えています))コードは変わっていない)
5年以上使えています))コードは変更されていません)
プラットフォームのアップデートによるエラーというのは全く成り立ちませんね。アレイから 外れる
こんにちは。
バッチファイルでMT4を動かしたいのですが、どうすればいいですか?
どうすればいいのか、なぜ私のコードがうまくいかないのか、教えてください。
せいぜいMT4が数台動く程度で、あとはハングアップしてしまう。
もちろん、RAMが不足することはありません。
さらに、異なるPCで試したところ
ひょっとして、ポータブルモードキーが必要なのでしょうか?
全端末を手動で起動するのでしょうか?
ローマン、あなたがドキュメントを 読もうとしない基本的な姿勢に引っかかったのはこれで2度目です。
また、記憶が正しければ、mql4のドキュメントには、変数を配列のサイズとして使ってはいけないと明記されていました。
全く同じではありませんが、とにかくドキュメントを引用していただきありがとうございます。
開発者ではありませんが、コメントさせていただきます。
静的配列の 場合、コンパイラはコンパイル時に一定数のバイトをメモリに確保する必要があります。
コンパイル時にrowとcolが未知の場合、コンパイラはどの程度のメモリを確保すべきでしょうか?
呼び出し時にパラメータが省略された場合のみ、初期値が使用される。実際のパラメータは、実行時にしかわからない。
だから、ギミックはなく、言語を学ぶこと。
その通りだと思います、ありがとうございます、私も同じことを考えていました。
Cの例は、まさに私の指針になります。
しかし、最近のコンパイラはより厳しくなっているらしい。
このコードをVSで確認したところ、配列のメモリが未割り当てであることも訴えました。
もしかしたら、このサンプルは他のコンパイラを想定しているのか、それとも言語規格に依存した時代遅れのものなのか?
mql5.comのページヘッダーで、プロフィールボタンの横に3つのアイコンが表示されるようになりました。
1.お気に入り
2.フィード
3.メッセージ
もう一つ、こんな感じのアイコンを追加してください。
4.お金
その日のうちに受け取ったすべての資金(マーケット、フリーランスなど)の金額が表示されれば、とても便利なのに、今はそのためにプロフィールから利用可能残高を確認しなければならない。