[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 66 1...596061626364656667686970717273...631 新しいコメント Alekseu Fedotov 2012.04.11 17:14 #651 Fox_RM: こんにちは。ある(ユーザーが定義した)数の注文を開く際に問題が発生しました。この問題を解決するために、小さなコードを書きました。しかし、テストの終了間際になると、任意の数のオーダーが開かれることがある。以下は、コードそのものです。 もっとシンプルな解決策があれば、コメントをいただければと思います。 この方がいいかもしれません。 extern string Kolichestvo_orderov = "Количество единовременно открытых ордеров"; extern int OrederBuy = 1; extern int OrederSell = 1; int OrdS,OrdB,ticketBuy,ticketSell,lastticketSell=0,lastticketBuy=0; //========================================================================================================// //Подсчет количества ордеров BUY & SELL// //========================================================================================================// for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { OrdB++ } if(OrderType()==OP_SELL) { OrdS++ } } } //========================================================================================================// //---- Открытие ордеров SELL ----// //========================================================================================================// if(OrdS<=OrederSell) { //----- start if(trendDn==true && SthFast>88.2 && SthSlow<38.2) { ticketSell=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue); //--- Если ордер открыт параметр OrdS увеличиваю } } //-----end //========================================================================================================// //----Открытие ордеров BUY ----// //========================================================================================================// if(OrdB<=OrederBuy) { //-----start if(trendUp==true && SthFast<11.8 && SthSlow>61.8) { ticketBuy=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red); //--- Если ордер открыт параметр OrdB увеличиваю } } //------end //========================================================================================================// Artyom Trishkin 2012.04.11 21:47 #652 Lians: ありがとうございます。しかし、私にとっては少し複雑で、あなたの関数は一度に4つのメッセージを出力しますが、私は1つのメッセージを必要とします。1行に64文字以内であることが判明? いいえ、長いメッセージを、画面で読める範囲で、4つ以下に分割するのです。各パーツが64文字以内であることが主な条件です。メッセージが短い場合、1つのパートで関数に渡すことができます。 ほら、この機能を試すために、トレーラーにチップスターを取り付けたんだ。テスターでビジュアルモードで実行し、ビジュアルチャートにWin_Informインジケータを置く(それはトレーラーで私の前のメッセージにあります)。この機能がどのようなものか、すぐにおわかりいただけると思います。 ファイル: luihrmxh_iprint.mq4 9 kb Сергей 2012.04.12 04:19 #653 r772ra: そのほうがいいかもしれませんね。これは、私がアップグレードを開始する際に使用したコードについてです。あなたのバージョンには、3つの問題があります。 -OP_BUYと OP_SELLの 注文を出すと同時に、OrdBと OrdSの パラメータが1ティック ごとに自動的に増えていくので、該当ティックの変化(売りか買いか)だけを再計算条件として追加 したのです。 - すべてのオーダーを再計算するとOrdBと Ordの 誤差が生じるので、最後のオーダーの変更だけを考慮 すればよい。 - あなたのバージョンでは 、もし (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と Ord の減少がない のです。 という感じですね。 Alekseu Fedotov 2012.04.12 04:55 #654 Fox_RM: 私はこのコードくらいからバージョンアップを始めました。あなたのバージョンには、3つの問題があります。 -OP_BUYと OP_SELLの 注文を出すと同時に、OrdBと OrdSの パラメータが各ティックで自動的に増加するので、該当ティックの変化(売りか買いか)のみで再計算条件を追加 したのです。 - すべてのオーダーを再計算するとOrdBと Ordの 誤差が生じるので、最後のオーダーの変更だけを考慮 すればよい。 - あなたのバージョンでは 、もし (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と Ord の減少がない のです。 同じようです。 そう、forループの前に注文のカウンターをゼロにする必要があるのです。 //========================================================================================================// //Подсчет количества ордеров BUY & SELL// //========================================================================================================// OrdS=0; OrdB=0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { OrdB++ } if(OrderType()==OP_SELL) { OrdS++ } } } 削除済み 2012.04.12 09:10 #655 こんにちは!キムさんからの機能を理解するために、ご協力お願いします。 double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) { if (sy=="" || sy=="0") sy=Symbol(); double f=0; int d=MarketInfo(sy, MODE_DIGITS), s; if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; for (s=2; s<100; s++) { f=iFractals(sy, tf, mode, s); if (f!=0) return(NormalizeDouble(f, d)); } Print("FindNearFractal(): Фрактал не найден"); return(0); } セリフがわからない if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; なぜ最初のifの後に記号がないのか、式をこう書くとどうなるのか。StringFindは 何をするのか、なぜJPYで文字列を検索するのか?d=0はどのようにしてできるのか、どのような場合に2が割り当てられ、どのような場合に4が割り当てられるのか。回答していただけると大変ありがたいです、よろしくお願いします))) Сергей 2012.04.12 11:35 #656 r772ra: その通り、forループの前に、オーダーカウンターをゼロにリセットする必要があります ))なぜか自分では思いつかず、あたふたし始めた。 Alekseu Fedotov 2012.04.12 12:26 #657 Fox_RM: ))なぜか自分では思いつかず、風を受け始めてしまったのです。 厄介払いができた。 GaryKa 2012.04.12 12:26 #658 Lisi4ka330: なぜ最初のifの後に記号がないのか、もしこのような式を書いたらどうなるのか...。d=0はどのようにしてできるのか、どのような場合に2が割り当てられ、どのような場合に4が割り当てられるのか。ご回答いただけると幸いです、よろしくお願いします))) この方がより理にかなっていると思います。 if (d==0) { if (StringFind(sy, "JPY")<0) { d=4; } else { d=2; } } d - 見積もり精度(小数点以下の桁数). JPYのペアがある場合、メジャーのレートはxxx.xxです。 ペアにJPYがない場合、メジャーのレートはx.xxxxとなります(「4桁」の名の由来)。 Сергей 2012.04.12 13:28 #659 r772ra: そうですね、forループの前に、オーダーカウンターをゼロにリセットする必要がありますね。 もう一点、見落としていました。 - あなたのバージョンでは 、if (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と OrdS の減少がありません 。 新しいバージョンでは、例えば5つの注文を出し、再計算しましたが、if条件でそれ以上注文を出すことができません。私の古いバリアントでは、OrdB--と OrdS--。 が使用されました。 削除済み 2012.04.12 14:15 #660 GaryKa: この方がより理にかなっていると思います。 d - 見積もり精度(小数点以下の桁数). JPYのペアがある場合、メジャーのレートはxxx.xxです。 日本円がない場合、メジャーレートは約x.xxxx(4桁)となります。 GaryKa さん、回答ありがとうございます!dが0になるのはちょっと不明ですが、関数 d=MarketInfo(sy, MODE_DIGITS) は小数点以下の桁数を返すので、d は常に 0 より大きくなり、条件は常に偽となります。 1...596061626364656667686970717273...631 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
以下は、コードそのものです。
もっとシンプルな解決策があれば、コメントをいただければと思います。
この方がいいかもしれません。
ありがとうございます。しかし、私にとっては少し複雑で、あなたの関数は一度に4つのメッセージを出力しますが、私は1つのメッセージを必要とします。1行に64文字以内であることが判明?
いいえ、長いメッセージを、画面で読める範囲で、4つ以下に分割するのです。各パーツが64文字以内であることが主な条件です。メッセージが短い場合、1つのパートで関数に渡すことができます。
ほら、この機能を試すために、トレーラーにチップスターを取り付けたんだ。テスターでビジュアルモードで実行し、ビジュアルチャートにWin_Informインジケータを置く(それはトレーラーで私の前のメッセージにあります)。この機能がどのようなものか、すぐにおわかりいただけると思います。
そのほうがいいかもしれませんね。
これは、私がアップグレードを開始する際に使用したコードについてです。あなたのバージョンには、3つの問題があります。
-OP_BUYと OP_SELLの 注文を出すと同時に、OrdBと OrdSの パラメータが1ティック ごとに自動的に増えていくので、該当ティックの変化(売りか買いか)だけを再計算条件として追加 したのです。
- すべてのオーダーを再計算するとOrdBと Ordの 誤差が生じるので、最後のオーダーの変更だけを考慮 すればよい。
- あなたのバージョンでは 、もし (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と Ord の減少がない のです。
という感じですね。
私はこのコードくらいからバージョンアップを始めました。あなたのバージョンには、3つの問題があります。
-OP_BUYと OP_SELLの 注文を出すと同時に、OrdBと OrdSの パラメータが各ティックで自動的に増加するので、該当ティックの変化(売りか買いか)のみで再計算条件を追加 したのです。
- すべてのオーダーを再計算するとOrdBと Ordの 誤差が生じるので、最後のオーダーの変更だけを考慮 すればよい。
- あなたのバージョンでは 、もし (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と Ord の減少がない のです。
同じようです。
そう、forループの前に注文のカウンターをゼロにする必要があるのです。
こんにちは!キムさんからの機能を理解するために、ご協力お願いします。
セリフがわからない
なぜ最初のifの後に記号がないのか、式をこう書くとどうなるのか。StringFindは 何をするのか、なぜJPYで文字列を検索するのか?d=0はどのようにしてできるのか、どのような場合に2が割り当てられ、どのような場合に4が割り当てられるのか。回答していただけると大変ありがたいです、よろしくお願いします)))
その通り、forループの前に、オーダーカウンターをゼロにリセットする必要があります
))なぜか自分では思いつかず、風を受け始めてしまったのです。
厄介払いができた。
この方がより理にかなっていると思います。
d - 見積もり精度(小数点以下の桁数).
JPYのペアがある場合、メジャーのレートはxxx.xxです。
ペアにJPYがない場合、メジャーのレートはx.xxxxとなります(「4桁」の名の由来)。
そうですね、forループの前に、オーダーカウンターをゼロにリセットする必要がありますね。
もう一点、見落としていました。
- あなたのバージョンでは 、if (OrdB<=OrederBuy),if(OrdS<=OrederSell) の注文をさらに開くための パラメータOrdB と OrdS の減少がありません 。
新しいバージョンでは、例えば5つの注文を出し、再計算しましたが、if条件でそれ以上注文を出すことができません。私の古いバリアントでは、OrdB--と OrdS--。
が使用されました。
この方がより理にかなっていると思います。
d - 見積もり精度(小数点以下の桁数).
JPYのペアがある場合、メジャーのレートはxxx.xxです。
日本円がない場合、メジャーレートは約x.xxxx(4桁)となります。