FAQ 04.03.201112: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);
пример организации отдельной функции:
//--------------------------------------------------------------- GetLastFracdouble 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));
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());
}
このような簡単なスクリプトは、すべての保留中の注文を 削除するはずですが、注文のちょうど半分を削除しています ...???
a1 = OrdersTotal();
for (i = 0;i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket()。
}
この単純なスクリプトは、すべての保留中の注文を削除する必要がありますが、そのうちのちょうど半分を削除しています ...???
例えば、注文が10件あったとします。
ここでは、半分(0〜5)を削除しています。
で、6個目を選ぶと......残り5個になる。エラーが発生し、削除するものがない。それは他も同じです。
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket()。
}
この単純なスクリプトは、すべての保留中の注文を削除するはずですが、注文のちょうど半分が削除されます ...???
オーダーサーチの方向を変更する。
for (i=a1-1; i>=0; i--) {・・・・・・}。
順序列挙の方向を変更する。
for (i=a1-1; i>=0; i--) {・・・・・・}。
1.確認しましたか?
報告:役に立ったが、不具合があるようだ。
最初の端末。すべてのチャートとシンボルを削除し、7ドルのシンボルを追加し、チャートを追加しました。すべてリロードで。
テロップを画面の3/4に引き伸ばした。最初の6個を埋め、7個目は5マスになった。
次のリスタートでは、すべてが完全に埋まるわけではなく、ほぼランダムに分布します。
2つ目の端末。7円玉を乗せていました。余分な文字を削除して再起動すると、かなり深く埋まるが、埋まる深さがランダムに分布することが判明。
キャッシュが少ないのでバグなのではと思うのですが。
いずれにせよ、1つの通貨に対して、この方法は有効です。概要:事実へのレシピ :) ありがとうございます。
効くんです.しかし、その論理はどうなっているのか。i++やi--にどんな違いがあるのだろうか?
その理由はもうお分かりですね。i++やi--の問題ではなく、リストのどの端から注文を削除し始めるか、つまり(あなたがしたように)リストの先頭か(このケースで行う必要があるように)リストの末尾かの問題なのです。
注文が削除されたときに何が起こるかを理解するためには、注文がどのように配列に格納されるかを知り、理解する必要があります。
最初の順番を最初に削除すると(i=0でインデックスが付けられる)、すべての順番のインデックスが配列内でシフトされます - 最初の順番はnullになり、2番目の順番は1番目に、3番目は2番目に、といった具合に。このため、すべてのオーダーが完全に削除されるわけではなく、実際には、iが6になると、6番目のオーダーがオーダーの配列の5番目の位置に移動し、インデックス6でオーダーが選択されないだけである。
リストの末尾から注文を削除すると、シフトは起こりません。最初の注文はリスト内でゼロの位置にあり、それを持ち続けることになります。10番目のオーダーの位置が9だったので、それが削除され、次にリストの位置が8である9番目のオーダーが削除され、オーダーの配列の中で位置が0である最初のオーダーまで、削除されました。
作品紹介 ...しかし、その論理はどうなっているのでしょうか。「i++」と「i--」の違いは何でしょうか?
すでに回答されています
...タイムテーブルを自律的に開くことができます。