//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
えっと...オープンオーダーのチェックの条件って、どうしてこう書けなかったんだろう。
if OrdersTotal() > 0
すべてがクリアでわかりやすい...だろう
この条件をどう書けばいいのか、1時間も悩んでしまいました...。
ただし、シンボルに未決済の注文が ある場合は、トリガーされます。
ただし、あらゆる商品の未決済または保留の注文がトリガーとなります。
うまくいくといいのですが......ポジションもツールも1つです。
でも、うまくいかないんです!
コードにエラーがあると表示されるのですが。
これに対して
---------------------------
int start()
{
//----
IfOrdersTotal()>0
PlaySound("alert.wav")。
//----
return(0)です。
}
-----------------------------
8つのエラーを出す!!!
これはどうでしょう?
これはどうでしょう?
絢爛豪華ありがとうございました。
チャートからロボットを削除するとdeinitが呼ばれるわけですが、この条件は他の方法では追跡できません...おそらく、保留中の残りのロボットをすべて削除する別のスクリプトを書く方が簡単ですが、他に方法はありません。
ところで、もうひとつ思うことがあります。
保留中の注文を削除する問題が解決されたようです。別の関数で「必要な」(削除すべき)注文の量を決め、この関数を呼び出し、条件(Total>0)でwhileし、削除のサイクル for(int i=Total-1;i<=0l; i--)、再び「必要な」と削除試行のカウントを計算して、所定のレベルに達したときにwhileから終了 するようにしています。こうすることで、すべてが削除されます。
カウント終了後、何らかの理由でオーダーが消滅した場合、無限ループに陥る可能性があります。
なぜできないのか?例えば、端末レベルでグローバル変数を 作成し、その値を代入して、この変数の起動と値の変更をservice -->global variablesでチェックしてから電源を切るようにします。
それで?
そして、これで何をしようとしているのか、聞いてもいいでしょうか。
for(int i=0; i<OrdersTotal(); i++)
ブルートフォース方式でオープンポジションを 数えようとしているように見えるが...。
ごきげんよう!!!きれいな解答が見つからない。ここでは、典型的な注文 設定を紹介します。しかし、私のロボットにパラメータでゼロを与えると、すなわち、ストップとテイクプロフィットがないと、何も動作しません。
ifを設定して、2回目にゼロで注文を入力することもできますが、ちょっと面倒です。
ここで、彼らが何をしようとしているのか、聞いてもいいでしょうか?
for(int i=0; i<OrdersTotal(); i++)
オープンポジションを数えようとしているような気がするのですが......。
まあ、指定されたパラメーターで注文を選択するわけですからね。
例)https://www.mql5.com/ru/forum/131859/page3#434221
関数 NumberOfPositions()。
この関数は、現時点でのオープンポジションの数を返します。 より正確なカウントポジションの選択は、外部パラメータで指定します。
これで何をしようとしているのか、聞いてもいいでしょうか?
for(int i=0; i<OrdersTotal(); i++)
オープンポジションを数えようとしているような気がする...。
この方法では、与えられたパラメータに従って注文を選択します。
例)https://www.mql5.com/ru/forum/131859/page3#434221
関数 NumberOfPositions()。
この関数は、現時点でのオープンポジションの数を返します。 カウントするポジションをより正確に選択するには、外部パラメータで指定します。
ありがとうございます...そのフォーラムのスレッドをブックマークに追加します。:))