どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 412

 
Ekburg:

げっ...私は確かにあなたが問題を解決するために始めたことを嬉しく思いますが、私は同じことを言った私のメッセージ、少し異なる単語、そしてすぐにあなたがそれを持っている場所を見なかった、ファイルを閉じることを除いて、欠点を言った、気づいていない:)。

3点の回答を書きましたね。3点目は、カーソルをエントリーの前ではなく、エントリーの後に移動させることを提案したように聞こえました(これも間違いと受け取られたようです)。そのような絵を前にして、私は、対応してくれた経験豊富なモデレーターからの説明を優先しました。

それにもかかわらず、ご意見をいただき、本当にありがとうございます。そして、良いお年をお迎えください。:)

 

こんにちは。不愉快な状況に直面する。助けてください。

Expert Advisorを持っています。ストラテジーテスターでは問題なく動作しているので、クレームはないです。デモで実行すると、Expert Advisorが特定の注文にストップをかけることができない。常にではありませんが、時々現れるエラーがあります。自力で探すのに必死なので、お力をお貸しいただければと思います。EAはテスターと同じように、ストップが常に設定されていないことを除けば、他のすべての面で完璧に動作することに留意すべきです。アカウントごとに異なるブローカーでエラーが表示される。以下は、トレードオペレーションを担当するコードの部分です。

ord_ticket=OrderSend(ASymb,ord_type,ord_lots,ord_openpr,20,0,0,"",ord_magic);
if(ord_ticket>0) {
  //---- обновление инфы
  OrderSelect(ord_ticket,SELECT_BY_TICKET);
  ord_openpr=OrderOpenPrice();
  ZigZagInfo[0][ZZ_TimeP]=t_cur;
  ZigZagInfo[k][ZZ_TryCount]++;
  //---- проверка стопов
  if(ND(a*(ord_tp-ord_openpr)-stops,Digits)<0) ord_tp=ND(ord_openpr+a*stops,Digits); 
  if(ND(a*(ord_openpr-ord_sl)-stops,Digits)<0) ord_sl=ND(ord_openpr-a*stops,Digits);
  //---- время удаления
  if(TimeDelete>0) td=TimeCurrent()+60*TimeDelete;
  else td=0;
  //----
  if(!OrderModify(ord_ticket,ord_openpr,ord_sl,ord_tp,td)) {
    Alert(Error(GetLastError()),"/nSL=",DoubleToStr(ord_sl,5)," TP=",DoubleToStr(ord_tp,5),"/nTimeDel=",TimeToStr(td),
          "OP=",DoubleToStr(ord_openpr,5));
  }
}

以下は、Error(int er)関数のコードです。

string Error(int er) {
  switch(er) {
    case 0:   return("Нет ошибки");
    case 1:   return("Нет ошибки, но результат неизвестен");
    case 2:   return("Общая ошибка(сбой системы, глюк, и т.п.)");
    case 3:   return("Неправильные параметры");
    case 4:   return("Торговый сервер занят");
    case 6:   return("Нет связи с торговым сервером");
    case 7:   return("Недостаточно прав");
    case 8:   return("Слишком частые запросы");
    case 9:   return("Недопустимая операция нарушающая функционирование сервера");
    case 128: return("Истек срок ожидания совершения сделки");
    case 129: return("Неправильная цена");
    case 130: return("Неправильные стопы");
    case 131: return("Неправильный объем");
    case 133: return("Торговля запрещена");
    case 134: return("Недостаточно денег для совершения операции");
    case 135: return("Цена изменилась");
    case 137: return("Брокер занят");
    case 138: return("Новые цены");
    case 139: return("Ордер заблокирован и уже обрабатывается");
    case 140: return("Разрешена только покупка");
    case 141: return("Слишком много запросов");
    case 145: return("Модификация запрещена, так как ордер слишком близок к рынку");
    case 146: return("Подсистема торговли занята");
    case 147: return("Использование даты истечения ордера запрещено брокером");
    case 148: return("Количество открытых и отложенных ордеров достигло предела, установленного брокером");
    case 149: return("Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.");
    default:  return("Неизвестная ошибка "+DoubleToStr(er,0));
  }
}

そのため、EAがストップの設定に失敗すると、エラーに関する情報と、変更しようとした注文のパラメータを示すメッセージが表示されます。何を書いているのかが、私にとっての本当の謎なのです。下の写真からわかるように、常に音量がおかしいと書き込まれます。これは不思議なことです。注文パラメーターはすべて修正前に正しく計算され、メッセージで確認することができます。そうでなければ、エラーは違うものになります。デモのものより高いスプレッドでテストされました。

