エラー、バグ、質問 - ページ 1093 1...108610871088108910901091109210931094109510961097109810991100...3185 新しいコメント Anatoli Kazharski 2014.01.14 19:52 #10921 zfs: コードに色が設定されているのに、そこは空。とはいえ、ポジティブな結果が出たのに、それが消えてしまったのだから、どんなにバカバカしくてもね)。 そして、問題を再現する短いコードがあれば、それを解決するのに役立ちます。 Vasiliy Smirnov 2014.01.15 02:22 #10922 tol64: それから、問題を再現する短いコードが役に立ちます。#property indicator_separate_window #property indicator_buffers 6 // Количество буферов для расчёта индикатора #property indicator_plots 2 // Количество графических серий #property indicator_label1 "Open;High;Low;Close" //перечисление методов отображения индикатора enum ViewInd { Line, // линии Bar, // бары Candles // свечи }; input ViewInd _ViewInd= Line; //вид индикатора double op[],cl[],hi[],lo[],s[]; double buffer_color_line[];//Буфер для индекса цвета int OnInit() { for (int i=0;i<=5;i++) PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0); ArrayInitialize(op,0);ArrayInitialize(cl,0); ArrayInitialize(hi,0);ArrayInitialize(lo,0); ArrayInitialize(s,0); if(_ViewInd==Line){ SetIndexBuffer(5,s,INDICATOR_DATA);//Привязка массива к буферу PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_LINE); PlotIndexSetInteger(5,PLOT_LINE_STYLE,STYLE_SOLID); PlotIndexSetInteger(5,PLOT_LINE_COLOR,clrRed); ArraySetAsSeries(s,true); } else{ SetIndexBuffer(0,op,INDICATOR_DATA); SetIndexBuffer(1,hi,INDICATOR_DATA); SetIndexBuffer(2,lo,INDICATOR_DATA); SetIndexBuffer(3,cl,INDICATOR_DATA); SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX);//Сопоставляем массив-буфер индексов цветов с буфером индикатора ArraySetAsSeries(op,true); ArraySetAsSeries(hi,true); ArraySetAsSeries(lo,true); ArraySetAsSeries(cl,true); ArraySetAsSeries(buffer_color_line,true); //Задаем количество индексов цветов для графического построения PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2); if (_ViewInd==Candles)PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); else PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_BARS); //Задаем цвет для каждого индекса PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue); //Нулевой индекс -> Синий PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrOrange); //Первый индекс -> Оранжевый } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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 limit;//MQL 4 RULEZZZ int counted_bars=prev_calculated; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=rates_total-counted_bars; for (int i=0;i<limit;i++){ if(_ViewInd==Line)s[i]=MathRand(); else{ op[i]=MathRand(); cl[i]=MathRand(); if (op[i]>cl[i])buffer_color_line[i]=1;else buffer_color_line[i]=0; hi[i]=32767; lo[i]=0; } } return(rates_total); } //+------------------------------------------------------------------+ こんな感じです。 Andrew Petras 2014.01.15 12:18 #10923 zfs: こんな感じ。ショートネームの後の値は、このように表示されます。for (int i=0;i<=5;i++) {PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0);};これは、バッファの中の順番についてです。https://www.mql5.com/ru/forum/12882#comment_539990 В каком порядке делать SetIndexBuffer() и зависит ли он он порядка директив #property indicator_x ? www.mql5.com может ли кто-то на пальцах обьяснить правила привязки индикаторного буфера к опр. Vasiliy Smirnov 2014.01.15 12:58 #10924 そして、それがどのように私を助けるのか、私は何も理解していません)。何かを変えればうまくいくのですが、それでも曲がっているので、もっと詳しく知りたいです。 Anatoli Kazharski 2014.01.15 13:02 #10925 zfs: こんな感じです。完全なカオスと混乱。)これが作業バージョンです(間違いを訂正し、ブラッシュアップしています)。//+------------------------------------------------------------------+ //| #Test.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window //--- #property indicator_buffers 5 // Количество буферов для расчёта индикатора #property indicator_plots 1 // Количество графических серий //--- #property indicator_color1 clrDodgerBlue,C'0,50,100' //--- Перечисление методов отображения индикатора enum ViewInd { Line, // линии Bar, // бары Candles // свечи }; //--- Внешние параметры input ViewInd _ViewInd=Line; // Вид индикатора //--- double op[],cl[],hi[],lo[]; double buffer_color_line[]; // Буфер для индекса цвета //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(_ViewInd==Line) { //--- Привязка массива к буферу SetIndexBuffer(0,cl,INDICATOR_DATA); //--- PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); } else { SetIndexBuffer(0,op,INDICATOR_DATA); SetIndexBuffer(1,hi,INDICATOR_DATA); SetIndexBuffer(2,lo,INDICATOR_DATA); SetIndexBuffer(3,cl,INDICATOR_DATA); //--- Сопоставляем массив-буфер индексов цветов с буфером индикатора SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX); //--- if(_ViewInd==Candles) PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); else PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_BARS); } //--- Установим метки для текущего таймфрейма // В режиме линия только цена закрытия if(_ViewInd==Line) PlotIndexSetString(0,PLOT_LABEL,"Close"); //--- В других режимах все цены баров/свеч // В качестве разделителя используется ";" else if(_ViewInd==Bar || _ViewInd==Candles) PlotIndexSetString(0,PLOT_LABEL,"Open;"+"High;"+"Low;"+"Close"); //--- PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); //--- ArrayInitialize(op,0); ArrayInitialize(cl,0); ArrayInitialize(hi,0); ArrayInitialize(lo,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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 limit=0; //MQL 4 RULEZZZ //--- if(prev_calculated==0) limit=0; else limit=prev_calculated-1; //--- for(int i=limit; i<rates_total; i++) { if(_ViewInd==Line) cl[i]=MathRand(); else { op[i]=MathRand(); cl[i]=MathRand(); hi[i]=32767; lo[i]=1; //--- if(op[i]>cl[i]) buffer_color_line[i]=1; else buffer_color_line[i]=0; } } //--- return(rates_total); } //+------------------------------------------------------------------+ Andrew Petras 2014.01.15 13:12 #10926 仕組みif(_ViewInd==Line){ } else{ if (_ViewInd==Candles) elseもしenum ViewInd { Line, // линии Bar, // бары Candles // свечи }; ?すべての条件とブラケットを再確認し、ループなしで、上記のリンクから順番にバッファのプロパティをリニアに設定します。 Anatoli Kazharski 2014.01.15 13:14 #10927 Silent:...すべての条件とブラケットを再確認し、上記のリンクから順番に、ループなしでバッファのプロパティを線形に設定します。 そこにループは全く必要ありません。より正確には、このプロパティは、すべてのマッピングオプションにおいて、1つのバッファに対してのみ設定する必要があります。 Andrew Petras 2014.01.15 13:17 #10928 tol64: ループは全く必要ありません。 一般的にはそうですが、バッファがたくさんある場合は短くなります :-) 私はそんなことはしませんが。リニアな肖像画の方が読みやすいんです。 Anatoli Kazharski 2014.01.15 13:19 #10929 Silent: 一般的にはそうですが、バッファがたくさんある場合は、ちょっと短くなりますね :-) 私はそんなことしませんが。リニアなポートマンタの方が読みやすいんです。 実際、バッファの数は非常に多く(最大512個)、ループのない編み目を読み取るのはかなり困難です。) このバリエーションでは、バッファは1つだけです。 Vasiliy Smirnov 2014.01.15 13:33 #10930 tol64: ループは全く必要ありません。 素晴らしい)。ありがとうございます。時計仕掛けのように。コニャックが冷えている)。 1...108610871088108910901091109210931094109510961097109810991100...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コードに色が設定されているのに、そこは空。とはいえ、ポジティブな結果が出たのに、それが消えてしまったのだから、どんなにバカバカしくてもね)。
それから、問題を再現する短いコードが役に立ちます。
こんな感じ。
ショートネームの後の値は、このように表示されます。
これは、バッファの中の順番についてです。https://www.mql5.com/ru/forum/12882#comment_539990こんな感じです。
完全なカオスと混乱。)これが作業バージョンです(間違いを訂正し、ブラッシュアップしています)。
仕組み
もし
?
すべての条件とブラケットを再確認し、ループなしで、上記のリンクから順番にバッファのプロパティをリニアに設定します。
...
すべての条件とブラケットを再確認し、上記のリンクから順番に、ループなしでバッファのプロパティを線形に設定します。
ループは全く必要ありません。
一般的にはそうですが、バッファがたくさんある場合は、ちょっと短くなりますね :-) 私はそんなことしませんが。リニアなポートマンタの方が読みやすいんです。
ループは全く必要ありません。