前のティックの値 - ページ 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


このコードでmt4チャートがクラッシュします。

差分、TotalDescentはdoubleで宣言され、開始値は0です。descentarrayは1次元配列で、最大項目数はありません。

最初のdecrement tickが来るまで実行され、その後、クラッシュします。

 

</>ボタンでコードを挿入してください。


 
J.P.Satrio:


このコードでmt4チャートがクラッシュします。

差分、TotalDescentはdoubleで宣言され、開始値は0です。descentarrayは1次元配列で、最大項目数はありません。

最初のdecrement tickが来るまでは実行され、その後クラッシュします。

配列のサイズを決めているのでしょうか?

 
Keith Watford:

アレイのサイズ調整はしていますか?

いいえ、どの程度の大きさが必要なのか分からないので。昇順側では、サイズを決めない配列で問題なく動作します。
 
J.P.Satrio:
いや、どの程度の大きさが必要なのか分からないので。というのも、アセンション側では、サイズを決めない配列で問題なく動作するからです。

配列のサイズを決める必要があります。もし必要なサイズがわからない場合は、要素を追加するたびにサイズを1つずつ増やしてください。

 
Keith Watford:

配列のサイズを決める必要があります。必要なサイズがわからない場合は、要素を追加するたびにサイズを1つずつ大きくしていきます。

確かに試してみます、ありがとうございます。しかし、私は、コーダーが配列にサイズを設定しないケースを多く見ました。なぜこのケースは違うのか、まだわかりません。
もし、tick ごとに配列のサイズを変更する必要があるかどうかをチェックしなければならないとしたら、もっと複雑になってしまうので、データ量を管理するのに十分な大きさを設定しようと思っています。もし配列が一杯になったらどうなるのでしょうか?(私には起こったことがありません)またクラッシュしますか?
 
J.P.Satrio:
確かに試してみます、ありがとうございます。しかし、私は、コーダーが配列にサイズを設定しないケースを多く見ました。なぜこのケースは違うのか、まだよくわかりません。
もし、tick 毎に配列を増やしたり、サイズを変えたりする必要があれば、もっと複雑になるので、データ量を管理するのに十分な大きさを設定しようと思います。もし配列が一杯になったらどうなるのでしょうか?(私には起こりませんでしたが)またクラッシュしますか?

配列がサイズ不足になるようなケースはないと思います。存在しない要素に値を入れようとすると、コードはクラッシュします。

 
Keith Watford:

配列のサイズが合わないというケースはないと思います。存在しない要素に値を入れようとすると、コードはクラッシュします。

これでできました。ありがとうございました。
 

このスレッドのおかげで、前回のAskと今回のAskの差分を教えてくれるコードを開発することができました。もし差がゼロなら0.0と表示されますが、もし差がゼロでないなら、1.000000000006551e-05のように桁数が多すぎます。私のコードに何か問題があるのでしょうか、それともこれを修正する方法があるのでしょうか?シンボルはEURUSDです。これは私の最初のmqlコードなので、欠点があることをあらかじめお詫びします。ありがとうございます。

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

このスレッドのおかげで、前回のAskと今回のAskの差分を教えてくれるコードを開発することができました。もし差がゼロなら0.0と表示されますが、もし差がゼロでないなら、1.000000000006551e-05のように桁数が多すぎます。私のコードに何か問題があるのでしょうか、それともこれを修正する方法があるのでしょうか?シンボルはEURUSDです。これは私の最初のmqlコードなので、欠点があることをあらかじめお詫びします。ありがとうございます。

なぜそうしないのか...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}