エラー、バグ、質問 - ページ 7 1234567891011121314...3185 新しいコメント Sergey Gritsay 2010.06.14 19:02 #61 FEDOR_MQL:また、現段階では、パラメータ、関数呼び出し、関数自体がコンパイル時エラーを表示するかしないかです。もしそうなら、その理由は?エラーが出ている。はい、確かに何もないはずなのになぜかエラーが表示されます。このように変更したところ、エラーは出なくなったのですが、switchを使用するとやはりエラーが出ますので、開発者の方に 注意をお願いします。 //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- input parameters input double Lots=0.1; input bool MM = true; input double Risk = 10.0; double lots; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(MM) lots = LotSon(); //вызов функции LotSon else lots = Lots; } //+------------------------------------------------------------------+ double LotSon() { double LotMin = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); double LotMax = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); double Lot = AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000.0 * Risk; Lot = MathMin(LotMax,MathMax(LotMin,Lot)); if (Lot < LotMin) Lot = LotMin; if (Lot > LotMax) Lot = LotMax; // Вариант первый /* switch(LotStep) { case 0.01: Lot=NormalizeDouble(Lot,2);break; case 0.1 : Lot=NormalizeDouble(Lot,1);break; case 1.0 : Lot=NormalizeDouble(Lot,0);break; } */ // Вариант второй if (LotStep == 0.01)Lot=NormalizeDouble(Lot,2); if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1); if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0); // Вариант третий // if (LotStep == 0.01) Lot=NormalizeDouble(Lot,2); // else if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1); // else if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0); return(Lot); } 削除済み 2010.06.14 19:16 #62 sergey1294:はい、確かに、ないはずなのになぜかエラーになります。開発者に注意を 促して、このように作り直したところ、エラーは出なくなりましたが、switchを 使用するとやはりエラーが出ます。 switch(LotStep) { case 0.01: Lot=NormalizeDouble(Lot,2);break; case 0.1 : Lot=NormalizeDouble(Lot,1);break; case 1.0 : Lot=NormalizeDouble(Lot,0);break; } 0.01=1000、0.10=10000というように、ロットをintで送る必要がある......。 Sergey Gritsay 2010.06.14 19:31 #63 Interesting:0.01=1000、0.10=10000といった具合に、ロットはint型としてここに送られるはずだ...。 あなたの話によると、結局、関数 SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); は0.01の代わりに1000を返す 削除済み 2010.06.14 19:39 #64 sergey1294: ということは、関数 は0.01ではなく1,000の値を返します。いえ、このようなコードにすれば、エラーはなくなるという意味です。 switch(StepSize) { case 1000: Lot=NormalizeDouble(Lot,2);break; case 10000: Lot=NormalizeDouble(Lot,1);break; case 100000: Lot=NormalizeDouble(Lot,0);break; } Sergey Gritsay 2010.06.14 19:41 #65 であることに今気づきました。 switch が倍精度数値を使用できない場合、このオプションは使用できません。 削除済み 2010.06.14 19:44 #66 sergey1294: であることに今気づきました。 が倍精度の数値を使用できない場合、このオプションは使用できません。 あらかじめlotをintに変換しておけば可能です。上に書いたように... Sergey Gritsay 2010.06.14 19:46 #67 という疑問が残りますが、なぜそのような設計ができないのでしょうか? if (LotStep == 0.01)return(NormalizeDouble(Lot,2)); if (LotStep == 0.1) return(NormalizeDouble(Lot,1)); if (LotStep == 1.0) return(NormalizeDouble(Lot,0)); FEDOR_MQL 2010.06.14 20:28 #68 Interesting: ロットをintに変換する場合は、やってもよい。上に書いたこと... もしよろしければ、コードを拝見させていただけませんか?いろいろ試したが、うまくいかない。 リスクを証券のパーセンテージで加算するのが簡単なのかどうかはわからないが。ありがとうございました。 削除済み 2010.06.14 20:36 #69 FEDOR_MQL: もしよろしければ、コードを拝見させていただけませんか?いろいろ試したが、うまくいかない。 他に簡単なバリエーションがあるかどうかわかりませんが、EAに入金額に対するリスクをパーセンテージで追加するだけです。ありがとうございました。例えば、リスク計算に関する興味深い関数をいくつか紹介しましょう。そして、このコードを動作させるには、ロットを100000倍して、それをswitch(StepSize)にパラメータ(int型の 変数)として入力するだけでよいのです。追記また、一般的には、正直なところ、このようなバリエーションがあることの目的がよくわからないのですが?つまり、この機能の文脈では、最後のひとつ......で十分なんです。 FEDOR_MQL 2010.06.14 20:57 #70 Interesting: 最終的に何を得たいかによりますが、例えば、ここでは、リスクに関する興味深い関数をあげてみました。 そして、このコードを動作させるには、lotに100000を掛けて、それをパラメータ(int型の 変数)としてswitch(StepSize)に渡せばよいのです。 あなたの記事は、私に必要なものだと思います。感謝 1234567891011121314...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
また、現段階では、パラメータ、関数呼び出し、関数自体がコンパイル時エラーを表示するかしないかです。もしそうなら、その理由は?エラーが出ている。
はい、確かに何もないはずなのになぜかエラーが表示されます。このように変更したところ、エラーは出なくなったのですが、switchを使用するとやはりエラーが出ますので、開発者の方に 注意をお願いします。
はい、確かに、ないはずなのになぜかエラーになります。開発者に注意を 促して、このように作り直したところ、エラーは出なくなりましたが、switchを 使用するとやはりエラーが出ます。
0.01=1000、0.10=10000というように、ロットをintで送る必要がある......。
0.01=1000、0.10=10000といった具合に、ロットはint型としてここに送られるはずだ...。
は0.01の代わりに1000を返す
ということは、関数
は0.01ではなく1,000の値を返します。
いえ、このようなコードにすれば、エラーはなくなるという意味です。
switch
が倍精度数値を使用できない場合、このオプションは使用できません。であることに今気づきました。
が倍精度の数値を使用できない場合、このオプションは使用できません。
ロットをintに変換する場合は、やってもよい。上に書いたこと...
もしよろしければ、コードを拝見させていただけませんか?いろいろ試したが、うまくいかない。
リスクを証券のパーセンテージで加算するのが簡単なのかどうかはわからないが。ありがとうございました。
もしよろしければ、コードを拝見させていただけませんか?いろいろ試したが、うまくいかない。
他に簡単なバリエーションがあるかどうかわかりませんが、EAに入金額に対するリスクをパーセンテージで追加するだけです。ありがとうございました。
例えば、リスク計算に関する興味深い関数をいくつか紹介しましょう。
そして、このコードを動作させるには、ロットを100000倍して、それをswitch(StepSize)にパラメータ(int型の 変数)として入力するだけでよいのです。
追記
また、一般的には、正直なところ、このようなバリエーションがあることの目的がよくわからないのですが?つまり、この機能の文脈では、最後のひとつ......で十分なんです。
最終的に何を得たいかによりますが、例えば、ここでは、リスクに関する興味深い関数をあげてみました。
そして、このコードを動作させるには、lotに100000を掛けて、それをパラメータ(int型の 変数)としてswitch(StepSize)に渡せばよいのです。