エラー、バグ、質問 - ページ 31

 
Urain:
できるのですが、3つ設定すると、ショートネームに3つの値が表示され、メインバッファの1つだけが欲しいのですが、うまくいくこともあります。

じゃあ、こんな感じかな。

#property indicator_buffers 3
#property indicator_plots   1
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,S,INDICATOR_CALCULATIONS);

グラフには1つの値のみが表示されます。

 
DC2008:

そうすると、もしかしたらこんな風になるのかもしれません。

チャートには1つの値しか表示されません。

このように、インジケーターの略称は3つの数字を表示し、1つ描画するためのバッファには、必要なものをすべて保存していることがわかります。

問題は、4では目的のバーの波の値を要求すればよいのですが、ここではバッファ全体をダウンロードしてどこかに保存しなければならないことです。

このストレージは、インジケーターのニーズには必要ありません。でも、波動値の受け取り方がわからないんです。

 
DC2008:

じゃあ、こんな感じかな。

グラフには1つの値のみが表示されます。

また、不具合もある・・・。
 
Interesting:

そこは初期化の話じゃないんです。マシェックが呼ぶのは、その2行のことでもないんです。

仮にSYMBOLパラメータが本当に必要だと仮定しても(個人的には疑問ですが)、バッファを使った作業はダサいし、電卓ブロックの話でもないのですが...。

インジケータが動作している間違った計測器の線形回帰 角の値を表示していますね。

と入力に規定されているものなので、うまくいけばチェッカーを隠すことができます。

では、逆に、計算で起こることのどこが不自然だと思うのか、知的に教えてください。

私はそれがすべて正しいと主張しているわけではありません(ちょうど学習5と自然蒸し、多くのように)。

まず思いつくのは、ペアによって履歴の長さが違うため、不具合が出るということです。

しかし、開発者は「必要なデータはすべて端末が勝手に読み込んでくれる」と断言した。

 
Urain:

問題は、4では必要なバーの波形の値を要求すればよいのですが、ここではバッファ全体を読み込まなければならないことです。

問題は、4では必要なバーの波の値を要求すればよいのですが、ここではバッファ全体をダウンロードし、どこかに保存しなければならないことです。

バッファごと読み込まなければならないが、インジケーターの必要性からすると必要ない。別の方法で入手する方法がわからない。

正しく、あるいはほぼ正しく仕上げることができるんです。他のすべてのバッファについては、我々は(シリーズが使用されていない、何が奇妙である)うまくいくかもしれません。でも、電卓の中身はどうなっているのか、大きな疑問です...。
 
Urain:

インジケータが動作している間違った計測器の線形回帰角の値を表示していますね。

が、直感で規定されているものなので、うまくいけばチェッカーが隠れる。

さて、寒い中、理路整然と、計算で起こることのどこが不条理だと思うのか、教えてください。

私はそれがすべて正しいと主張しているわけではありません(ちょうど五を学び、自然に蒸すように、多くのように)。

まず最初に思いつくのは、異なる組での履歴の長さが異なるため、不具合が出るということです。

必要な情報はすべて端末が勝手に読み込んでくれるというのが、開発者の安心感です。


何を議論する必要があるのでしょうか?電卓の帽子を取って、そこに見えるものを見てみると、こんな感じです。

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 count=rates_total-prev_calculated;
   if(count==0)count=1;
パスワードがわからない場合は、警告が表示されます。だから教えてくれ、どこに論理があるんだ?
 

こんな風に計算を書き換えてみました。

  {
//---
   int count=rates_total-prev_calculated;
   if(count>_Bars())count=_Bars()-1;
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<count;i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){return(Bars(symbol,_Period));}
エラーメッセージは出なくなったが、まだ正常に動作しない。
 

ここで、同じような七面鳥に頭を悩ませた。そこから生まれたものを見てください

 
Urain:

こんな風に計算を書き換えてみました。

のエラー記録は消えたが、まだ正常に動作しない。

唯一の正しい方法は、とてもシンプルです。

100%動作するインジケータを書き、「シンボル」パラメータなしで古典的に行う、つまり、現在のシンボルと期間を使用して計算するのです。

その後、Expert Advisor(機械的な操作が可能な場合)または電卓(NON-CALCULATORのグラフに情報を表示する必要がある場合)において、このBASIC電卓が呼び出される。

追記

そうでなければ、電卓や別の関数で追加計算をし、その結果を現在のグラフデータにリンクさせなければならないとしたら...。

 
Urain:

こんな風に計算を書き換えてみました。

エラーメッセージは出なくなったが、まだ正常に動作しない。

そのほうがいいかもしれませんね。

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| 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 count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

正常に動作しているようです。