エニグマ今ひとつ

 
_Vladimir_:

こんにちは。不愉快な状況に直面する。助けてください。

Expert Advisorを持っています。ストラテジーテスターでは問題なく動作しているので、クレームはないです。しかし、デモで実行すると、EAが特定の注文にストップを置くことができないことがわかります。常にではありませんが、時々現れるエラーがあります。自力で探すのに必死なので、お力をお貸しいただければと思います。EAはテスターと同じように、ストップが常に設定されていないことを除けば、他のすべての面で完璧に動作することに留意すべきです。アカウントごとに異なるブローカーでエラーが表示される。以下は、トレードオペレーションを担当するコードの部分です。

以下は、Error(int er)関数のコードです。

そのため、EAがストップの設定に失敗すると、エラーに関する情報と、変更しようとした注文のパラメータを示すメッセージが表示されます。何を書いているのかが、私にとっての本当の謎なのです。下の写真からわかるように、常に音量がおかしいと書き込まれます。これは不思議なことです。注文パラメーターはすべて修正前に正しく計算され、メッセージで確認することができます。そうでなければ、エラーは違うものになります。デモのものより高いスプレッドでテストされました。

グローバル変数の値には注意が必要です。ord_ticketはグローバル変数なので、前の値を格納することができると推測できます。また、GetLastError()を呼び出してエラーを捕捉する前に、コードの先頭で呼び出して前回の値をリセットしておく必要があります。
 
TarasBY:
グローバル変数の値には十分注意する必要があります。ord_ticketはグローバル変数なので、前の値を保存している可能性がありますね。また、GetLastError()を呼び出してエラーをキャッチする前に、コードの先頭で呼び出して前の値をリセットしておく必要があります。 。

ord_ticketはローカルレベルで宣言されています。そして、1行目でグローバルに宣言されていても

ord_ticket=OrderSend(ASymb,ord_type,ord_lots,ord_openpr,20,0,0,"",ord_magic);
if(ord_ticket>0) {

その価値は確実に変化します。取引に成功した場合は注文番号、そうでない場合は-1が格納されます。つまり、注文が開かれなければ、ストップを設定するブロックにたどり着かないのです。

また、OrderSend() 関数は常に前回のエラーの値を 変更するので(ドキュメントとロジックによると)、この場合、前回の読み取り値をリセットする必要はなく、単純な時間の無駄になることに注意する必要があります。すなわち、エラー131は、停止設定ブロックに入った後、エラーメッセージが表示される前に表示される。ストップが実際に置かれているわけではないので、OrderModify()関数は最後に呼ばれる関数でなければならず、前の関数と同様に、常に最後のエラーの値を変更することになるのです。しかし、なぜ最後のエラーの値を変更しないのかが理解できません。それはどこから来るのでしょうか?もう一度言いますが、テスターでは何の問題もありませんでした。

サーバーから端末にエラー番号が送られ、端末がExpert Advisorにエラー番号を送るので、ブローカーが不正をしているのではと思ったのです。あるEAの注文だけがエラーになり、並行して動作している他のEAではそのようなエラーは発生しないので、このアイデアは断念しました。

 
_Vladimir_:

ord_ticketはローカルレベルで宣言されています。そして、1行目でグローバルに宣言されていても

の値は確実に変化します。取引に成功した場合は注文番号、そうでない場合は-1が格納されます。つまり、注文が開かれなければ、ストップを設定するブロックにたどり着かないのです。

また、OrderSend() 関数は常に前回のエラーの値を変更するので(ドキュメントとロジックによると)、この場合、前回の読み取り値をリセットする必要はなく、単純な時間の 無駄になることに注意する必要があります。すなわち、エラー131は、停止設定ブロックに入った後、エラーメッセージが表示される前に表示される。ストップが実際に置かれているわけではないので、OrderModify()関数は最後に呼ばれる関数でなければならず、前の関数と同様に、常に最後のエラーの値を変更することになるのです。しかし、なぜ最後のエラーの値を変更しないのかが理解できません。それはどこから来るのでしょうか?もう一度言いますが、テスターでは何の問題もありませんでした。

サーバーから端末にエラー番号が送られ、端末がExpert Advisorにエラー番号を送るので、ブローカーが不正をしているのではと思ったのです。あるEAの注文だけがエラーになり、並行して動いている他のEAにはそのようなエラーはないため、このアイデアはすぐに断念しました。


追加します。並行して動作するEAのコードは全く同じで、ストップを設定する役割を担っています。このEAでは、注文に対してストップが設定されないという事態は一度も発生していません。

上記のどこかでパラメータの計算に誤りがあるようですが、1つのパラメータだけが間違っていても、別のエラーが表示されるはずです。例えば、よく知られている130

 
_Vladimir_:

ord_ticketはローカルレベルで宣言されています。そして、1行目でグローバルに宣言されていても

の値は確実に変化します。取引に成功した場合は注文番号、そうでない場合は-1が格納されます。つまり、注文が開かれなければ、ストップを設定するブロックにたどり着かないのです。

また、OrderSend() 関数は常に前回のエラーの値を変更するので(ドキュメントとロジックによると)、この場合、前回の読み取り値をリセットする必要はなく、単純な時間の 無駄になることに注意する必要があります。すなわち、エラー131は、停止設定ブロックに入った後、エラーメッセージが表示される前に表示される。ストップが実際に置かれているわけではないので、OrderModify()関数は最後に呼ばれる関数でなければならず、前の関数と同様に、常に最後のエラーの値を変更することになるのです。しかし、なぜ最後のエラーの値を変更しないのかが理解できません。それはどこから来るのでしょうか?もう一度言いますが、テスターでは何の問題もありませんでした。

サーバーから端末にエラー番号が送られ、端末がExpert Advisorにエラー番号を送るので、ブローカーが不正をしているのではと思ったのです。あるEAの注文だけがエラーになり、並行して動いている他のEAにはそのようなエラーはないため、このアイデアはすぐに断念しました。

思考はレースだ!しかし、経験上、私たちが思っていること(あるべき姿)と、実際にそこにあるものは、異なることが非常に多いのです。アドバイスできること。「コード実行の全シーケンスをプレプリントする」、これがエラーを見つける(あるいは自分が正しいことを確認する)最も手っ取り早い方法なのです。:)
 
