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

 

こんにちは。

オープンポジションが「フリーズ」しているかどうかを判断すべき関数が正しいかどうか確認してください。

特に、Ask/Bidはやりすぎだったのでは?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

いいえ、サーバー(MQ デモアカウント)ではすべて正常に動作していました。つまり、接続していない時にストップがかかってしまったのです。しかし、私が接続した時には、すでに市場は終了していました。Market Watchの ウィンドウには、接続が切れる前の最後のティックの時刻が記録されています。2番目の値としてTimeCurrent()を指定してトレードの履歴を 要求したところ、全履歴が取得できませんでした。TimeCurrent()のHelpにはこう書いてありますが。

つまり、この関数は、接続が切断され、市場がすでに終了しているときに接続が起こったとしても、サーバーからMarket Watch ウィンドウのいずれかの商品の価格の最後の到着の値を返すべきであると理解しています。私の場合はそうもいかず、すべての履歴を取得することができませんでした。Market Watchは、マーケットが閉じているときにサーバーと時刻を同期させるべきかどうか、ヘルプに記載がないのでわかりません。

その場合、全履歴が必要な場合は、前日の番号を追加するだけで、すべての案件が選択されることが保証されます。:)

テスターでは、HistoryDealsTotal()関数にバグがあり、Visualizationモードで表示されます。そこでは、時間が正しくモデリングされています。ただ、松葉杖が役立つケースもあります。


ええ、通信が途絶えたという要点は覚えています。ある商品のティック受信時のみ端末が追加履歴の確認とダウンロードを開始し、週末にはティックがないようです。もちろん、手動でチャートを更新すれば、最後のサーバー時刻が更新されます。また、自動モードであれば、接続の切れを修正し、週末に復旧すれば、履歴の確認とダウンロードを行う機能、CheckLoadHistory()を起動する必要があります。タイマーを使用する

一般的に、端末には「すごい」ことが起こることがあります。こちらは昨日、ノートパソコンが電話を介してモデムとして動作していました。Multicurrency Expert Advisorがトラッキングモードで動作していた(自動売買は無効)。電話機を持って15分ほど外出し、戻ってきてから再接続しました。ターミナルがサーバーとの接続を復元しました。見逃した名言も簡単にダウンロードできるようでした。しかし、端末は猛然と履歴のダウンロードを開始した。市場概要、取引タブ、チャート、すべてがフリーズしました。この機種は3Gに対応しておらず、EDGEで動作するため、手続きが遅れました。20MBになったとき、この状態で何か手動で取引できないか確認することにした。ポジションを閉じようとしたら、接続がないため拒否され、そこでダウンロードが止まってしまいました。再接続後はすべてうまくいきました。以下は、端末のログからの抜粋です。

OK 0 ネットワーク 09:45:09 '709704':authorized on MetaQuotes-Demo via Access Point Singapore
IR 0 Network 09:45:09 '709704': 77から行われた前回の認証に成功しました。35.11.181 on 2012.03.04 06:10:12
KP 0 ネットワーク 09:45:12 '709704': MetaQuotes Software Corp.とターミナルが同期されました。
GI 0 専門家 09:45:12 expert Fractals_ (EURUSD,H1) loaded successfully
OI 0 Trades 10:43:29 '709704' : deal #8671794 sell 0.10 GBPJPYを129に。268回実施(注文番号9494984に基づく)// この取引は、別のコンピュータで動作するExpert Advisorによって実行されました
RM 0 取引 10:51:22 '709704' : 取引番号8671842売り0.10 USDJPYを81に。586回実施(注文番号9495037に基づく)// 同様に
KL 1 ネットワーク 12:00:38 '709704':MetaQuotes-Demoへの接続が失われる// Gone
IE 0 ネットワーク 12:16:15 '709704':アクセスポイント香港経由でMetaQuotes-Demoで認証されました。// Came
IS 0 Network 12:16:15 '709704': 80から前回成功した認証が実行されました。83.239.67 on 2012.03.04 23:45:03
OS 0 Network 12:16:18 '709704': MetaQuotes Software Corp.とターミナルが同期されました。// 通信復旧
IQ 0 トレード 12:18:12 '709704' : 取引 #8672388 売り 0.10 GBPCHFを1.44540円済(注文番号9495596に基づく)// この取引は、別のコンピュータで動作するExpert Advisorによって実行されました
DF 0 取引 12:35:37 '709704' : 瞬間買い 0.10 EURGBPを0に。83422// 手動でポジションを閉じようとしたのですが、その前に履歴がダウンロードされていました
IN 2 Trades 12:35:44 '709704' : インスタントバイ0に失敗しました。10 EURGBPを0に。83422 [ネットワーク接続ができないため、リクエストを拒否] // 拒否
JP 1 ネットワーク 12:35:44 '709704': MetaQuotes-Demoへの接続が失われました
EI 0 Network 12:36:00 '709704': アクセスポイント香港経由MetaQuotes-Demoで認可
IG 0 Network 12:36:00 '709704': 80から行われた前回の認可が成功しました。83.239.67、2012.03.05 02:16:12
PG 0 ネットワーク 12:36:08 '709704': MetaQuotes Software Corp.と端末が同期されました。// 通信が復旧し、さらに正常な動作が可能
MS

 
ログを見ると、中断前は1つのサーバーで動作していた端末が、中断後は別のサーバーに接続し、履歴のダウンロードを開始したことがわかります。異なるサーバー間の履歴が同期されていないと判断できる。
 
