[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 564

 
rigonich:

エラー1は、OrderModify()関数に渡されたすべてのパラメータが、変更するために選択した(チケット番号で)変更可能なオーダーのすべてのパラメータと等しい場合にのみ発生します。

1 (ERR_NO_RESULT) - どのパラメータも変更されていないか、 エラーは発生していないが、結果が不明な場合、ほとんどの場合、何らかの理由で注文が変更されていない...。
 
abeiks:

そうですね、プログラミングは得意ではないので、ここで勉強したり質問したりしています。私はあなたの アルゴリズムにポジションクロージングを追加しようとしましたが、うまくいきませんでした(すべての買いポジションが閉じていました)ので、反対側から 問題にアプローチし、 提供され提供された既製のクロージングブロックで最後の2つの買いポジションを閉じるという解決策を見る ことにしました。

最後の2つの買いポジションを決済する方法を教えていただけるとありがたいです。自 分がどこを間違えたのか、理解できるようになる。

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

一般的なケースで言えば、このような感じです。もし、"moronic "バリエーション(私が使っているものです)を使うなら、ループを開始しなければなりません:まず、最後に開いた BUYポジションを 見つけ、それをチケットから削除し、必要な回数だけループを繰り返すのです。

P.S. 買いと売りの機能を別々に書くというのは、最初から間違っている(IMHO)。

そして、その場合の関数は、それほど複雑には見えないだろう。

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - どのパラメータも変更されていない場合、または エラーはないが結果が不明な場合、おそらく何らかの理由で注文が変更されていないだけでしょう ...
ERR_NO_RESULT はどちらか一方ではなく、エラーはないが結果が 不明であることを示します。どのような場合にこのエラーが返ってくるかは、上記のとおりです。もし関数 GetLastError() が関数OrderModify() の後に呼ばれた場合、それは間違いなく エラーコード(すなわち、オーダーが修正されなかった理由)または 0(修正に成功した場合)を返すでしょう。

 
TarasBY:

一般的な場合ではそうです。もし、"moronic "バリエーション(私が使っているものです)を使うなら、ループを開始しなければなりません:まず、最後のオープンBUYポジションを見つけ、それをチケットから削除し、必要な回数だけループを繰り返してください。

P.S. 買いと売りの機能を別々に書くというのは、最初から間違っている(IMHO)。

そして、この場合の機能は、それほど複雑には見えないだろう。


ありがとうございます、調べてみます。

 

皆さんこんばんは、MetaTrader4(最新)が全く更新されないのですが、教えていただけませんか?昨日インストールしたのですが、最終更新日が11月30日となっており、どの通貨ペアにもダイナミクスがなく、どの通貨を買ってもマーケットが閉じて います。(私はDemoアカウントを持っています)。更新を有効にする方法、または価格変動を把握するために必要なことを教えてください。

 
Lucifer982:

皆さんこんばんは、MetaTrader4(最新)が全く更新されないのですが、教えていただけませんか?昨日インストールしたのですが、最終更新日が11月30日となっており、どの通貨ペアにもダイナミクスがなく、どの通貨を買ってもマーケットが閉じています。(私はDemoアカウントを持っています)。更新を有効にする方法、または価格変動を把握するために必要なことを教えてください。


システムは数時間以内に更新を開始します(タイムゾーンによって 異なります)。DoCは土曜日、日曜日が休みなので、何も心配することはありません))))

あるいは、第二の選択肢として、財務省のサービスデスクに苦情を書いてください。

 
T1000:


数時間以内に自動的にオンになります(タイムゾーンによって異なります)。サービスデスクは土日が休みなので、嫌な人がいない))))

あるいは、第二の選択肢として、財務省のサービスデスクに苦情を書いてください。


なるほど、ありがとうございます、待ちます)
 

あるペアの未決済注文の合計数を取得する方法を教えてください。

私は1つのチャートを開いており、EAは10シンボルで動作しています。

チャートのコメントには、各シンボルの未決済注文の合計数を表示させることにしました。

どうすればいいのでしょうか?OrdersTotalに 合計金額が表示されている場合は

 
gheka:

どんなふうに?

例えば、こんな風に

 
何度お世話になったことか、ありがとうございました(笑)。
DmitriyN:

例えば、こんな風に