//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество позиций. |//+----------------------------------------------------------------------------+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);
}
//+----------------------------------------------------------------------------+
そして、これはおまけです。
int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic);
int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);
昔のByesの数を覚えておいて、今の数と比較する、他に方法は?
それこそ、私には無理です。
を整数変数として作成し、そこに購入数を代入し、改めて購入数をカウントしてその変数の値と比較したいのですが、うまくいきません。
この価値観は何も間違っていない、すべて正しいのですが、そういう話ではないのです。
特に金曜日の問題は、あなたのローカルタイムがブローカーの時間よりX時間長い場合は関係ありません。
しかし、あなたのローカルコンピュータ上でブローカーとの間に+1ではなく、-1時間の差がある場合を想像してみてください。
そして、このシンプルな条件があります。
この場合
1.ブローカーは金曜日の最初のティック、例えば今日のティックは、2014.11.07 00:00の時刻を持っています。
2.1970年01 月01日00:00から当該ティックまでの経過秒数、すなわち2014.11.07 00:00を 取る。
3. 1970年01 月01日00:00から2014年11月06 日21:30までの 経過秒数を取る(ローカルPCの時刻を取るので昨日の日付になる、刻んだ時点では金曜日ではなく6日目の木曜日、より正確には2014.11.06 23:00 で1時間差となる)。
ほら、ポイント2の方がポイント3より秒数が大きい。
StringToTime() 関数がブローカーのサーバーから日付を取得する場合、すべてが計画通りに動作し、印刷は時刻が21:30を超えた後の金曜日にのみ 実行されます。
そうですね...すぐには理解できなかった。私のローカルは常にサーバーより大きく、そのような問題に遭遇したことはありません。日数を考慮して、時短の表現を使わないようにするしかない。
そうですね、正しい時刻を関数に与えるオプションとして、TimeCurrent()から抽出された日付と一緒に、この場合、問題はないように見えるはずです。
ところで、私の現地時間は ブローカーの時間より常に大きいのですが、それにもかかわらず、上記のような問題が先週の金曜日、2つの異なるブローカー(1つはデモ、もう1つはリアル)で同じ時刻に発生したのです。なぜそうなったのかは、まだ謎のままだ。しかし、このコードはすでに別のものに置き換えられているので、この問題は二度と起こらないはずです。
そうですね、正しい時刻を関数に与えるオプションとして、TimeCurrent()から抽出された日付と一緒に、この場合、問題はないように見えるはずです。
ところで、私の現地時間はブローカーの時間より常に大きいのですが、それにもかかわらず、上記のような問題が先週の金曜日、2つの異なるブローカー(1つはデモ、もう1つはリアル)で同じ時間に発生しました。なぜそうなったのかは、まだ謎のままだ。しかし、このコードはすでに別のものに置き換えられているので、この問題は二度と起こらないはずです。
整数の変数を作り、そこに購入数を代入し、もう一度購入数をカウントしてその変数の値と比較することはできないのでしょうか。
コードの例を教えてください。
比較後、変数を書き換えないと、同じコードが無限に実行されることになります。(6だったのが7になったとすると、比較の結果7になったことを変数に書く必要がある)
コードの例を教えてください。
比較後、変数を書き換えないと、同じコードが無限に実行されることになります。(6個あったのが7個になったとすると、比較の結果7個になったことを変数に書けばよい)。
気にしないでください。私が使っているKimの機能はこちらで、すべてのビルドで動作します。
そして、これはおまけです。
あとは目的に応じてチェックするだけです。
if(BuyPos >= n)
悩む必要はありません。ここに私が使っているキム関数がありますが、これはすべてのビルドで動作します。
しかも、それに加えて
あとは目的に応じてチェックするだけです。
悩む必要はありません。ここに私が使っているキム関数がありますが、これはすべてのビルドで動作します。
しかも、それに加えて
あとは目的に応じてチェックするだけです。
プラグを差し込むと 無限で動作する...
この記事の最後の方法を使用して問題を解決することができました https://www.mql5.com/ru/articles/1399