エラー、バグ、質問 - ページ 932

 
notused:

リモート エージェントは、スペースがないため、数ヶ月前から定期的に(週に2、3回)脱落しています。

または

で、エージェントログはクリーンか。

と、実はスペースに余裕があるのです。

重いもの(1~2年かけて10個のツールのマルチビューという意味)をテストするときに表示される。ある時点で、エージェントはメガファイルを作成したいようです(EAにはプリントやファイルを使った作業はありませんが)。全体として、本当に仕事がしづらくなってきました。

Counting: 1年間のtick履歴(M1モードで全tick)は、一時ファイル用に約3Gbのディスクスペースを必要とします(重いジョブが実行されている場合は、"... \testerAgent-0.0.0-xxxxxtemp" フォルダーを確認してください)。代理店数で掛け合わせる。17Gbはもう瀬戸際です(8エージェントあれば超えてますし)。

Expert Advisorの名前がおかしい。;)

PS.テスター(743)が無名制限で詰む...。

 

助けてください。なぜ取引が見つからないのですか(エラー4755)?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistoryDealSelect(trans.deal)) {
      long DealMagic;
      if (HistoryDealGetInteger(trans.deal, DEAL_MAGIC, DealMagic)) {
        //
      }
      else Print("HistoryDealGetInteger(" + (string)trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = ", GetLastError());
    }
    else Print("HistoryDealSelect(" + (string)trans.deal + ") = false! GetLastError() = ", GetLastError());
  }
}

端末の一覧です。

2013.02.07 10:31:52   instant sell 0.01 EURUSD at 1.35354 (1.35354 / 1.35364 / 1.35354)
2013.02.07 10:31:52   deal #1028 sell 0.01 EURUSD at 1.35354 done (based on order #1028)
2013.02.07 10:31:52   deal performed [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   order performed sell 0.01 at 1.35354 [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   HistoryDealGetInteger(1028, DEAL_MAGIC, DealMagic) = false! GetLastError() = 4755
 
Ashes:

計算してみてください。1年分のティック履歴(すべてのティックをM1にした場合)には、一時ファイル用に約3Gbのディスクスペースが必要です(重い仕事をするときは、"... \testerAgent-0.0.0-xxxxxtemp" フォルダーを見ましょう)。代理店数で掛け合わせる。17Gbはもう瀬戸際です(8エージェントあれば超えてますし)。

Expert Advisorの名前がおかしい。;)

ありがとうございます。16GBでは足りないかもしれないというのは、想像もつかなかった。エージェントを別のドライブに移す予定です。650GBで十分だと思います。

私もよく見かけました。特にパソコンが混雑しているときです。しかし最近、コンピュータに負荷をかけると、1回のテスト実行でターミナルが死んでしまいます(容量不足が原因ではありません - ターミナルは650GBの空き容量があるところに設置されています)。しかし、可能な限りすべてのプロセスを終了させると、すべてがうまくいくのです。
 
voix_kas:

助けてください。なぜ取引が見つからないのですか(エラー4755)?

ストラテジーテスターでテストされたコードの場合、HistoryDealSelectに問題がある可能性があります。

リンク


 
sion:

ストラテジーテスターでテストされたコードであれば、HistoryDealSelectに問題がある可能性があります。

ビュッ


HistorySelect()を使用したコンストラクションを使用すると、すべてうまく動作します。

OnTradeTransactionでは動作しない。このイベントは、おそらく取引に関する情報が何らかのデータベースに登録される前に発生します。ドキュメントに明示されているにもかかわらず。

TRADE_TRANSACTION_DEAL_ADD -取引を履歴に追加 する。注文の執行や口座残高の取引の結果として行われるものです。

 
voix_kas:

HistorySelect()を使用すると、すべて正常に動作します。

OnTradeTransaction が動作しない。おそらく、このイベントは、トランザクションに関する情報が何らかのデータベースに保存される前に発生します。ドキュメントに明示されているにもかかわらず。

TRADE_TRANSACTION_DEAL_ADD -取引を履歴に追加 する。注文の実行や口座残高の取引を行った結果として行われるものです。

ここでは、HistorySelect()で動作することを確認しましたが、HistoryDealSelectで同じリクエストを行うと既に失敗しています。この例では、データベースへの配置の速さは影響しませんでした。

では、ストラテジーテスターでは、チェックするのでしょうか?本番では、ほとんどの場合、問題なく使えるでしょう。

 
sion:

ここで テストしたところ、HistorySelect()ではうまくいきましたが、HistoryDealSelectでは同じリクエストがすでに失敗しています。この例では、データベースへの配置の速さは影響しませんでした。

では、ストラテジーテスターでは、チェックするのでしょうか?本番では、問題なく使えると思われます。

確認したところ、このコードにHistorySelect()をキャステレーションしたものは正常に動作するようです

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistorySelect(0, TimeTradeServer())) {
      for (int i = 0; i < HistoryDealsTotal(); i++) {
        ulong Ticket = HistoryDealGetTicket(i);
        if (trans.deal == HistoryDealGetInteger(Ticket, DEAL_ORDER)) {
          Print(HistoryDealGetInteger(Ticket, DEAL_MAGIC));
          break;
        }
      }
    }
    else Log("HistorySelect(0, TimeTradeServer() = false! GetLastError() = ", GetLastError());
  }
}

この明らかなバグがいつ修正されるかは未知数です。

 
はい、ストラテジーテスターで 確認しています。リアルタイムで問題ありません。
 
voix_kas:
はい、ストラテジーテスターで 確認しています。リアルタイムで問題なし。
ユンズ 便利かもしれない、おそらく何も変わっていない。
 
sion:
ヨンツ 便利かもしれませんね。おそらく、どちらも何も変わっていないでしょう。

とにかく、私のニーズに対する回避策を見つけました。OnTradeTransactionを使用しない場合。

HistoryDealGetTicket() 関数について、追加の質問があります。

ドキュメントには、トランザクションのチケット番号を返すと書かれています。しかし、例えば、返された値が">0 "であることを確認する必要があるのか、など、エラーが返されるケースは明示的に記述されていない。

HistoryOrderGetTicket() と同様です。しかし、後者の例では、返された値が正であるかどうかのチェックが含まれています。

フォーラムを検索すると、注文の場合と取引の場合の両方で戻り値を確認する人がいることがわかります。

例えば、HistoryDealTotal()-1より大きいオーダー番号のトランザクション要求があった場合、そのようなチェックが行われることがほとんどであろう。しかし、MQL5という言語のドキュメントがわかりやすいのは、開発者にとってありがたいことでした。