[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 409 1...402403404405406407408409410411412413414415416...631 新しいコメント asasusa 2012.10.02 02:18 #4081 sss2019 です。 例を示してください。 こんな感じのスクリプトを作りました。 int orderstotal = OrdersTotal(); for(i = 0; i < orderstotal; i++ ) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage) == false) { Print(GetLastError()); } if(OrderType() == OP_SELL) if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage) == false) { Print(GetLastError()); } if(OrderType() > 1) if(OrderDelete(OrderTicket()) == false) { Print(GetLastError()); } } Print(i," ",orderstotal); } その結果、Printは次のように出力します。 0 4 1 4 以上、なぜかループがプリントされない 2 4 3 4 I 0 の代わりにOrderSelect(i, SELECT_BY_POS, MODE_TRADES) をループに追加しました。つまり、最初の注文は常に選択され、スクリプトは正しく動作します。ループが2つの注文を削除するとき、リストには2つの注文しかないのに、3番目の注文を選択しようとすることが判明したのです。 Виктор 2012.10.02 02:33 #4082 sss2019: このようなスクリプトを作成しました。 結局は... 事例紹介 --- 2012.10.02 03:14 #4083 sss2019: 例を示してください、私はそうしました for(i = OrdersTotal(); i > 0; i--) 役に立たなかった。 というのは、やはり考えなければならないからです。 for(i = OrdersTotal()-1; i >=0; i--) asasusa 2012.10.02 07:20 #4084 このジレンマを解決するために int i; double maxrange,range; double Ma1 = iMA(Symbol(),Period(),FastMaPeriod,0,MODE_EMA,PRICE_OPEN,i); double Ma2 = iMA(Symbol(),Period(),SlowMaPeriod,0,MODE_EMA,PRICE_OPEN,i); while(Ma1 > Ma2) { i++; Ma1 = iMA(Symbol(),Period(),FastMaPeriod,0,MODE_EMA,PRICE_OPEN,i); Ma2 = iMA(Symbol(),Period(),SlowMaPeriod,0,MODE_EMA,PRICE_OPEN,i); range = (Ma1 - Ma2)/Point; if(range > maxrange) maxrange = range; } スクリプトは、線間の距離が最大になるように検索する。すべてのバーですべての値を出力し、最大範囲は1つのバーで1.6235、もう1つのバーで1.6208となっています。 Print(maxrange)を表示 させようとすると、0.086と表示されます。 Владимир Тезис 2012.10.02 08:33 #4085 sss2019: このジレンマを解決するために スクリプトは、線間の距離が最大に なるように検索する。すべてのバーですべての値を出力し、最大範囲は1つのバーで1.6235、もう1つのバーで1.6208となっています。 Print(maxrange)を出力してみると、0.086が返ってくる、全くわけがわからない、Pointで割っているのに。 これはジレンマではありません。ジレンマとは、2つの解決策のうちどちらがベストなのか分からない状態のことです。 さて、まず、iMA()関数のパラメータは6つではなく7つです。次に、int i の文字列で変数を宣言していますね。そしてさらに、iという変数はどこにも値が初期化されていない。その結果、ゼロになるか、前のアクティビティから残ったメモリのゴミが含まれています。そして3つ目は、whileループの配置が正しくないことです。さて、初期化後のi変数は0に等しいとしましょう。また、Ma1>Ma2という表現も成り立つとします。その結果、while(Ma1 > Ma2)の行でループが開始されることになります。次のループの繰り返しで、(Ma1 > Ma2) 式が真でなくなったことがわかり、ループは終了する。変数Ma1、Ma2には、最大となる距離は含まれません -最大距離は一度だけでした。この条件では、Ma1がMa2以下になったことだけが示される。 さらに、変数maxrangeはrange = (Ma1 - Ma2)/Point; という文字列の中だけで値が初期化されます。では、コードの他の場所で変数maxrangeを値で初期化していないので、if(range > maxrange) という条件が発生しない場合はどうでしょうか?つまり、計算結果とメモリセルのゴミを比較していることがわかります。ここでは、コード実行の結果として、理解しがたいプリントが表示されます。 asasusa 2012.10.02 08:44 #4086 ループ内で全てのMA値を出力していたのですが、全ての値が正しい、つまりこの期間の全てのMA値が列挙された、ということです。しかし、ここでの計算は間違っていて、範囲=(Ma1-Ma2)/ポイントです。 if(range > maxrange) maxrange = range; 削除済み 2012.10.02 09:01 #4087 sss2019: そこがポイントで、ループ内のすべてのMA値を出力していたのですが、すべての値が正しい、つまりこの期間のすべてのMA値が検索されたことになるのです。しかし、ここでの計算は間違っていて、範囲=(Ma1-Ma2)/ポイントです。 if(range > maxrange) maxrange = range; *ポイント range = (Ma1 - Ma2)*Point Владимир Тезис 2012.10.02 09:17 #4088 pako:*ポイント範囲 = (Ma1 - Ma2)*Point ma1=0.6526、ma2=0.6516。ma1-ma2 = 0.6526-0.6516 = 0.0010となります。ポイント=0.0001。掛け合わせればビリビリになります。0,0010 * 0,0001 = 0,0000001 Владимир Тезис 2012.10.02 09:19 #4089 sss2019: ループ内で全てのMA値を出力していたのですが、全ての値が正しい、つまりこの期間の全てのMA値が列挙された、ということです。しかし、ここでの計算は間違っていて、範囲=(Ma1-Ma2)/ポイントです。 if(range > maxrange) maxrange = range; まあ、何が入力されているのか確認する必要がありますね。計算に関わる変数値はどれですか? 削除済み 2012.10.02 10:56 #4090 MQLチュートリアル のStandard Functionsの章、Graph Operationsのセクションに、次のような説明のWindowHandleという関数が あります。" ... 指定されたグラフが含まれるウィンドウ(ウィンドウハンドル)のシステムディスクリプタを返す". 質問:「ウィンドウハンドル」の意味(内容)、用途は? P.S.フォーラムを混乱させないために、事前にあなたの答えをありがとうございます。 1...402403404405406407408409410411412413414415416...631 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
sss2019 です。
例を示してください。
こんな感じのスクリプトを作りました。
その結果、Printは次のように出力します。
0 4
1 4
以上、なぜかループがプリントされない
2 4
3 4
I 0 の代わりにOrderSelect(i, SELECT_BY_POS, MODE_TRADES) をループに追加しました。つまり、最初の注文は常に選択され、スクリプトは正しく動作します。ループが2つの注文を削除するとき、リストには2つの注文しかないのに、3番目の注文を選択しようとすることが判明したのです。
このようなスクリプトを作成しました。
結局は...
例を示してください、私はそうしました
役に立たなかった。
というのは、やはり考えなければならないからです。
このジレンマを解決するために
スクリプトは、線間の距離が最大になるように検索する。すべてのバーですべての値を出力し、最大範囲は1つのバーで1.6235、もう1つのバーで1.6208となっています。
Print(maxrange)を表示 させようとすると、0.086と表示されます。
このジレンマを解決するために
スクリプトは、線間の距離が最大に なるように検索する。すべてのバーですべての値を出力し、最大範囲は1つのバーで1.6235、もう1つのバーで1.6208となっています。
Print(maxrange)を出力してみると、0.086が返ってくる、全くわけがわからない、Pointで割っているのに。
これはジレンマではありません。ジレンマとは、2つの解決策のうちどちらがベストなのか分からない状態のことです。
さて、まず、iMA()関数のパラメータは6つではなく7つです。次に、int i の文字列で変数を宣言していますね。そしてさらに、iという変数はどこにも値が初期化されていない。その結果、ゼロになるか、前のアクティビティから残ったメモリのゴミが含まれています。そして3つ目は、whileループの配置が正しくないことです。さて、初期化後のi変数は0に等しいとしましょう。また、Ma1>Ma2という表現も成り立つとします。その結果、while(Ma1 > Ma2)の行でループが開始されることになります。次のループの繰り返しで、(Ma1 > Ma2) 式が真でなくなったことがわかり、ループは終了する。変数Ma1、Ma2には、最大となる距離は含まれません -最大距離は一度だけでした。この条件では、Ma1がMa2以下になったことだけが示される。
さらに、変数maxrangeはrange = (Ma1 - Ma2)/Point; という文字列の中だけで値が初期化されます。では、コードの他の場所で変数maxrangeを値で初期化していないので、if(range > maxrange) という条件が発生しない場合はどうでしょうか?つまり、計算結果とメモリセルのゴミを比較していることがわかります。ここでは、コード実行の結果として、理解しがたいプリントが表示されます。
if(range > maxrange) maxrange = range;
そこがポイントで、ループ内のすべてのMA値を出力していたのですが、すべての値が正しい、つまりこの期間のすべてのMA値が検索されたことになるのです。しかし、ここでの計算は間違っていて、範囲=(Ma1-Ma2)/ポイントです。
if(range > maxrange) maxrange = range;
*ポイント
range = (Ma1 - Ma2)*Point
*ポイント
範囲 = (Ma1 - Ma2)*Point
ループ内で全てのMA値を出力していたのですが、全ての値が正しい、つまりこの期間の全てのMA値が列挙された、ということです。しかし、ここでの計算は間違っていて、範囲=(Ma1-Ma2)/ポイントです。
if(range > maxrange) maxrange = range;
まあ、何が入力されているのか確認する必要がありますね。計算に関わる変数値はどれですか?
MQLチュートリアル のStandard Functionsの章、Graph Operationsのセクションに、次のような説明のWindowHandleという関数が あります。" ... 指定されたグラフが含まれるウィンドウ(ウィンドウハンドル)のシステムディスクリプタを返す".
質問:「ウィンドウハンドル」の意味(内容)、用途は?
P.S.フォーラムを混乱させないために、事前にあなたの答えをありがとうございます。