[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 1114

 
pr0fess0r64


1.コードから &&OrderSymbol()==Symbol() を削除する必要があります。

2.ビッドとアスカを正規化する必要がある。

3.スリッページを10ポイントに設定せず、動的に計算した方が良い。例えば、金の注文で、この商品が1ティックあたり50ポイント通過する場合、10ポイントのスリッページが発生するとリクオートが 発生します。したがって、最小ティックサイズを計算し、この10を掛けるとよいでしょう。

4.コードにエラー処理を挿入する必要があります。そうでないと、失敗したときに、なぜ注文が成立しなかったのかがわからなくなります。

 
drknn:


1.コードから &&OrderSymbol()==Symbol() を削除する必要があります。

2.ビッドとアスクを正規化する必要がある。

3.スリッページは10pipsではなく、動的に計算した方が良い。例えば、金の注文で、この商品が1ティックあたり50ポイント動くとすると、10ポイントのスリッページで多くのリクオートが発生することになります。したがって、最小ティックサイズを計算し、この10を掛けるとよいでしょう。

4.コードにエラー処理を挿入する必要があります。そうしないと、障害が発生したときに、なぜ注文が締め切られなかったのかがわからなくなります。

これは一般的な見方で、細かいところはいくらでも思いつくはずです。
 
pr0fess0r64:
ありがとうございます。テスターで試してみますが、オーダーの修正について、何かアドバイスはありますか?
改造時にログブックにエラーが出ることはありませんか?
 

返送先はどこですか?

0行目まではっきりと、ティック待ちをすること

int start()
  {
//----
   
//----
   return(0);
  }

こちらも異常なし - 停止

   if(Lot_s<=0){
    Alert("Не выбран лот!");
    return;

で、ここは?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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はここで何をするのでしょうか?
 

return() は、誰もどこにも送らない。

return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。return(expression); を使用すると、現在の関数が終了し、結果が送信されます。演算子式は括弧で囲まれ、代入演算 子を含んではならない。

 
Vinin:

return() は、誰もどこにも送らない。

return 演算子は、現在の関数を終了させ、呼び出し元のプログラムに制御を戻す。return(expression); を使用すると、現在の関数が終了し、結果が送信されます。演算子式は括弧で囲まれ、代入演算子を含んではならない。

あ、じゃあ、koの結果を明示的に代入する代わりに、returnで渡すんですね?わかった気がします、ありがとうございます。
 
では、条件を満たさない場合、EAの動作を停止させることは、どのようにすれば正しいのでしょうか?眠らせるのではなく、完全に止めるのです。
 
Abzasc:
では、条件を満たさない場合、EAの動作を停止させることは、どのようにすれば正しいのでしょうか?眠らせるのではなく、完全に止めるのです。

スリープさせる」とはどういう意味ですか、「停止する」とはどういう意味ですか。
 
Vinin:

put to sleep」の意味と「stop」の意味を教えてください。

スリープにする-スリープに すると、再び起動しようとします。

停止 - Expert Advisor が動作を停止するように、完全に停止します(その「顔」を変更します)。

例えば、Expert AdvisorはEurobucksの下にありますが、EuroJPYで投げていました。シンボルをチェックし、不一致の場合はアラートを投げ、手動で再起動する前にそれ以上動作させようとしない。

 
Abzasc:

スリープにする-スリープにすると、再び起動しようとします。

停止 - Expert Advisor が動作を停止するように、完全に停止します(その「顔」を変更します)。

例えば、Expert AdvisorはEurobucksの下にありますが、EuroJPYで投げていました。シンボルをチェックし、不一致の場合はアラートを投げ、手動で再起動する前に再度動作させようとしない。


なぜそんなに複雑なのか?

start() 関数で条件処理を行うだけで十分です。

int start(){
  if (Symbol()!="EURUSD") {
     Alert("Советник должен работать только на EURUSD");
     return(0);
  }
  // Далее обработка, принятие решений

}
この場合、EAを間違った機器に設定すると、自分でEAを無効にするまでアラートで溢れかえってしまいます。

サイレン音も追加すれば、確実に消せます