MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 15 1...8910111213141516171819202122...1953 新しいコメント Artyom Trishkin 2016.11.23 20:45 #141 Vitalie Postolache: サイクルは、OrdersTotal()-1 から 0 までの逆順に数える必要があります。 ループで閉じる場合。 Vitaly Muzichenko 2016.11.23 20:49 #142 Vitalie Postolache: ループは、OrdersTotal()-1 から 0 まで、逆算する必要があります。 これらはKimの機能であり、欠けることなく動作しています。 Vitalie Postolache 2016.11.23 21:18 #143 つまり、同じシンボルで複数のアドバイザーのスイッチを誤って入れてしまった、そんな人も少なくないはずです。 Renat Akhtyamov 2016.11.24 05:00 #144 Neron_76: こんにちは!私のFXロボットをデモ口座に インストールし、2ヶ月目も稼働しています。今日ターミナルを開いているのですが、以前は1つだけ注文を出していたのに、1つのシグナルによって2つのオープンオーダーが出ています。注文数に制限があるのですが。その理由は何でしょうか。コードから判断すると、成行注文ではなく、保留注文をしているように見えます。 未決済注文数の制限は、成行注文にのみ適用されます。そのため、エラーは発生せず、したがって問題はないのです。 Neron_76 2016.11.24 11:26 #145 Renat Akhtyamov:コードから判断すると、成行注文ではなく、保留注文をしているように見えます。 未決済注文数の上限は、成行注文にのみ適用されます。したがって、エラーはなく、したがって問題はない。 この制限は、未決済注文 および保留中の注文に 適用されます。これは1ヶ月半の間に2回目のケースです。他のケースはすべて正しいです。 Vitaly Muzichenko 2016.11.24 13:06 #146 Neron_76: この制限は、未決済注文 および保留中の注文 に適用されます。この1ヵ月半で2回目ですが、他のケースはすべてその通りになっています。この方法で試してみてください。if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Buy<Low[1] && sar>Close[1]) { SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number); return(0);}if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) { SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number); return(0);}//===============================================================================================//------------------------------- Возвращает количество позиций --------------------------------+//===============================================================================================int NumberOfPositions(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);}//===============================================================================================//------------------------------- Возвращает количество ордеров --------------------------------+//===============================================================================================int NumberOfOrders(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()>1 && OrderType()<6) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);} Any questions from newcomers [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 [WARNING CLOSED!] Any newbie Neron_76 2016.11.24 16:45 #147 Vitaly Muzichenko:この方法で試してみてください。if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Buy<Low[1] && sar>Close[1]) { SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number); return(0);}if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) { SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number); return(0);}//===============================================================================================//------------------------------- Возвращает количество позиций --------------------------------+//===============================================================================================int NumberOfPositions(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);}//===============================================================================================//------------------------------- Возвращает количество ордеров --------------------------------+//===============================================================================================int NumberOfOrders(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()>1 && OrderType()<6) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);} 機能を交換したところ、テストでは問題なく動作しています。デモでの取引でどうなるのか見てみましょう。しかし、なぜか私の場合、これらとこれらの関数は同じタスク、つまり注文とポジションがあるかどうかという質問に答えているように思えます。 Vitaly Muzichenko 2016.11.24 17:12 #148 Neron_76: 機能を入れ替えました、テストでは問題なく動作しています。デモでの取引でどうなるのか見てみましょう。しかし、なぜか私の場合、両方の関数が同じタスク、つまり注文とポジションがあるかどうかの質問に答えているように見えます。 注文の二重設定を繰り返す場合、"SetOrder"関数は再考されるべきです、おそらくそれは2つの要求を与え、最初の要求の後に関数からの終了がなく、それは2番目のものを送信する時間があります。 Neron_76 2016.11.24 18:56 #149 Vitaly Muzichenko: 注文の二重設定が繰り返される場合、「SetOrder」関数を見直す必要があります。おそらくそれは2つの要求を与え、最初の要求の後に関数から終了がなく、2番目のものを送信するために管理されます。 もしそうだとしたら、なぜいつもそうなるのではなく、ティックとティックの間に何かが起こるのでしょうか?苦手なんです。 Artyom Trishkin 2016.11.24 19:06 #150 Neron_76: もしそうだとしたら、なぜいつもそうならないのか、チックの間に何かあるのか。苦手なんです。 あるシンボルのティックとティックの間に、別のシンボルのティックがある場合があります。EAがマルチカレンシーの場合、別のシンボルからのティックを見ます。また、タイマーイベント - OnTimer() とOnChartEvent() イベントは、ティックの間に発生することがあります - もう少しで「イベントイベント」と書くところでした...。がセットアップされているのだろう... 1...8910111213141516171819202122...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
サイクルは、OrdersTotal()-1 から 0 までの逆順に数える必要があります。
ループは、OrdersTotal()-1 から 0 まで、逆算する必要があります。
こんにちは!私のFXロボットをデモ口座に インストールし、2ヶ月目も稼働しています。今日ターミナルを開いているのですが、以前は1つだけ注文を出していたのに、1つのシグナルによって2つのオープンオーダーが出ています。注文数に制限があるのですが。その理由は何でしょうか。
コードから判断すると、成行注文ではなく、保留注文をしているように見えます。
未決済注文数の制限は、成行注文にのみ適用されます。
そのため、エラーは発生せず、したがって問題はないのです。
コードから判断すると、成行注文ではなく、保留注文をしているように見えます。
未決済注文数の上限は、成行注文にのみ適用されます。
したがって、エラーはなく、したがって問題はない。
この制限は、未決済注文 および保留中の注文 に適用されます。この1ヵ月半で2回目ですが、他のケースはすべてその通りになっています。
この方法で試してみてください。
SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number);
return(0);
}
if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) {
SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number);
return(0);
}
//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()>1 && OrderType()<6) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
この方法で試してみてください。
SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number);
return(0);
}
if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) {
SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number);
return(0);
}
//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()>1 && OrderType()<6) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
機能を入れ替えました、テストでは問題なく動作しています。デモでの取引でどうなるのか見てみましょう。しかし、なぜか私の場合、両方の関数が同じタスク、つまり注文とポジションがあるかどうかの質問に答えているように見えます。
注文の二重設定が繰り返される場合、「SetOrder」関数を見直す必要があります。おそらくそれは2つの要求を与え、最初の要求の後に関数から終了がなく、2番目のものを送信するために管理されます。
もしそうだとしたら、なぜいつもそうならないのか、チックの間に何かあるのか。苦手なんです。