Valmars:

そう、通信が途絶えたという要点を思い出した。端末が、商品のティックを受信したときのみ、リコンサイルと履歴のダウンロードを 開始し、週末にはティックがないようです。もちろん、手動でチャートを更新すれば、最後のサーバー時刻が更新されます。また、自動モードを使いたい場合は、接続の切れを直して、週末に復旧したら、チェックを開始し、履歴をダウンロードする、CheckLoadHistory()関数を使用する必要があります。 タイマーを使う。

...

たしかに、ティックが入ると時間の更新があるように見えますが、履歴はすでにあり、視覚的に確認することができました。解決策の選択肢をありがとうございました。週末までにもう一度同じような状況を再現して、解決策の選択肢を試してみます。
 

AlpariFS-MT5 サーバーに接続し、Expert Advisorを様々な条件でテストして います。執行タイプは当初、EXECUTION_MARKET-市場による注文の執行 でした。トレーディングパネルを使って、ポジションのオープン/クローズに成功しました。そして、チャートのコンテキストメニューにDepth of Marketが あることを発見したのです。開いてみると、Buy/Sell アクションが可能であることがわかった。試しに、Depth of Marketでポジションを買い、そこで決済してみました。その後、アカウントの実行タイプがEXECUTION_EXCHANGEに 変更されました。MQL5では この点が明確になり、Order ウィンドウのドロップダウン・リスト(F9)には、Exchange executionと Pending orderの 2つのオプションしかありません。再度ログインを試みたり、端末を再読み込みしても解決しませんでした。そして、デモ口座の実行タイプは、まだEXECUTION_EXCHANGE のままです。

アルパリサポートに連絡し、問題を説明し、明らかにしました。

//---

Anatoly|17:55
現時点でMT 5のデモ口座では、EXECUTION_MARKETの オプションがあるべきという理解でよいでしょうか?

セルゲイ|17:56
はい、正解です。

//---

バグのようです。

 

ヘルプに記載されていない識別子もあります。

ORDER_FILLING_FOKORDER_FILLING_IOCORDER_FILLING_RETURNは あるが、ORDER_FILLING_AONと ORDER_FILLING_CANCELは ない、ただし、いずれも説明付きの同じリストへ誘導される。

 
tol64:ORDER_FILLING_AONと ORDER_FILLING_CANCELは、同じリストが説明付きで表示されますが、そうではありません。
すでに廃止されているので、インデックスからも削除する予定です。
 
Rosh:
すでに廃止されているので、インデックスからも削除する予定です。

ありがとうございます。

//---

こんな疑問が湧いてきました。コンテストサーバーは、コンテストと同じ制限(Volume Limit 15 lot/Volume Max 5 lot)でテストができるようになったのでしょうか?旧アカウントで接続を試みたが、サーバーに接続されない。Metatrader 5が 取引できる全てのサーバーで検索しましたが、VolumeLimitは どこにもありませんでしたので、テストする必要があります。それとも、コンテスト値を使った例で、答え合わせをすればいいのでしょうか。

私はオープンポジションを持っており、その数量は14ロット です。2 ロットの数量で保留注文を出そうとすると、リクエストが拒否されるのでは?または、同じサイズの注文が出されますが、ポジションが同じサイズ(14ロット)のままであれば、1ロットなど 部分的に約定されます。

その逆も然り。14ロットの 保留注文が設定 されています。2ロットで ポジションを開設しようとすると、リクエストが拒否されるのでは?

 

ケトルの沈黙があるから、ここで運試しをするんだ...。

明確にしてください。https://www.mql5.com/ru/forum/3775/page113#comment_160125。 また、必要な計算をソフトウェアで行うことにも興味があります。

 

こんにちは。

内蔵のiADXインジケーターの 値にアクセスするには?つまり、ある一定時間前の値まで ?mql4では、シフトパラメータを設定することで行います。

もう、ありがとうございます。

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5
理由: