エラー、バグ、質問 - ページ 168

 
Manov:

初期化されていない変数 'local_low' を使用している可能 性がある」とあります。

場合は、どのようなことが書かれています。

変数が何かで初期化されると、警告は消えます。しかし、このコードでは、local_lowの初期 化は必要ありません。だから、警告があっても生活に支障は全くない。
 
Renat:

多くのソフトウエアプロジェクトを世に送り出してきたソフトウエア会社の経営者の視点から、私の回答を読み直してみてください。

そうでないと、「プログラマーなら誰でもいい」というレベルのまま、何が間違いなのかがわからなくなってしまうのです。

:)私はソフトウェア会社の社長にはなれないので、永遠に「誰でもいいプログラマー」(=私の理解ではアマチュア・プログラマー)のレベルにとどまることになるのだ。

...そして、素人プログラマーはエラーの論理的な説明を受けることができないので、自分のコードには単にエラーがないか、エラーがあまりにも複雑で誰も論理言語で説明できないかのどちらかであると結論づける。この時点で、双方が理解し合えたと考えることができ、問題は終了です。

 
Yedelkin:
変数が何かで初期化されると、警告は消えます。しかし、自分で見てもわかるように、このコードでは変数local_lowの初期化が冗長になっています。だから、警告があっても生活に支障は全くない。
具体的なコードとしては、おそらく「YES」です。が、コンパイラは可能な限り「フールプルーフ」でなければならないだろう。
 
そこで、モニターは燃え上がり、プログラマーに言った。「初期化を条件の後ろに隠してはいけない、ループ本体の後でループ変数を使ってもいけない、ゼロによる除算を チェックしろ、実体を不必要に乗じてはいけない、if (a==true) を書いてはいけない・・・。
 
Manov:
...コンパイラは、できるだけ「フールプルーフ」でなければならないだろう。
それに異論はない。役に立つ警告です。このような警告が多ければ多いほど、自分のコードをより理解することができます。
 
Vigor:
... 書かない if (a==true) ...

ちなみに、春にはExpert Advisorのトレーニングを行いましたが、その際、いろいろな文献を読んで、if(a)型の条件を入れました。しかし、これらの条件を if (a==true) のような条件に変えてから、エキスパートが動作するようになりました。今では、この習慣からなかなか抜け出せません。
 
Yedelkin:

しかし、8行目で変数local_lowを初期化した直後に9行目でbool-variable interrupcionを使っているため、15行目で変数local_lowが初期化されることが保証 されることが判明したのです。つまり、この時点では、「初期化されていない変数 'local_low' の使用の可能性」という警告は、「保証される」という意味ではなく、その変数が初期化されていない通過ブランチが存在する可能性が あるという意味に過ぎないのです。
この例では、Ac-k=0とすると、for演算 子は全く実行されず、local_lowは初期化されないことが保証されます。それとも、間違っているのでしょうか?
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 

同じストップを持つポジションを修正するリクエストを送ると、エラーが発生します。しかし、同じパラメータで保留中の注文を 修正するリクエストを送信すると、そのリクエストは実行されます。このように計画しているので、パラメータの変更を確認する必要はないのでしょうか?

例えば、Expert Advisor のエラーや操作のロジックが正しくない場合、不必要なリクエストでサーバーを詰まらせる必要はないでしょう。

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Valmars:
この例では、Ac-k=0 であれば、for文は 全く実行されず、local_lowは初期化されないことが保証されています。それとも、間違っているのでしょうか?

まさにその通りです。Ac-k<=1の場合、for演算子は全く実行してはならず、local_low変数は初期化されないままであることが保証される。しかし、bool変数interrupcionはfalseのままなので(3行目)、13行目の条件により、初期化されていない変数local_lowが計算で使われることはない(はずで ある)。特に、15行目の変数local_lowを使った式は評価されるべきではありません[もちろん、if文がヘルプに書かれているとおりに動作する場合を除きます:)。].

つまり、変数local_lowが初期化されないことが保証されていれば、計算で使われないことも保証されている(はず)。

 

void Graf(
)
{
if(ObjectFind(0, "H")<0) ObjectCreate(0, "H",OBJ_HLINE
,0,0,h,0);
if(ObjectFind(0, "L")<0, "L"
)
0) ObjectCreate(0, "L",OBJ_HLINE,0,0,l,0)
; ObjectSetDouble(0, "H",OBJPROP_PRICE,h)
; ObjectSetDouble(0, "L",OBJPROP_PRICE,l)
です
文字列 bal = DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE),2)
;string equ = DoubleToString (AccountInfoDouble(ACCOUNT_EQUITY),2
)
; string spread = DoubleToString(((Ask-Bid)/_Point),0)
; string space = "
".
"
; 文字列 info= bal+space+equ+space+spread
;
if (ObjectFind(0, "info")<
)
0) ObjectCreate(0, "info",OBJ_LABEL,0,0,0)
; ObjectSetInteger(0, "info",OBJPROP_XDISTANCE,0)
を使用します
。ObjectSetInteger(0, "info",OBJPROP_YDISTANCE,15)
; ObjectSetString(0, "info",OBJPROP_TEXT,info)
を使用します
。ObjectSetInteger(0, "info",OBJPROP_FONTSIZE,36)
; ObjectSetInteger(0, "info",OBJPROP_COLOR,Maroon)
; return
; }

ここにコードの一部を紹介します。バランス、エクイティ、スプレッドの値を1ティック毎に表示する機能です。しかし、その情報はなぜか前のティックには表示されず...。なぜなのか、教えてください。MT4では、同様のコードが新しいティックごとに値を変更し、MT5では、新しいティックで前のティックの情報が表示されます。