新型MQL4で台無しになった小額紙幣管理-Indicator - ページ 2 12345 新しいコメント mar 2014.04.02 06:14 #11 デイスマクロです。ゼロで割る 原因となる線がどこにあるかは分かっています。過去5日間の日足平均のレンジが必要だからです。この後、インジケーターの中でそのATRで何かを割ると、データが更新されない限りATRはゼロになり、それが問題です。私は、少なくとも過去5日間の日次データが利用可能であることを確認する必要があります。そうすれば、ATRは>0になり、インジケータは動作します。 Syed Naufal Gaddafi 2014.04.02 06:29 #12 mar: デイスマクロゼロによる除算を引き起こす行がどこにあるかは分かっています。それは、過去5日間の日足平均レンジが必要だからです。この後、インジケータで何かをATRで割ると、データが更新されない限りATRはゼロになり、それが問題です。私は、少なくとも過去5日間の日次データが利用可能であることを確認する必要があります。そうすれば、ATRは>0になり、インジケータは動作します。 利用可能なデータをGVに入れ、それを取得する。そうすれば、データが来たとき、あるいはデータに違いがあるとき、GVを更新すればよい。 ATRはそのように機能しているのかもしれません。 人はいつも「まず動作させてから、コードを最適化しろ」と言っています。 時々、動作させるために、コードの行が非常に長くなることがありますが、一度動作すると、コードを切り詰めることができます。) mar 2014.04.02 06:53 #13 バカみたいかもしれませんが、GVってなんですか? Syed Naufal Gaddafi 2014.04.02 06:59 #14 グローバル変数 mar 2014.04.02 07:15 #15 もちろん... :-) もう一つ説明できないことがあります。次のコードは、私が最初に投稿したコードを少し修正したものです。これはマネーマネジメントのインジケーターでもありますが、ATRを削除しました。これは5~100ピップまでのストップロス・レベルを5ピップ・ステップで表示するだけです。つまり、ATRの計算が全くないのです。このインジケータをチャートにドラッグすると、問題なく動作します。どのペアも、どのタイムフレームも。問題ありません。しかし、MetaTraderを開くとゼロ除算エラーが発生し、またストップロスレベルの代わりに「Label」だけが印刷されます。 このエラーはこの行で発生します。 lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); 私はこの行のすべての変数を印刷し、AccountBalance()がゼロでMarketInfo(Symbol(), MODE_TICKVALUE)がゼロであるという結論に達しました。つまり、明らかにMetaTraderを開いたときに、データがまったく利用できないのです。昔のMetaTraderではこんなことはなかったのですが。というわけで、どうしたらいいのかさっぱりわかりません・・・。 以下はそのコードです。 #property indicator_chart_window //--- input parameters extern int Risk=5; extern int SL_Levels=20; int multi, exp1, SL, i, k; double MoneyRisk, Spread, modifySpread, lots; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators k=0; for(i=1; i<=SL_Levels; i++) { if (ObjectFind("SL"+i) == -1) { ObjectCreate("SL"+i, OBJ_LABEL, 0, 0, 0); ObjectSet("SL"+i, OBJPROP_CORNER, 1); ObjectSet("SL"+i, OBJPROP_XDISTANCE, 3); ObjectSet("SL"+i, OBJPROP_YDISTANCE, k); k=k+15; } } if (ObjectFind("Spread") == -1) { ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0); ObjectSet("Spread", OBJPROP_CORNER, 3); ObjectSet("Spread", OBJPROP_XDISTANCE, 3); ObjectSet("Spread", OBJPROP_YDISTANCE, 1); } //-- 4 / 5 Digit Settings -- multi = 1; exp1 = 0; modifySpread = 1; if (Digits==5 || Digits==3) { modifySpread = 0.1; multi=10; exp1=1; } //---- SL = 10; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- for(i=1; i<=SL_Levels; i++) { ObjectDelete("SL"+i); } ObjectDelete("Spread"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- Spread = MarketInfo(Symbol(), MODE_SPREAD)*modifySpread; MoneyRisk = AccountBalance()*Risk*0.01; k=0; Print(Spread); Print(AccountBalance()); Print(MoneyRisk); Print(MarketInfo(Symbol(), MODE_TICKVALUE)); Print(SL); Print(multi); for(i=1; i<=SL_Levels; i++) { lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); ObjectSetText("SL"+i, SL+ " : "+DoubleToStr(lots, 2), 10, "Calibri", White); k=k+15; SL = SL+5; } SL = 10; ObjectSetText("Spread", Spread, 10, "Calibri", White); WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+ Syed Naufal Gaddafi 2014.04.02 07:31 #16 lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); 数学の計算順序の基本がわからない?何が問題なのか、すぐにわかります。あなたの数学の計算命令です。 mar 2014.04.02 07:37 #17 もう少し正確に教えてください。具体的に何が問題なのでしょうか(いつも動いていたので...)? AccountBalance()など、MetaTraderから必要なデータが、Platformを起動した直後に利用できない問題がまだ残っていると思います。 mar 2014.04.02 07:57 #18 もう一つの例。 #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() //---- { Comment (AccountBalance()); //---- return(0); } //+------------------------------------------------------------------+ MetaTraderを開くと、結果はゼロになります!そしてそれは、タイムフレームやペアを変更するまでゼロのままです。これはまさにゼロによる除算 エラーの問題だと思います。あなたもそう思いませんか? Keith Watford 2014.04.02 08:00 #19 mar: この行のALL変数をプリントしてみたところ、AccountBalance()はゼロ、MarketInfo(Symbol(), MODE_TICKVALUE)はゼロという結論に達しました。つまり、明らかにMetaTraderを開いたときに、データがまったく利用できないのです。昔のMetaTraderではこんなことはなかったのですが。だから、私は何をすべきか全く分からない...。 以下がそのコードです。 これが問題の原因であることが確実な場合は、Start()の直後に次のコードを追加してください。 if( MarketInfo(Symbol(), MODE_SPREAD)==0 || AccountBalance() == 0 ) return(0); mar 2014.04.02 08:09 #20 どうもGumRaiです。 上のインジケーターでテストしてみました。MetaTraderを何分か走らせてもAccountBalanceはゼロのままです。手動で何か(ペア、時間枠)を変更するまでは、正しいAccountBalanceが表示されます。また、御社のソリューションを使用した場合、ゼロによる除算の エラーは発生しませんが、AccountBalanceがゼロのままなので、インジケータは決して動作しません。 この問題を抱えているのは私だけなのでしょうか?新しいMetaTraderの一般的なデータインポートの問題だと思うのですが...。 12345 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
デイスマクロゼロによる除算を引き起こす行がどこにあるかは分かっています。それは、過去5日間の日足平均レンジが必要だからです。この後、インジケータで何かをATRで割ると、データが更新されない限りATRはゼロになり、それが問題です。私は、少なくとも過去5日間の日次データが利用可能であることを確認する必要があります。そうすれば、ATRは>0になり、インジケータは動作します。
利用可能なデータをGVに入れ、それを取得する。そうすれば、データが来たとき、あるいはデータに違いがあるとき、GVを更新すればよい。
ATRはそのように機能しているのかもしれません。
人はいつも「まず動作させてから、コードを最適化しろ」と言っています。
時々、動作させるために、コードの行が非常に長くなることがありますが、一度動作すると、コードを切り詰めることができます。)
バカみたいかもしれませんが、GVってなんですか?
もちろん... :-)
もう一つ説明できないことがあります。次のコードは、私が最初に投稿したコードを少し修正したものです。これはマネーマネジメントのインジケーターでもありますが、ATRを削除しました。これは5~100ピップまでのストップロス・レベルを5ピップ・ステップで表示するだけです。つまり、ATRの計算が全くないのです。このインジケータをチャートにドラッグすると、問題なく動作します。どのペアも、どのタイムフレームも。問題ありません。しかし、MetaTraderを開くとゼロ除算エラーが発生し、またストップロスレベルの代わりに「Label」だけが印刷されます。
このエラーはこの行で発生します。
私はこの行のすべての変数を印刷し、AccountBalance()がゼロでMarketInfo(Symbol(), MODE_TICKVALUE)がゼロであるという結論に達しました。つまり、明らかにMetaTraderを開いたときに、データがまったく利用できないのです。昔のMetaTraderではこんなことはなかったのですが。というわけで、どうしたらいいのかさっぱりわかりません・・・。
以下はそのコードです。
もう少し正確に教えてください。具体的に何が問題なのでしょうか(いつも動いていたので...)?
AccountBalance()など、MetaTraderから必要なデータが、Platformを起動した直後に利用できない問題がまだ残っていると思います。
もう一つの例。
MetaTraderを開くと、結果はゼロになります!そしてそれは、タイムフレームやペアを変更するまでゼロのままです。これはまさにゼロによる除算 エラーの問題だと思います。あなたもそう思いませんか?この行のALL変数をプリントしてみたところ、AccountBalance()はゼロ、MarketInfo(Symbol(), MODE_TICKVALUE)はゼロという結論に達しました。つまり、明らかにMetaTraderを開いたときに、データがまったく利用できないのです。昔のMetaTraderではこんなことはなかったのですが。だから、私は何をすべきか全く分からない...。
以下がそのコードです。
これが問題の原因であることが確実な場合は、Start()の直後に次のコードを追加してください。
どうもGumRaiです。
上のインジケーターでテストしてみました。MetaTraderを何分か走らせてもAccountBalanceはゼロのままです。手動で何か(ペア、時間枠)を変更するまでは、正しいAccountBalanceが表示されます。また、御社のソリューションを使用した場合、ゼロによる除算の エラーは発生しませんが、AccountBalanceがゼロのままなので、インジケータは決して動作しません。
この問題を抱えているのは私だけなのでしょうか?新しいMetaTraderの一般的なデータインポートの問題だと思うのですが...。