OrderSend()関数のバグ? - ページ 7

 
tara:
プログラムの再起動時に変数が初期化されることを規定していないため、MUSTとする。

もう一度、水槽の中の人へ。

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   static int cc=20;
   Print("cc = ",cc);
   cc++;
   
   return(0);
  }
作品例初期化がうまくいく。
 
hoz:

この点は(教科書から)よくわからないが。

「静的変数は、専用の init() 関数を呼び出す前に一度初期化されます。つまり、静的変数が宣言されている関数から離れるときに、この変数の値が失われることはないのです。

特別なinit() 関数を呼び出す前」と「(内容から判断して)スタティック変数が宣言されているユーザー関数を終了した後」と、どういう関係があるのでしょうか?"

静的変数を宣言する関数は、プログラムの最後...つまりコードの最後かどこか他の場所にあることがあります。init() 関数は、プログラム開始直前に一度だけ実行されます。矛盾していることがわかります。init() 関数の前に変数を初期化するにはどうしたらいいですか

関数がプログラムのどこにあるかは関係なく、静的 変数は関数の外側にあります。
 
PapaYozh:
関数がプログラムのどこにあっても、変数staticは 関数の外側にあるのです。

どういうことですか?
 
tara:

いいえ、そうではありません。それはバグです :)
デフォルトの初期化に頼るのは悪い癖です。
 
Vinin:

どういうことですか?

静的変数は、プログラムメモリの永続的な領域に格納され、その値は関数を 終了しても失わ れません。

 
PapaYozh:

もう一度、水槽の中の人へ。

例題はうまくいく。初期化がうまくいく。

クリニック...

はい、初期化はうまくいきました。まさに一度だけ。そして、再起動すると、そうではありません。そうであってほしい。これではっきりしたかな?

 
頼むからEAでスタティックは使わないでくれ。
 
tara:

クリニック...

はい、初期化はうまくいきました。まさに一度だけ。そして、再起動すると、そうではありません。そうであってほしい。これではっきりしたかな?

Expert Advisor を再起動すると、一度だけ動作します。

再起動、Expert Advisorのプロパティに入り、OKを押して終了とはどういうことでしょうか?

 
TheXpert:
頼むからEAでスタティックは使わないでくれ。
使ってはいけない」ではなく、「正しく使う「間違って使っては いけない」。
 

はい、それと。

1.アカウントが変更されたとき。

2.楽器を交換するとき。

3.TFを変更する場合。