エラー、バグ、質問 - ページ 1986 1...197919801981198219831984198519861987198819891990199119921993...3185 新しいコメント Anatoli Kazharski 2017.09.04 18:08 #19851 Alexey Kozitsyn:初回実行時にOnCalculate()で初期化がある(prev_calculated == 0)。OnInit()に移動することで何か変わると思いますか?まあ、もちろん努力はしますが、これは空想の域を出ないものなので......。カットする。やはり、OnDeinit()で配列を初期化 し、次の起動時(入力パラメータ変更時)には使用しないようにしました。これ(バッファとして使用しない配列の初期化)が役に立てば-それもMTのバグでしょう。配列が使われていないだけでなく、(未割り当ての)配列が初期化される可能性があり、それが表示に影響することが判明するのでは...。 コードがないと難しい。その後、サービスデスクがどう言ったか教えてください。 削除済み 2017.09.04 18:09 #19852 Anatoli Kazharski: コードがないと難しいですね。その後、サービス部門から何か言われたら教えてください。 そうします。 削除済み 2017.09.04 18:46 #19853 Anatoli Kazharski: コードがないと難しいですね。サービスデスクが何と言ったか、後でここで教えてください。以下は、そのテストコードです。初期状態では、インジケータパラメータはfalseである。インジケータをチャートに貼り付けました。ヒストグラムを描画します。パラメータをtrueとした。ヒストグラムと矢印を描画します。パラメータをfalseにする。現在のTFでは、矢印が消えます(常にではありません)。異なるTFに切り替えると、初期化時にバッファがクリアされるにもかかわらず、いくつかのTFで矢印が無秩序に表示される。#property indicator_separate_window #property indicator_plots 3 #property indicator_buffers 4 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ input bool inpUseArrows=false; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double bufGisto[]; double bufGistoColor[]; double bufArrowUp[]; double bufArrowDn[]; //--- const double EMPTY=EMPTY_VALUE; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Размечаем массив цветов color colors[2]; colors[ 0 ]= clrLime; colors[ 1 ] = clrRed; //--- Устанавливаем параметры графических серий SetPlotParametersColorHistogram(0,0,bufGisto,bufGistoColor,false,"test gisto",colors,EMPTY,2); //--- Проверяем, нужно ли отображать объемы if(inpUseArrows) // Если отображать нужно { SetPlotParametersArrow(1,2,bufArrowUp,false,"test up",EMPTY,clrLime,233,10); SetPlotParametersArrow(2,3,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10); } //--- IndicatorSetInteger(INDICATOR_DIGITS,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(inpUseArrows) { ArrayInitialize(bufArrowUp,EMPTY); ArrayInitialize(bufArrowDn,EMPTY); } } //+------------------------------------------------------------------+ //| 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[]) { //--- if(prev_calculated==0) { ArrayInitialize(bufGisto,EMPTY); //--- if(inpUseArrows) { ArrayInitialize(bufArrowUp,EMPTY); ArrayInitialize(bufArrowDn,EMPTY); } //--- for(int i=0; i<rates_total; i++) { bufGisto[i]=(open[i]-close[i])/_Point; bufGistoColor[i]=(bufGisto[i]<0) ? 1 : 0; //--- if(inpUseArrows) { if(bufGisto[i]>20) bufArrowDn[i]=bufGisto[i]; else if(bufGisto[i]<-20) bufArrowUp[i]=bufGisto[i]; } } } else if(rates_total>prev_calculated) { bufGisto[rates_total-1]=EMPTY; //--- if(inpUseArrows) { bufArrowUp[ rates_total-1 ] = EMPTY; bufArrowDn[ rates_total-1 ] = EMPTY; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Параметры графического построения: цветная гист-а от 0 линии | //+------------------------------------------------------------------+ void SetPlotParametersColorHistogram(const int plotIndex,// Индекс графической серии const int bufferNum,// Номер первого буфера серии double& value[], // Буфер значений double& clr[], // Буфер цветов const bool asSeries, // Флаг нумерации как в таймсерии const string label, // Имя серии const color& colors[], // Цвета линии const double emptyValue = EMPTY_VALUE, // Пустые значения серии const int width = 0, // Толщина линии const ENUM_LINE_STYLE style = STYLE_SOLID, // Стиль линии const int drawBegin = 0, // Количество баров без отрисовки const int shift=0 // Сдвиг построения в барах ) { //--- Привязываем буферы SetIndexBuffer(bufferNum,value,INDICATOR_DATA); SetIndexBuffer(bufferNum+1,clr,INDICATOR_COLOR_INDEX); //--- Устанавливаем порядок нумерации в массивах-буферах ArraySetAsSeries(value,asSeries); ArraySetAsSeries(clr,asSeries); //--- Устанавливаем тип графического построения PlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_COLOR_HISTOGRAM); //--- Устанавливаем имя графической серии PlotIndexSetString(plotIndex,PLOT_LABEL,label); //--- Устанавливаем пустые значения в буферах PlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue); //--- Устанавливаем количество цветов индикатора const int size=ArraySize(colors); PlotIndexSetInteger(plotIndex,PLOT_COLOR_INDEXES,size); //--- Устанавливаем цвета индикатора for(int i=0; i<size; i++) PlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,i,colors[i]); //--- Устанавливаем толщину линии PlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width); //--- Устанавливаем стиль линии PlotIndexSetInteger(plotIndex,PLOT_LINE_STYLE,style); //--- Устанавливаем количество баров без отрисовки и значений в DataWindow PlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin); //--- Устанавливаем сдвиг графического построения по оси времени в барах PlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift); } //+------------------------------------------------------------------+ //| Параметры графического построения: стрелки | //+------------------------------------------------------------------+ void SetPlotParametersArrow(const int plotIndex,// Индекс графической серии const int bufferNum,// Номер первого буфера серии double &value[],// Буфер значений const bool asSeries,// Флаг нумерации как в таймсерии const string label,// Имя серии const double emptyValue=EMPTY_VALUE,// Пустые значения серии const color clr=clrRed,// Цвет стрелок const int arrowCode= 159,// Код стрелок const int arrowShift = 0,// Сдвиг стрелок по вертикали const int width=0,// Толщина стрелок const int drawBegin=0,// Количество баров без отрисовки const int shift=0 // Сдвиг построения в барах ) { //--- Привязываем буферы SetIndexBuffer(bufferNum,value,INDICATOR_DATA); //--- Устанавливаем порядок нумерации в массивах-буферах ArraySetAsSeries(value,asSeries); //--- Устанавливаем тип графического построения PlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_ARROW); //--- Устанавливаем имя графической серии PlotIndexSetString(plotIndex,PLOT_LABEL,label); //--- Устанавливаем пустые значения в буферах PlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue); //--- Устанавливаем цвет индикатора PlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,0,clr); //--- Устанавливаем код стрелок PlotIndexSetInteger(plotIndex,PLOT_ARROW,arrowCode); //--- Устанавливаем смещение стрелок по вертикали PlotIndexSetInteger(plotIndex,PLOT_ARROW_SHIFT,arrowShift); //--- Устанавливаем толщину стрелок PlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width); //--- Устанавливаем количество баров без отрисовки и значений в DataWindow PlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin); //--- Устанавливаем сдвиг графического построения по оси времени в барах PlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift); } //+------------------------------------------------------------------+ 削除済み 2017.09.04 18:48 #19854 Anatoli Kazharski: どこにも行かない。Servicedesk #1832411x64、1643。 Anatoli Kazharski 2017.09.04 19:18 #19855 Alexey Kozitsyn: どうにもこうにも入りません。サービスデスク #1832411x64、1643。矢印にバッファとして配列を指定しても、ハードワイヤードであることに変わりはない。#property indicator_plots 3 #property indicator_buffers 4//---また、矢印を表示する必要がない場合は、DRAW_NONE で表示しないようにすればよい。 この方法で試して みてください。... //--- Проверяем, нужно ли отображать объемы if(inpUseArrows) // Если отображать нужно { SetPlotParametersArrow(1,2,bufArrowUp,false,"test up",EMPTY,clrLime,233,10); SetPlotParametersArrow(2,3,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10); } else { //--- Устанавливаем тип графического построения PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_NONE); } ... 削除済み 2017.09.04 19:27 #19856 Anatoli Kazharski:矢印にバッファとして配列を指定しても、ハードワイヤードであることに変わりはない。//---また、矢印を表示する必要がない場合は、DRAW_NONE で表示しないようにすればよい。 このバリエーションを試してみて ください。と考えたのですが、ここにはデメリットがあります。配列は自動的にマークされ、展開されるため、リソースを消費します。開発者はバグを直させた方がいい。そして、ハードコーディングされているのはどうなんだろう...。もし私がグラフィカルシリーズにバッファをバインドしないなら、なぜ私はいくつかの未知のゴミを見ることができます。そうでない場合は、ダイナミックインジケータを正常に構築できないことが判明しました。最も理想的な選択肢は、deinitでバッファをクリーニングすること、それだけです。でも、クリアしてもどうにもならない...。 fxsaber 2017.09.04 21:36 #19857 MEでは、関数/メソッドのリストでALT+Mで戻り値の型を表示してください。 Konstantin 2017.09.05 06:18 #19858 他の言語で使われているように、文字列のタイプについて、通常の文字列と「生の」文字列の区別を導入するのが良いと思います。どうせ来るんだろうけど、最初の段階では、将来的にいろいろな問題がなくなるだろう。 例えば、Pythonはr "string " を使って「生の」文字列を作ります。 Andrey Dik 2017.09.05 06:35 #19859 テスターでログが完全に出力されない理由は何でしょうか?見ているものはすべて見て確認済みで、それに勝るものはありません。 fxsaber 2017.09.05 07:03 #19860 Andrey Dik:テスターでログが完全に表示されない原因は何ですか?見ることができるものはすべて-見て、確認し、倒すことができない。たくさんの応募がありました。ログファイルを参照してください。 1...197919801981198219831984198519861987198819891990199119921993...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
初回実行時にOnCalculate()で初期化がある(prev_calculated == 0)。OnInit()に移動することで何か変わると思いますか?まあ、もちろん努力はしますが、これは空想の域を出ないものなので......。
カットする。やはり、OnDeinit()で配列を初期化 し、次の起動時(入力パラメータ変更時)には使用しないようにしました。これ(バッファとして使用しない配列の初期化)が役に立てば-それもMTのバグでしょう。配列が使われていないだけでなく、(未割り当ての)配列が初期化される可能性があり、それが表示に影響することが判明するのでは...。
コードがないと難しいですね。その後、サービス部門から何か言われたら教えてください。
コードがないと難しいですね。サービスデスクが何と言ったか、後でここで教えてください。
以下は、そのテストコードです。
初期状態では、インジケータパラメータはfalseである。
インジケータをチャートに貼り付けました。ヒストグラムを描画します。
パラメータをtrueとした。
ヒストグラムと矢印を描画します。
パラメータをfalseにする。現在のTFでは、矢印が消えます(常にではありません)。異なるTFに切り替えると、初期化時にバッファがクリアされるにもかかわらず、いくつかのTFで矢印が無秩序に表示される。
どうにもこうにも入りません。サービスデスク #1832411x64、1643。
矢印にバッファとして配列を指定しても、ハードワイヤードであることに変わりはない。
//---
また、矢印を表示する必要がない場合は、DRAW_NONE で表示しないようにすればよい。
この方法で試して みてください。
矢印にバッファとして配列を指定しても、ハードワイヤードであることに変わりはない。
//---
また、矢印を表示する必要がない場合は、DRAW_NONE で表示しないようにすればよい。
このバリエーションを試してみて ください。
と考えたのですが、ここにはデメリットがあります。配列は自動的にマークされ、展開されるため、リソースを消費します。開発者はバグを直させた方がいい。
そして、ハードコーディングされているのはどうなんだろう...。もし私がグラフィカルシリーズにバッファをバインドしないなら、なぜ私はいくつかの未知のゴミを見ることができます。
そうでない場合は、ダイナミックインジケータを正常に構築できないことが判明しました。
最も理想的な選択肢は、deinitでバッファをクリーニングすること、それだけです。でも、クリアしてもどうにもならない...。
MEでは、関数/メソッドのリストでALT+Mで戻り値の型を表示してください。
他の言語で使われているように、文字列のタイプについて、通常の文字列と「生の」文字列の区別を導入するのが良いと思います。どうせ来るんだろうけど、最初の段階では、将来的にいろいろな問題がなくなるだろう。
例えば、Pythonはr "string " を使って「生の」文字列を作ります。テスターでログが完全に出力されない理由は何でしょうか?見ているものはすべて見て確認済みで、それに勝るものはありません。
テスターでログが完全に表示されない原因は何ですか?見ることができるものはすべて-見て、確認し、倒すことができない。
たくさんの応募がありました。ログファイルを参照してください。