//+------------------------------------------------------------------+//| Search position of an element in a sorted list |//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
{
int i,j,m;
CObject *t_node=NULL;
//--- checkif(m_data_total==0)
return(NULL);
//--- check the pointer is not needed
i=0;
j=m_data_total;
while(j>=i)
{
//--- ">>1" is quick division by 2
m=(j+i)>>1;
if(m<0 || m>=m_data_total)
break;
t_node=GetNodeAtIndex(m);
if(t_node.Compare(element,m_sort_mode)==0)
break;
if(t_node.Compare(element,m_sort_mode)>0)
j=m-1;
else
i=m+1;
t_node=NULL;
}
//--- resultreturn(t_node);
}
それから、この質問。M15でインジケーターが動作している場合。新しいローソク足が形成される。M15とM30のデータを要求する場合、同時に入手できるようにする必要がありますか?
はい。
インジケーターを作成(通常の処理サイクルに含める)し、通常のティック処理サイクル(ontik)に入った後、高い確率でデータを利用できるようになります。しかし、他のシンボルの履歴をダウンロードする可能性があるため、保証がないことを忘れないでください。
つまり、指標となるデータの要求結果を常に確認することです。オンティカでデータを要求しても利用できない場合は、すぐに終了して次のティックで確認してください。
よくある「準備は万端、データの受け渡しや計算などの技術的なことは考えない、関係ない、私はいつもラッキーだ」というような勘違いはしないようにしましょう。初期化ロジックやデータ制御は必ず遅延させるように実装してください。
必ず空のチャートベース上でプログラムをテストしてください。通常、履歴データベースを手動で消去した状態で端末を再起動すれば、間違ったインデックスやゼロによる除算による様々なアクセスエラーが発生するほどです。
あるシンボルでm15のバーが出たのなら、同じシンボルには間違いなくm30のバーがあるはずです。
はい。
もうひとつ質問です。BarsCalculated()関数は、EAやインジケータから呼び出されても同じ動作をするのでしょうか?
どうしたんですか?
いろいろな情報を実験してみたということなんです。私の理解では、それらは同じように機能するはずです。でも、そうではない。日曜日なので、現在の時刻で 確認する方法がない。でも、テスターでも違う動きをするんですよ。以下、2つのコードサンプルを紹介します。その要旨は次のとおりである。7つのTFからデータを取得しようとしています。私たちは(アドバイザーもインジケーターも)最も重要なTFからではなく、それを開始します。例えば、М15.現在のティックが新しいローソクの形成とBarsCalculated()を介してこのローソクのデータを受信することを同期している場合 - 次に我々はBarsCalculated()と現在のローソクの時間を使用して計算バーの数を記録しています。詳細はコードでご確認ください。
指標となる。
最初のティック。
TFごとに、新しいローソク足が形成されます。しかし、TF M1, M5, M15では、BarsCalculated()は0を返しますが、TF M30, H1, H4, D1では、-1を返します。ここで疑問なのですが、なぜ機能の働きが違うのでしょうか?したがって、TF M30で実行すると、TF M1, M5, M15, M30では、BarsCalculated()は0を返し、TF H1, H4, D1では、それぞれ-1を返 します。このことから、より高いTFについては、当初はデータが得られないと結論付けることができる。
2つ目のティック。
コードロジックによると、同期、すなわちパラメータの書き込み(すべてサンプルのログによると)。
3回目とその次のティック。
TF M30、H1、H4、D1のインジケーターで新しいバーを取得します。とはいえ、すでにデータは取れているようですが。そして、TF上の、現在の数字より大きい数字が1だけ大きいことが判明しました。非常に不思議な動作です。将来的には(今の例では)同期がとれなくなる。
エキスパート・アドバイザー
最初のティック。
同期がすぐに実行されます。BarsCalculated()の新しい値は、新しいローソクの形成と同期して受け取られます。
2回目以降のティック
関数の論理的な動作。すべてがシンクロしている。
テスターで両方の例をティックによって実行し、あなた自身のために表示されます。現在の機能の動作は、Expert Advisorとindicatorsで異なります。また、指標から得られるデータは、より高い時間枠では遅れて表示されます。し たがって、M15とM30のデータを要求する場合 、同時に入手する ことはできないと思います。実際のデータは絶対に違う!
もし私の勘違いであれば、古いTFからインジケータデータを正しく取得する方法をご教示ください。ありがとうございます。
なぜ2回もCompareに 電話するのか?これは高価な操作かもしれない(いくつかのフィールドの等価性ではなく、大きなオブジェクトの等価性をチェックする必要がある場合)。
Compare を最初に呼び出した後に、その結果を保存するだけでよいのです。
グラフの下にあるアイコンはどこから来ているのでしょうか?
チャート上にインジケータがないのに、毎回アイコンが表示される。 削除するのも嫌になる。 どうしたら消せるの? ターミナルの設定に何も書いてないんだけど。
グラフ下部のアイコンはどこから来ているのでしょうか?
チャート上にインジケータがないのにアイコンが毎回出てくる。 削除するのが面倒くさい。 どうやったら消せるの? ターミナルの設定を見ても関連するものが見当たらないんだけど。
カレンダー」タブのイベントです。削除方法:「カレンダー」タブ内で右クリック→「グラフに表示」→「すべてのイベントを削除」。
P.S.そして、「自動更新」のチェックを外してください。新しいカレンダーイベントがチャートに表示されないようになりました。
MetaQuotesの例から)任意のExpert Advisorを選び、ビルド975で特定の期間、同じパラメータで実行します。
結果、すなわちイールドカーブチャートと取引表を入手する。
同じEAをビルド1010で同じ期間、同じパラメータで実行すると、まったく異なる結果が得られます...。
追伸:Metatesterは32bitです。
皆さんこんにちは)タイマーを起動するのに協力してください。
int OnInit()
{
bool setTimer=EventSetTimer(60)。
Print("setTimer")。
}
void OnTimer()
{
Print("Passing time");
}
質問:なぜうまくいかないのですか?吹いた...((((;゚Д゚))))))))ガクガクブルブル