[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 262

 
dzhini:
OBJ_LABEL型のグラフィカルオブジェクトの価格座標を決定する方法を教えてください。

OBJPROP_XDISTANCE, OBJPROP_YDISTANCE パラメータで ObjectGet を使用する。
 

1問配列の名前の括弧内に数字10があれば、その配列には11の要素があることを意味する

質問2. 配列の end_set後に ゼロがないことを確認する必要がありますが、 Allow_setから end_setまでの すべての価格があるはず です ArrayResizeは 正しく行えて いますか?

//global
price[10];
int i =-1;
//-------------------
int start()
{
if(!TF_F_NewBar())return(0);
if(Allow_setting ==true)
{
i++;
ArrayResize(price, i);//価格[10]の配列は価格[0]のままということですね(これは許されますか)?),
//すなわち,配列中の1箇所に0が書き
込まれます.だから、一歩一歩(バー)、私たちは

//配列のサイズを 大きくする
price[i] = Close[1]; // この一ヶ所の配列にゼロの代わりにClose[1]を書き込んで います。これが許されるなら、
// その後、最小値を指定する配列 price[0]
;
}
if(end_set==true)
{
配列データの処理;

i = -1; //処理後、元の位置へ戻る
}
}.

本来あるべきコードの入れ方を間違えてしまったことをお詫びします。

 
gince:

1問配列の名前の括弧内に数字10がある場合、その配列には11の要素があることを意味する


この配列には、0から9までのインデックスを持つ10個のセルが含まれています。これは、最初の要素がインデックス0のセル1に入ることを意味し、そのためfor文は0から始まって います。

質問2. 配列の end_set後に ゼロがないことを確認する必要がありますが、 Allow_setから end_setまでの すべての価格があるはず です ArrayResizeは 正しく行えて いますか?

過去10本の終値を配列に取り込みたいのか?

すみません、コードの入れ方が間違っていました。

書いた内容は、「編集」をクリックすれば、いつでも手直しできます。


 
paladin80:

直近の10本のバーに近い価格を配列するか?

書いた内容は、「編集」をクリックすれば、いつでも手直しできます。


いや、10じゃなくて、Allow_selectから end_setまで。40でも65でも構いませんが、end_set以降の配列にゼロがないことを確認する必要があります。
 
gince:
いや、10じゃなくて、end_selectの 前にAllow_select。配列の end_set の後に 0 をつけてはいけない。


それはいいとして、最初に配列をダイナミックに設定すればいい。

double цена[];

...

int init ()

{

…

ArrayResize (цена,0);

…

}

int start ()

{

…

}

 
gince:
いや、10じゃなくて、end_selectの 前にAllow_select。配列の end_set の後に 0 をつけてはいけない。

double цена[]; // динамический массив
int    начало=2; // 0 (ноль) это текущий, ещё не закрытый бар
int    конец=45;
int    количество;
//---
int init()
  {
   количество=конец-начало; // =43
   ArrayResize(цена, количество); // устанавливается размер массива - 43 ячейки
   return(0);
  }

//---
int start()
  {
    if(!TF_F_NewBar()) return(0);    
    if(Разрешить_набор == true)
    {
      for (int i=0; i<=количество-1; i++) // заполнить 43 ячейки с индексом от 0 до 42.
                                          // в ячейке 0 будет цена close для бара 2 и т.д.
      цена[i]=Close[i+начало];   
    }
   return(0);
  }
//---
 
paladin80:

配列の要素数がわからない。40歳かもしれないし、65歳かもしれない。一言で言えば、動的な配列が 必要なのです

double цена[]; // динамический массив

int i = -1;
//---
int init()
  {
   ArrayResize(цена, 0); // устанавливается размер массива минимальным - 1 ячейка
   return(0);
  }

//---
int start()
  {
    if(!TF_F_NewBar()) return(0);    
    if(Разрешить_набор == true)                // это сигнал по индюку
    {
      //Пришел новый бар и резрешение есть 
      i++.                                     //увеличиваем индех            
      ArrayResize(цена, i)
      цена[i]=Close[i];   
   }
   if(конец_набора== true)   // это сигнал по индюку
   {
      //----
      //работа с массивом
      //----
      Pазрешить_набор == false; 
      i= -1;
//А тут
надо что нибуть делать с бывшим массивом (уменшить, очистить или еще что то)      
   }
   return(0);
 }
//---
 
gince:

配列の要素数がわからない。40歳かもしれないし、65歳かもしれない。一言で言えば、動的な配列が必要なのです

反対側からお聞きします。なぜ配列に終値を入れる必要があるかというと、double close[] 自体がすでに終値の配列になっているからです。
 
paladin80:
反対側からお聞きします。なぜ配列に終値を入れる必要があるかというと、double close[] 自体がすでに終値の配列だからです。
クローズでもオープンでもいいんです。一番大事なのは、「今」から「これから」なんです。そして、フィルターをかけています。フィルタリングは、今からこの期間に行う必要があります。配列にフィルタをかけたら、別のデータでもう一回やり直す。そして、最後の配列を使って描画しています。つまり、ご質問のこの配列は、あくまで中間的なものです。
 
今は、1本の小節につき、1枚の小節を配列に入れるようになっています。そうしないと、どのバーからデータを集めるか計算したり、ループしたり、フィルタリングしたりする必要があるんだ。そして、これは後者を残すのみとなりました。