どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 899

[Deleted]  
プログラマー同志、ロボットのコードを書くのに協力してください!という大変なお願いです。ロボットは2つのミューウィングで取引します。クロスするとポジションを開き、反対側のクロスで閉じます。しかし、それは反対のクロスオーバーで別のポジションを開く必要があります。つまり、「買い」を閉じたら、ロボットはすぐに「売り」を開くべきで、逆もまた然りなのです
ファイル:
 
lufer:
ありがとうございます、でもOnInit()のMas[N];ではうまくいきません、もう試しました。
さて、昨日はあまり酔いが回っていなかったようで、申し訳ありません。あるいは、あまりシラフでない。
 
AlexeyVik:
そうですね......すみません、昨夜はあまりシラフではなかったので。あるいは、あまりシラフでない。
))のようなことが起こります。
 

例えば、最初に形成されたバー(#1)から始まる各バーからインジケータ(例えばATR)から取得したデータで配列を満たしたいとします。つまり、配列が宣言され、スタート関数ですでに初期化されているのです。正しいやり方は?

このように?

for(int i=0; i<N; i=i++)

{

Mas[i]=iATR(NULL,0,1,i+1);

}

または経由することができます。

for(int i=0; i<N; i=i++)

{

ArrayFill(Mas,i,1,iATR(NULL,0,1,i+1))

}

または完全に他の何か?、これまでのところ、私はどのような方法で成功していない(、何かが間違っている、アドバイスしてください、事前にありがとうございました。

 
lufer:

例えば、最初に形成されたバー(#1)から始まる各バーからインジケータ(例えばATR)から取得したデータで配列を満たしたいとします。つまり、配列が宣言され、スタート関数ですでに初期化されているのです。正しいやり方は?

このように?

for(int i=0; i<N; i=i++)

{

Mas[i]=iATR(NULL,0,1,i+1);

}


最初のケースで十分です。しかし、最初の小節から始まる値が必要な場合、ループも1から数えた方が賢明です。
 
evillive:
最初の選択肢で十分です。しかし、最初のバーから始まる値が必要な場合、1からのサイクルを数える方が合理的です。
1と0の両方を試してみましたが、やはり何かおかしい、値が書き込まれない、出力を要求しても0しか出ない
 
lufer:
1と0の両方で試してみましたが、やはりうまくいきません。値が書き込まれず、何か出力するように要求しても、ゼロが出力されるだけです。
出力されたコードを表示してください。
 
evillive:
コードを表示して出力を求めます。

念のため、すべてのコードをお見せします。

//+------------------------------------------------------------------+

extern int    N        =100;                       // Количество баров

       int    Mas[];                             // Объявление массива

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
     ArrayResize(Mas,N,0);                // Установка размера массива      
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
   for(int i=0; i<N; i=i++)                     // Цикл записи данных
     {                      

          Mas[i]=iATR(NULL,0,1,i+1);           // Вычисление значений          
     }
       Alert(Mas[0],"," ,Mas[50],"," ,Mas[99]);      // Вывод на экран
   return;                                           // Выход из start
  }
//+------------------------------------------------------------------+

 

SRCを使用してコードを挿入 する

 
lufer:

念のため、すべてのコードをお見せします。


double 型の配列を作る
 
evillive:
double 型の配列を作る
ターミナルウィンドウでEAをロードしても何も起こらないし、削除しようとすると、ターミナルが非常に長い間停止して、しばらくしてから削除 されます。いくつかの要素に手動で値を割り当てて みましたが、すべてOKです。配列の初期化ループの何かが間違っているようです。