yan720:

3段落の回答が書いてありましたね。3点目は、カーソルをエントリーの前ではなく、エントリーの後に移動させることを提案したように聞こえました(これも間違いと受け取られたようです)。そのような絵を前にして、私は、答えているマルチな司会者に説明をすることを好んだ。

それにしても、本当にご回答ありがとうございました。そして、新年明けましておめでとうございます。:)



D OK、今年もよろしくお願いします :)
 
411ページに書かれていることに戻ると.このコードと2つのMAをクロスさせるためのエントリー/エクジット条件を組み合わせる方法をご存知の方はいらっしゃいますか? それとも、保留中の注文だけが 選択肢なのでしょうか?
 
petya33r:
411ページに書かれていることに戻ると.このコードと2つのMAをクロスさせるためのエントリー/イグジット条件を組み合わせる方法をご存知の方はいらっしゃいますか? それとも、保留中の注文だけが選択肢なのでしょうか?

ムービング信号で取引を開始した後、注文の数を 監視するために開始または第二のオプションとして減少する注文の数は、具体的には、この順序を閉じている場合は、それが閉じていた方法を見つける、もし停止、現在の価格でちょうど反対の順序を開き、それがすべてです。
 
Ekburg:

移動信号の取引を開始した後、注文数を減らすために、または第二のオプションとして具体的にこの順序を閉じている場合は、それが閉じている方法を見つけると、監視するために、停止した場合、ちょうど現在の価格で反対の順序を開き、それがすべてです。

それはわかるのですが、書ききれません。Expert Advisorは、muwings シグナルのみで取引し、損失が発生した場合にリバースポジションを開かないか、テスト開始時に単にターミナルをクラッシュさせるかのどちらかです。そこで、全く加工できないものを書いてみました。私は文章を書くのが苦手です。コードを書くという形で助けてほしい。

//нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  for ( trade = OrdersHistoryTotal() - 1; trade >= 0; trade-- ) 
  {
     if ( OrderSelect(trade, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         old_order_type = OrderType();
         if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                break; //прекращаем поиск
         }
     }
  }
  //если раньше покупали, то теперь продаем
  if ( old_order_type == OP_BUY )
  {
      ticket = OrderSend(Symbol(), OP_SELL, Lot,  NormalizeDouble(Bid, Digits), slip, NormalizeDouble(Ask+stoploss*Point, Digits), NormalizeDouble(Ask-takeprofit*Point, Digits), "Martingale-Sell", MagicNumber, 0, Red);
      Sleep (2000); //задержка в 2 секунды для обработки запроса торговым сервером брокера
      return (0);  
  }

OrderProfit()<0であれば、反対方向の 注文を出します。ただし、動く補助具の信号とは連動しない。ミューウィングスのシグナルと反対ポジションを建てる条件の両方を一つのコードで書くことは可能ですか?