どのデザインが正しいのでしょうか? - ページ 7

 
Vladon:
私はかつて、コードベースでさまざまなタイプを閉じるための独自のセットを発表したことがあります。
この場合、コンパイルされたファイルを渡すことになるので、このブランチでは役に立ちません。
Vladon(ブラドン)。
https://www.mql5.com/ru/code/mt4

そしてこちら、すみません、フォーラム違いです。

悪気はないんです。

 

あ、そうじゃなくて :-) 、今。


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
では、そのような設計では、理論的にはすべての注文をすべて閉じるはずですが、現在のウィンドウの一組しか閉じません、何か間違いがあるのでしょうか?
 
Vladon:

あ、そうじゃなくて :-) 、今。


https://www.mql5.com/ru/code/9052


はい、あなたのキットは良いですが、私のコードのどこにバグがあるのかがわかりません。
 
valenok2003:

はい、あなたのキットは良いですが、私のコードのどこにバグがあるのかがわかりません。

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
その頑固さには驚かされることもあります。このスレッドの3ページ目とさらに下のほうで、オーバライドオーダーの適切な例が紹介されていましたね。最後にRTFM。何度言えばわかるんだ、 配列の外側で 終了しろって。番号付き注文
OrdersTotal()

は存在しない!そうすれば、うまくいくでしょう。

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
その頑固さには驚かされることがあります。このスレッドの3ページ目とさらに下のほうに、オーダーブルートフォースの正しい例が紹介されています。最後にRTFM。何度言ったらわかるんだ、アレイの外から出る んだよ。番号付き注文

は存在しない!そうすれば、うまくいくでしょう。


ウラジスラフさん、申し訳ありません。頑固というより、不注意でしたね。実験をしていて、コードを訂正していなかったのです。

もちろん、そうです。

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

しかし、修正されたデザインは、このような理由ではないようです。

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

は、スクリプトを投げたウィンドウのペアにのみ注文を閉じますが、すべてのペアには閉じません。

 

スターターのプロフィールより「オーダーメイドを含め、MQL4で書いています」--気負い過ぎの典型的な例だ。

プログラマーは平均的な存在であることは理解しています。慣れるものです。そして、私自身も、努力はしているものの、時々、悪いコードを書いてしまうことがあります。しかし、何がどうなるのか...

ある人の古い思い込みを確認すると、スターターの頭の中には羊毛が入っている。

 
valenok2003:


ウラジスラフさん、申し訳ありません。頑固というより、不注意でしたね。実験をしていて、コードを訂正していなかったのです。

もちろん、そうです。

しかし、修正されたデザインは、それが理由ではないようです。

は、スクリプトが投げられたウィンドウのペアに対してのみ注文を閉じますが、すべてのペアを閉じるわけではありません。

すべてのペアの場合、あなたは正しくAskを使用していない、入札 - あなたは、現在のチャートから取得しています。注文を閉じるときにエラーを処理した場合 - メッセージが表示されます。

アスクの代わりに - MarketInfo(OrderSymbol(),MODE_ASK); ビッドの代わりに - MarketInfo(OrderSymbol(),MODE_BID) を使用します。

頑張ってください。

ZSとスクリプトの名前を変更してください、名前によれば正しく動作しますから ;)。

 
gip:

スターターのプロフィールより「オーダーメイドを含め、MQL4で書いています」--気負い過ぎの典型的な例だ。

プログラマーは平均的な存在であることは理解しています。慣れるものです。そして、私自身も、努力はしているものの、時々、悪いコードを書いてしまうことがあります。しかし、何がどうなるのか...

ある人の古い思い込みを確認すると、このトピックを立てた人の頭の中には羊毛があるそうです。


もちろん、そう言われるのは残念なことです。しかし、実現できない注文は受けない。そして、注文のレベルも様々であることをご理解いただきたいと思います。そして、誰かが言ったように、「知らないことは恥ではない」のです。聞かないのは勿体ない...。そして、私が理解しているように、このフォーラムはまさに学習の機会を提供するために存在しているのです。だから、あなたのスノッブさが私にはよくわからないし、あなたの批判も受け入れられないのです。このフォーラムで一番賢いのはあなただと認めますが。

追伸:プログラミングの技術は、コードを書く能力ではなく、正しいアルゴリズムを作る能力にあるのです。ずっとラーダに乗っていて、メルセデスに乗り換えてノブやボタンの位置がわからなくなっても、それで運転が下手になっているわけではないようなものです。

 
VladislavVG:

すべてのペアの場合、あなたは正しくアスクを使用していない、入札 - あなたは、現在のチャートから取っている。注文を閉じるときにエラーを処理した場合、メッセージが表示されます。

アスクの代わりに - MarketInfo(OrderSymbol(),MODE_ASK); ビッドの代わりに - MarketInfo(OrderSymbol(),MODE_BID) を使用します。

頑張ってください。


ありがとうございました。エラー処理をしていると、価格が違う というメッセージが返ってくるのですが、何が悪いのかが分かりません。