初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 30 1...232425262728293031323334353637...260 新しいコメント Vitaly Muzichenko 2016.12.11 19:20 #291 spoiltboy:ごあいさついろいろと聞いてみたが、まだ答えが見つかっていない。以下のエントリで、その理由を教えていただけませんか?if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.システムが常にエラーを発生させる: OrderDeletefunction のチケットが無効です。: OrderDelete エラー 4051参考文献によれば、それは関数パラメータが無効な値 であるパラメータは同じようですが。ただし、条件を外してOrderDelete(ticketD)です。OrderDelete(ticketUP)。は正常に削除されます(ただし、条件付きで必要です)。何がいけなかったのか?その全貌をご紹介します。 OrderSelectで選択する必要があるため、ticketDの 値が失われ、ticketの代わりに、いくつかのyukhnyaを、印刷してみて、比較することが最も可能性が高い。そして一般的に、このような書き方はナンセンスです。 Andrei Sokolov 2016.12.11 19:44 #292 Vitaly Muzichenko: OrderSelectで選択する必要があるため、ticketDの 値が失われ、ticketの代わりに何かでたらめがある可能性が高いので、プリントアウトして比較してみてください。値がなくなったという条件でdelete関数が起動するからでしょうか?こんな風に書いてみた。if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.OrderDelete(ticketUP)。ticketD "の条件到来時に同じエラーが発生し、"ticketUP "の 注文が毎ティック 正常に削除されます。 Andrei Sokolov 2016.12.11 19:45 #293 Vitaly Muzichenko: そして、一般的にこのような書き方はナンセンスです。 まだ始めたばかりなので、コメントをお待ちしています。 Renat Akhtyamov 2016.12.11 19:52 #294 spoiltboy: まだ始まったばかりなので、コメントをお待ちしています。コードを"SRC "で貼り 付けると、見ることができます。 Andrei Sokolov 2016.12.11 20:09 #295 Renat Akhtyamov: SRC "を介してコードを 挿入することで、そのコードを見ることができます。extern int pointsl=100, pointtp=100, MagicB=1111, MagicS=2222, bars=10; extern double lotB=0.1, lotS=0.1;double slB, tpB, slS, tpS; double x=0, z=0;void OnTick() {double maxpr1=-9999; double minpr1=9999;for(int shift1=0; shift1<bars; shift1++){double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);if (i>maxpr1){maxpr1=i;}}for(int shiftA1=0; shiftA1<bars; shiftA1++){double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);if (y<minpr1) {minpr1=y;}} if (BuyLimitCount()==0 && BuyCount()==0){ slB=NormalizeDouble(minpr1-pointsl*Point,5); tpB=NormalizeDouble(minpr1+pointtp*Point,5);int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}if (SellLimitCount()==0 && SellCount() ==0){ slS=NormalizeDouble(maxpr1+pointsl*Point,5); tpS=NormalizeDouble(maxpr1-pointtp*Point,5);int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}OrderDelete(ticketUP);double maxpr=-9999; double minpr=9999;for(int shift=0; shift<bars; shift++){double e=iHigh(Symbol(), PERIOD_CURRENT, shift);if (e>maxpr){maxpr=e;}}for(int shiftA=0; shiftA<bars; shiftA++){double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);if (r<minpr) {minpr=r;}} string a;if(bars==1)a="bar: ";else a= IntegerToString(bars,1) + " bar's: ";Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");}int BuyLimitCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicB){if(OrderType()==OP_BUYLIMIT) count++;}}}return(count);}int BuyCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicB){if(OrderType()==OP_BUY) count++;}}}return(count);}int SellLimitCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicS){if(OrderType()==OP_SELLLIMIT) count++;}}}return(count);}int SellCount(){int count=0; for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){if(OrderMagicNumber()==MagicS){if(OrderType()==OP_SELL) count++;}}}return(count);} MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Questions from Beginners MQL4 Any questions from newcomers Vitaly Muzichenko 2016.12.11 20:26 #296 spoiltboy:値がなくなったという条件でdelete関数が起動するからでしょうか?こんな風に書いてみた。if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.OrderDelete(ticketUP)。ticketD "の条件が来ると,同じエラーを書き,"ticketUP "の 注文は tick 毎に正常に削除される。 注文の有無を確認し、そのようなチケットがあるものは削除し、ないものは何もしないようにすればよい。すでに削除されている注文を再度削除し続けるとどうなるか Andrei Sokolov 2016.12.11 20:43 #297 Vitaly Muzichenko: 注文の有無を確認し、そのようなチェックが入っているものがあれば削除し、なければ何もしないようにしなければなりません。すでに削除された注文を、再度削除し続けることが原因です。このエントリでは,ticketUPの 注文は,まずオープンして, 1ティック ごとに削除し,tikcetDの注文は,該当する条件が発生すると削除エラーを発生させます。ジャーナルによる。それとも、何か勘違いしているのでしょうか? Renat Akhtyamov 2016.12.11 20:45 #298 spoiltboy:が、ひょっとしてこの2つの底辺は冗長なのでしょうか?if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}OrderDelete(ticketUP);//лишняя?余計なものでなければ、どこに削除条件があるのでしょうか?これは、私が思うに、1ティック ごとに保留中の注文を削除しようとするコードの亜種です。そして、チケットの番号も不明です。それがエラーを返すことになるのです。 Renat Akhtyamov 2016.12.11 20:49 #299 spoiltboy:このエントリでは,ticketUPの 注文は,まずオープンして, 1ティック ごとに削除し,tikcetDの注文は,該当する条件が発生すると削除エラーを発生させます。ジャーナルによるとです。それとも、私が混乱しているのでしょうか?まあ、正しく。どうなんでしょう Andrei Sokolov 2016.12.11 21:09 #300 Renat Akhtyamov:まあ、その通りなんですけどね。では、何が問題なのでしょうか?これは、異なる注文の場合です。条件付きで片方を削除し、条件なしでもう片方を削除する機能。問題は、私の場合、条件なしの場合は削除関数が正常に動作し、条件付きにすると条件が発生したときにエラーになるのはなぜか、ということです。 1...232425262728293031323334353637...260 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ごあいさついろいろと聞いてみたが、まだ答えが見つかっていない。以下のエントリで、その理由を教えていただけませんか?
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.
システムが常にエラーを発生させる
: OrderDeletefunction のチケットが無効です。
: OrderDelete エラー 4051
参考文献によれば、それは
関数パラメータが無効な値 である
パラメータは同じようですが。
ただし、条件を外して
OrderDelete(ticketD)です。
OrderDelete(ticketUP)。
は正常に削除されます(ただし、条件付きで必要です)。何がいけなかったのか?その全貌をご紹介します。
OrderSelectで選択する必要があるため、ticketDの 値が失われ、ticketの代わりに何かでたらめがある可能性が高いので、プリントアウトして比較してみてください。
値がなくなったという条件でdelete関数が起動するからでしょうか?こんな風に書いてみた。
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
OrderDelete(ticketUP)。
ticketD "の条件到来時に同じエラーが発生し、"ticketUP "の 注文が毎ティック 正常に削除されます。
そして、一般的にこのような書き方はナンセンスです。
まだ始まったばかりなので、コメントをお待ちしています。
SRC "を介してコードを 挿入することで、そのコードを見ることができます。
double slB, tpB, slS, tpS; double x=0, z=0;
void OnTick()
{
double maxpr1=-9999; double minpr1=9999;
for(int shift1=0; shift1<bars; shift1++)
{double i=iHigh(Symbol(), PERIOD_CURRENT, shift1);
if (i>maxpr1){maxpr1=i;}}
for(int shiftA1=0; shiftA1<bars; shiftA1++)
{double y=iLow(Symbol(), PERIOD_CURRENT, shiftA1);
if (y<minpr1) {minpr1=y;}}
if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1) Print("ERROR OP_BUY"); else Print("OP_BUY OK");}
if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
OrderDelete(ticketUP);
double maxpr=-9999; double minpr=9999;
for(int shift=0; shift<bars; shift++)
{double e=iHigh(Symbol(), PERIOD_CURRENT, shift);
if (e>maxpr){maxpr=e;}}
for(int shiftA=0; shiftA<bars; shiftA++)
{double r=iLow(Symbol(), PERIOD_CURRENT, shiftA);
if (r<minpr) {minpr=r;}}
string a;
if(bars==1)a="bar: ";
else a= IntegerToString(bars,1) + " bar's: ";
Comment("Last ", a, "max ", DoubleToStr(maxpr, 5), ", min ", DoubleToStr(minpr, 5),".");
}
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUYLIMIT)
count++;}}}return(count);}
int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicB){
if(OrderType()==OP_BUY)
count++;}}}return(count);}
int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELLLIMIT)
count++;}}}return(count);}
int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==MagicS){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
値がなくなったという条件でdelete関数が起動するからでしょうか?こんな風に書いてみた。
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
OrderDelete(ticketUP)。
ticketD "の条件が来ると,同じエラーを書き,"ticketUP "の 注文は tick 毎に正常に削除される。
注文の有無を確認し、そのようなチェックが入っているものがあれば削除し、なければ何もしないようにしなければなりません。すでに削除された注文を、再度削除し続けることが原因です。
このエントリでは,ticketUPの 注文は,まずオープンして, 1ティック ごとに削除し,tikcetDの注文は,該当する条件が発生すると削除エラーを発生させます。ジャーナルによる。
それとも、何か勘違いしているのでしょうか?
が、ひょっとしてこの2つの底辺は冗長なのでしょうか?
OrderDelete(ticketUP);//лишняя?
余計なものでなければ、どこに削除条件があるのでしょうか?
これは、私が思うに、1ティック ごとに保留中の注文を削除しようとするコードの亜種です。
そして、チケットの番号も不明です。
それがエラーを返すことになるのです。
このエントリでは,ticketUPの 注文は,まずオープンして, 1ティック ごとに削除し,tikcetDの注文は,該当する条件が発生すると削除エラーを発生させます。ジャーナルによるとです。
それとも、私が混乱しているのでしょうか?
まあ、正しく。
どうなんでしょう
まあ、その通りなんですけどね。
では、何が問題なのでしょうか?
これは、異なる注文の場合です。条件付きで片方を削除し、条件なしでもう片方を削除する機能。
問題は、私の場合、条件なしの場合は削除関数が正常に動作し、条件付きにすると条件が発生したときにエラーになるのはなぜか、ということです。