//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает количество ордеров. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
注文数の値は ko なので、次の関数は ko を使って書けばいいのでしょうか?returnはここで何をするのでしょうか?
1.コードから &&OrderSymbol()==Symbol() を削除する必要があります。
2.ビッドとアスカを正規化する必要がある。
3.スリッページを10ポイントに設定せず、動的に計算した方が良い。例えば、金の注文で、この商品が1ティックあたり50ポイント通過する場合、10ポイントのスリッページが発生するとリクオートが 発生します。したがって、最小ティックサイズを計算し、この10を掛けるとよいでしょう。
4.コードにエラー処理を挿入する必要があります。そうでないと、失敗したときに、なぜ注文が成立しなかったのかがわからなくなります。
1.コードから &&OrderSymbol()==Symbol() を削除する必要があります。
2.ビッドとアスクを正規化する必要がある。
3.スリッページは10pipsではなく、動的に計算した方が良い。例えば、金の注文で、この商品が1ティックあたり50ポイント動くとすると、10ポイントのスリッページで多くのリクオートが発生することになります。したがって、最小ティックサイズを計算し、この10を掛けるとよいでしょう。
4.コードにエラー処理を挿入する必要があります。そうしないと、障害が発生したときに、なぜ注文が締め切られなかったのかがわからなくなります。
ありがとうございます。テスターで試してみますが、オーダーの修正について、何かアドバイスはありますか?
返送先はどこですか?
0行目まではっきりと、ティック待ちをすること
こちらも異常なし - 停止
で、ここは?
注文数の値は ko なので、次の関数は ko を使って書けばいいのでしょうか?returnはここで何をするのでしょうか?return() は、誰もどこにも送らない。
return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。return(expression); を使用すると、現在の関数が終了し、結果が送信されます。演算子式は括弧で囲まれ、代入演算 子を含んではならない。
return() は、誰もどこにも送らない。
return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。return(expression); を使用すると、現在の関数が終了し、結果が送信されます。演算子式は括弧で囲まれ、代入演算子を含んではならない。
では、条件を満たさない場合、EAの動作を停止させることは、どのようにすれば正しいのでしょうか?眠らせるのではなく、完全に止めるのです。
スリープさせる」とはどういう意味ですか、「停止する」とはどういう意味ですか。
put to sleep」の意味と「stop」の意味を教えてください。
スリープにする-スリープに すると、再び起動しようとします。
停止 - Expert Advisor が動作を停止するように、完全に停止します(その「顔」を変更します)。
例えば、Expert AdvisorはEurobucksの下にありますが、EuroJPYで投げていました。シンボルをチェックし、不一致の場合はアラートを投げ、手動で再起動する前にそれ以上動作させようとしない。
スリープにする-スリープにすると、再び起動しようとします。
停止 - Expert Advisor が動作を停止するように、完全に停止します(その「顔」を変更します)。
例えば、Expert AdvisorはEurobucksの下にありますが、EuroJPYで投げていました。シンボルをチェックし、不一致の場合はアラートを投げ、手動で再起動する前に再度動作させようとしない。
なぜそんなに複雑なのか?
start() 関数で条件処理を行うだけで十分です。
この場合、EAを間違った機器に設定すると、自分でEAを無効にするまでアラートで溢れかえってしまいます。サイレン音も追加すれば、確実に消せます