エラー、バグ、質問 - ページ 168 1...161162163164165166167168169170171172173174175...3185 新しいコメント Yedelkin 2010.10.16 21:14 #1671 Manov: 初期化されていない変数 'local_low' を使用している可能 性がある」とあります。 場合は、どのようなことが書かれています。 変数が何かで初期化されると、警告は消えます。しかし、このコードでは、local_lowの初期 化は必要ありません。だから、警告があっても生活に支障は全くない。 Yedelkin 2010.10.16 21:21 #1672 Renat: 多くのソフトウエアプロジェクトを世に送り出してきたソフトウエア会社の経営者の視点から、私の回答を読み直してみてください。 そうでないと、「プログラマーなら誰でもいい」というレベルのまま、何が間違いなのかがわからなくなってしまうのです。 :)私はソフトウェア会社の社長にはなれないので、永遠に「誰でもいいプログラマー」(=私の理解ではアマチュア・プログラマー)のレベルにとどまることになるのだ。 ...そして、素人プログラマーはエラーの論理的な説明を受けることができないので、自分のコードには単にエラーがないか、エラーがあまりにも複雑で誰も論理言語で説明できないかのどちらかであると結論づける。この時点で、双方が理解し合えたと考えることができ、問題は終了です。 Dimitar Manov 2010.10.16 21:25 #1673 Yedelkin: 変数が何かで初期化されると、警告は消えます。しかし、自分で見てもわかるように、このコードでは変数local_lowの初期化が冗長になっています。だから、警告があっても生活に支障は全くない。 具体的なコードとしては、おそらく「YES」です。が、コンパイラは可能な限り「フールプルーフ」でなければならないだろう。 Igor Volodin 2010.10.16 21:31 #1674 そこで、モニターは燃え上がり、プログラマーに言った。「初期化を条件の後ろに隠してはいけない、ループ本体の後でループ変数を使ってもいけない、ゼロによる除算を チェックしろ、実体を不必要に乗じてはいけない、if (a==true) を書いてはいけない・・・。 Yedelkin 2010.10.16 21:34 #1675 Manov:...コンパイラは、できるだけ「フールプルーフ」でなければならないだろう。 それに異論はない。役に立つ警告です。このような警告が多ければ多いほど、自分のコードをより理解することができます。 Yedelkin 2010.10.16 21:42 #1676 Vigor:... 書かない if (a==true) ... ちなみに、春にはExpert Advisorのトレーニングを行いましたが、その際、いろいろな文献を読んで、if(a)型の条件を入れました。しかし、これらの条件を if (a==true) のような条件に変えてから、エキスパートが動作するようになりました。今では、この習慣からなかなか抜け出せません。 Валерий 2010.10.17 06:05 #1677 Yedelkin: しかし、8行目で変数local_lowを初期化した直後に9行目でbool-variable interrupcionを使っているため、15行目で変数local_lowが初期化されることが保証 されることが判明したのです。つまり、この時点では、「初期化されていない変数 'local_low' の使用の可能性」という警告は、「保証される」という意味ではなく、その変数が初期化されていない通過ブランチが存在する可能性が あるという意味に過ぎないのです。 この例では、Ac-k=0とすると、for演算 子は全く実行されず、local_lowは初期化されないことが保証されます。それとも、間違っているのでしょうか? Документация по MQL5: Основы языка / Операторы / Оператор цикла for www.mql5.com Основы языка / Операторы / Оператор цикла for - Документация по MQL5 Валерий 2010.10.17 07:29 #1678 同じストップを持つポジションを修正するリクエストを送ると、エラーが発生します。しかし、同じパラメータで保留中の注文を 修正するリクエストを送信すると、そのリクエストは実行されます。このように計画しているので、パラメータの変更を確認する必要はないのでしょうか?例えば、Expert Advisor のエラーや操作のロジックが正しくない場合、不必要なリクエストでサーバーを詰まらせる必要はないでしょう。 Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 Yedelkin 2010.10.17 22:37 #1679 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が初期化されないことが保証されていれば、計算で使われないことも保証されている(はず)。 Dmitiry Ananiev 2010.10.18 03:54 #1680 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では、新しいティックで前のティックの情報が表示されます。 Errors, bugs, questions ストラテジーテスターでEAが機能しない Error 4204 1...161162163164165166167168169170171172173174175...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
初期化されていない変数 'local_low' を使用している可能 性がある」とあります。
場合は、どのようなことが書かれています。
多くのソフトウエアプロジェクトを世に送り出してきたソフトウエア会社の経営者の視点から、私の回答を読み直してみてください。
そうでないと、「プログラマーなら誰でもいい」というレベルのまま、何が間違いなのかがわからなくなってしまうのです。
:)私はソフトウェア会社の社長にはなれないので、永遠に「誰でもいいプログラマー」(=私の理解ではアマチュア・プログラマー)のレベルにとどまることになるのだ。
...そして、素人プログラマーはエラーの論理的な説明を受けることができないので、自分のコードには単にエラーがないか、エラーがあまりにも複雑で誰も論理言語で説明できないかのどちらかであると結論づける。この時点で、双方が理解し合えたと考えることができ、問題は終了です。
変数が何かで初期化されると、警告は消えます。しかし、自分で見てもわかるように、このコードでは変数local_lowの初期化が冗長になっています。だから、警告があっても生活に支障は全くない。
...コンパイラは、できるだけ「フールプルーフ」でなければならないだろう。
... 書かない if (a==true) ...
しかし、8行目で変数local_lowを初期化した直後に9行目でbool-variable interrupcionを使っているため、15行目で変数local_lowが初期化されることが保証 されることが判明したのです。つまり、この時点では、「初期化されていない変数 'local_low' の使用の可能性」という警告は、「保証される」という意味ではなく、その変数が初期化されていない通過ブランチが存在する可能性が あるという意味に過ぎないのです。
同じストップを持つポジションを修正するリクエストを送ると、エラーが発生します。しかし、同じパラメータで保留中の注文を 修正するリクエストを送信すると、そのリクエストは実行されます。このように計画しているので、パラメータの変更を確認する必要はないのでしょうか?
例えば、Expert Advisor のエラーや操作のロジックが正しくない場合、不必要なリクエストでサーバーを詰まらせる必要はないでしょう。
この例では、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が初期化されないことが保証されていれば、計算で使われないことも保証されている(はず)。