[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 311

 
drknn:


1.変数Candlesはどこにも使われていない。

2.ライン

が正しく書かれていない。それはループの中にある。ループの各反復で、新しい変数Clsを作成する。そして、そこには必要ないのです。を書くだけです。


1.指摘し忘れましたが、インジケーター作業はまだ完了していません。しかし、いずれにせよ、この特定の機能の動作に何ら影響を与えるものではありません。

2.最初はそんな感じでしたね。しかし、エラーが出るようになったので、配列から配列へのデータの受け渡しに何らかの問題があるのではないかと考えました。

 
drknn:

というセリフを試してみてください。

に置き換える。


役に立たなかった。エラーは相変わらずです。
 
drknn:
もうひとつあります。配列次元の1つに4セル次元を宣言した場合、Buffer_OHLC[4][]を呼び出すことはできません - ポイントは、番号が1ではなく、0から始まるということです。つまり、呼べる最大値はBuffer_OHLC[3][]; 。


ゼロセルは空のままでも良い。同じような例が教科書に書かれていた。まあ、一般的には、配列のサイズを変えても、エラーは残ります。

PS インジケータは、他のツールからデータを取得し、現在のツールに適用する必要があります。もしかしたら、この課題を解決するときに、私は根本的に間違ったことをやっているのではないか?

 
silhouette:


ヌルセルも空のままでよい。同じような例が教科書に書かれていた。まあ、一般的には、配列のサイズを変更しても、エラーは続くのですが。

PS インジケータは、他のツールからデータを取得し、現在のツールに適用する必要があります。もしかしたら、この問題を解決するときに、私は根本的に間違ったことをしているのでしょうか?

単に2次元配列で正しく動作していないだけです

 

1.最初のインデックスと2番目のインデックスを入れ替える

2.ArrayResizeを使用 する

 
silhouette:


ゼロセルは空のままでも良い。同じような例が教科書に書かれていた。まあ、一般的には、配列のサイズを変えても、エラーは残ります。

PS インジケータは、他のツールからデータを取得し、現在のツールに適用する必要があります。もしかしたら、この課題を解決するときに、私は原理的に何か間違っているのでしょうか?


Buffer_OHLC[4][]配列を宣言 していますね。配列の存在しないセル、つまり Buffer_OHLC[4][i] を指定しています。そこにある最大のものはBuffer_OHLC[3][i]である。

説明しますと、配列の2次元目に4つのセルを宣言しました(例えば、無限の列数を持つあるテーブルの4行とします)。番号は0から始まるので、アクセスできる最初の行はBuffer_OHLC[0][]、2番目はBuffer_OHLC[1][]、3番目はBuffer_OHLC[2][]、そして4番目はBuffer_OHLC[3][]です。Buffer_OHLC[4][]という行が、宣言した配列に存在しない!

 
また、i>0 のとき、[3,i] は存在しない。)
 

ブレーキは気にしないでください、多次元配列を扱うのは初めてです :)

drknnさん、 ありがとうございますコメント了解です

tara:

1.最初のインデックスと2番目のインデックスを入れ替える

2. ArrayResizeを使用する

ありがとうございました。結果が出ました。しかし、ArrayResize関数と 配列の1次元目のサイズについても明らかにしたいと思います。

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

limit-1を使用した場合、グラフは表示されますが、4051 "Invalid value of function parameter "というエラーがポップアップ表示されます。

 
どなたか、バーの任意の時間に注文を出し、次のバーで次の注文を出すだけの方法を教えてください。
 
silhouette:

ブレーキは気にしないでください、多次元配列を扱うのは初めてです :)

多次元配列は別物だと思った方が方向性が定まりやすい。すなわち、アレイの本質を捉えたモデルが見つかれば、そのモデルは目の前に置いておきやすくなるのです。

1次元の配列は、線(0から始まる座標線)上のオブジェクトです。このような配列の例としては、ショップの行列が挙げられる。列の先頭は、今買っている人のすぐ後ろに立っている人です。買っている人は、列の先頭とは呼べない--買っているのだから、ゼロなのである。一次元配列のゼロセル内にいる。

2次元配列は平面(座標平面)上のオブジェクトである。例えば、講堂がそうです。こんな列、こんな場所。このモデルに行の0と席の0を加えれば、2次元配列の厳密なモデルができあがります。

3次元配列は、空間(座標空間)上のオブジェクトであり、オブジェクトの座標は3つの値で与えられます。立方体で、面を持つ。モデルとしては、エントランス番号0、フロア番号0、フラット番号0(中略)の住宅を想定しています。ただし、各エントランスのフラット番号は0から始まるものとする。

4次元配列は、1次元配列と似ています。座標線であり、そのすべての点は3次元配列である。モデルはストリートです。座標配列は、家屋番号、玄関番号、階数、フラット番号の値で指定されます。

そして、街路から地区へ、地区から都市へ、地区から都市へ、都市から国へ、国から惑星へ...と多次元化されていくのです。