[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 240

 
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());

}

このような簡単なスクリプトは、すべての保留中の注文を 削除するはずですが、注文のちょうど半分を削除しています ...???

 
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
FAQに書いてあったのに、最初の数回はパラパラと見ていて気がつかなかった。
 
Neo333:
a1 = OrdersTotal();
for (i = 0;i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket()。

}

この単純なスクリプトは、すべての保留中の注文を削除する必要がありますが、そのうちのちょうど半分を削除しています ...???

例えば、注文が10件あったとします。

ここでは、半分(0〜5)を削除しています。

で、6個目を選ぶと......残り5個になる。エラーが発生し、削除するものがない。それは他も同じです。

 
Neo333:
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket()。

}

この単純なスクリプトは、すべての保留中の注文を削除するはずですが、注文のちょうど半分が削除されます ...???

オーダーサーチの方向を変更する。

for (i=a1-1; i>=0; i--) {・・・・・・}。

 
artmedia70:

順序列挙の方向を変更する。

for (i=a1-1; i>=0; i--) {・・・・・・}。

作品紹介 ...しかし、その論理はどうなっているのでしょう。i++とi--の違いは何でしょう?
 
Zhunko:

1.確認しましたか?

報告:役に立ったが、不具合があるようだ。

最初の端末。すべてのチャートとシンボルを削除し、7ドルのシンボルを追加し、チャートを追加しました。すべてリロードで。

テロップを画面の3/4に引き伸ばした。最初の6個を埋め、7個目は5マスになった。

次のリスタートでは、すべてが完全に埋まるわけではなく、ほぼランダムに分布します。

2つ目の端末。7円玉を乗せていました。余分な文字を削除して再起動すると、かなり深く埋まるが、埋まる深さがランダムに分布することが判明。

キャッシュが少ないのでバグなのではと思うのですが。

いずれにせよ、1つの通貨に対して、この方法は有効です。概要:事実へのレシピ :) ありがとうございます。

 
Neo333:
効くんです.しかし、その論理はどうなっているのか。i++やi--にどんな違いがあるのだろうか?

その理由はもうお分かりですね。i++やi--の問題ではなく、リストのどの端から注文を削除し始めるか、つまり(あなたがしたように)リストの先頭か(このケースで行う必要があるように)リストの末尾かの問題なのです。

注文が削除されたときに何が起こるかを理解するためには、注文がどのように配列に格納されるかを知り、理解する必要があります。

最初の順番を最初に削除すると(i=0でインデックスが付けられる)、すべての順番のインデックスが配列内でシフトされます - 最初の順番はnullになり、2番目の順番は1番目に、3番目は2番目に、といった具合に。このため、すべてのオーダーが完全に削除されるわけではなく、実際には、iが6になると、6番目のオーダーがオーダーの配列の5番目の位置に移動し、インデックス6でオーダーが選択されないだけである。

リストの末尾から注文を削除すると、シフトは起こりません。最初の注文はリスト内でゼロの位置にあり、それを持ち続けることになります。10番目のオーダーの位置が9だったので、それが削除され、次にリストの位置が8である9番目のオーダーが削除され、オーダーの配列の中で位置が0である最初のオーダーまで、削除されました。

 
Neo333:
作品紹介 ...しかし、その論理はどうなっているのでしょうか。「i++」と「i--」の違いは何でしょうか?
すでに回答されています
152
この質問に対するイルンガ
 
nadya:
すでに回答されています
152
この質問に対するイルンガ
何か、もっと噛み砕いて答えればよかったような...。:)
 
Zhunko:
...タイムテーブルを自律的に開くことができます。
それ以外のチャートは "カチカチ "です。オプションではありません。