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

 
x572intraday:

結果

奇数の未確定数とは?ヘルプで検索・ググっても出てこない。EMPTY_VALUEの ようには見えませんね。

ある種のゴミのようなもの。

設定値

int Arr[1]={0};
 
Vitaly Muzichenko:

一部のゴミ

値を設定します。

練習用ではなく、純粋に理論的な好奇心からです。別の番号(9xxx - 正確には覚えていない)はもっとゴミのように見え、一度だけ出現してもう再現できなかったのに対し、上の番号は一定で時々繰り返されました。(皆さんもそうなのかな?)私はそんなことより、他のプログラマーが痛くつまずかないことが一番大事です。

 
x572intraday:

練習のためではなく、純粋に理論的な好奇心からです。別の番号(9xxx - 正確には覚えていない)はもっとゴミのようで、一度だけ現れてもう再現できない。一方、上の番号は一定で、時々繰り返される。(皆さんもそうなのかな?)私はそんなことより、他のプログラマーが痛快につまずかないことが一番大事です。

私は "0 "であり、何度も確認しました。

 
Vitaly Muzichenko:

0が出た、何度か確認した。

うーん...一つの状況が他とどのように関係しているのか分かりませんが、異なる通貨ペアでインジケータとして動作させたところ、数字の登り方が異なり(各楽器で同じ数字が各ティックで 繰り返されている)、ゼロもありました。不思議ですね。しかし、自分の番号で初期化しないと本当にゴミになるようです。

 
x572intraday:

うーん...一つの状況が他とどのように関係しているのか分かりませんが、異なる通貨ペアでインジケータとして動作させたところ、数字の登り方が異なり(各楽器で同じ数字が各ティックで 繰り返されている)、ゼロもありました。不思議ですね。しかし、自分の番号で初期化しないと、本当にゴミになるようです。

ティック単位でコードを挿入して再確認しました。

mt4では常に0です。

mt5では、0は非常にまれで、511026368となります。

 
x572intraday:

うーん...一つの状況が他とどのように関係しているのか分かりませんが、異なる通貨ペアでインジケータとして動作させたところ、数字の登り方が異なり(各楽器で同じ数字 各ティックで 繰り返されている)、ゼロもありました。不思議ですね。しかし、独自の番号で初期化しないと本当にゴミになるようです。

配列(および他のすべての変数)は、作成時にメモリが割り当てられます。配列が初期化されていない場合、過去に使用したものがそのまま残っている=ゴミになります。

プログラムから値を変更しなければ、このメモリには何も起こらず、ゴミはその値を維持したままです。

MT4では、すべての変数と配列は強制的にゼロで初期化されます。

 

CExpert.TradeEventOrderTriggered()が呼び出されていない。

BCS-DemoサーバーのFORTSマーケットを使用している場合、保留中の注文がトリガーされるとCExpert.TradeEventOrderTriggered()の呼び出しが不安定になる場合がありました。
MQL5標準 ライブラリのCExpert::CheckTradeState メソッドのコードでは、ポジション、注文、取引、履歴に関する情報の非同期受信の可能性が考慮されていません。

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

このコードをヒストリカルデータで実行すると、コンディションが正しく動作します。実データを扱う場合、ポジションの変化、取引、注文、履歴などの情報が同時に得られない場合や、情報を得る順番がランダムな場合がある。

bool CExpert::CheckTradeState(void) メソッドの呼び出しのログです。CheckTradeState() の1回の呼び出しは、2行の"CheckTradeState: ...... "対応 します。

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

ログを見るとわかりますが、
1.保留中の注文がトリガーされた場合、履歴の長さが取引、注文、ポジションの情報よりも遅れて更新されるため、コードの1番目の条件を満たせなくなるのです。
2.注文数、取引数、ポジション数の変化に関する情報を受け取る際に同期していない可能性があり、コード内の2番目の条件を満たすことが不可能になる(最初の問題を何とか回避して最初のifを実行できる場合)。おそらく、注文を2段階(1ロット+1ロット)に分けて執行した場合に非同期が発生したのだと思いますが、その場合、なぜ+2ではなく、+1の取引数なのでしょうか?

このコードに引っかかったんです。

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

ブロックのポイント:非同期モードで我々はプロシージャの終わりになっている場合、それは履歴がロードされていないときに可能である、我々は履歴をフェッチしますが、我々は注文数量の値などを記憶していない。

追伸:標準ライブラリのこの部分が未発達のようです。特に気になるのは、3回連続で書かれているコードの断片です。

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

この問題に気づいて、どこかで何かが修正されることを期待して、ここに書かせていただきます。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
マーケットにあるEX5 EAファイルのサイズを見てみました。私が見たものはすべて200Kb以下です。なぜ、このような小さなサイズを実現できるのでしょうか?簡単なコード?
 
fxsaber:
マーケットにあるEX5 Expert Advisorのファイルサイズを調べてみました。いずれも200KB以下です。なぜ、このような小型化を実現できるのでしょうか?簡単なコード?

作者は天才だと思います。トップセラーの9割はプラットフォームについて全く疑問を持たず、自然な直感でコードを書いているのですから ))))


ここで質問です。

データを突っ込んでいます。

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

エラーが発生するのですが。

リソースファイル 'CommonFilesEURUSD_tick.bin' not found

EAというフォルダやFilesというフォルダにファイルを置くとすべてOKになります。


では、Commonフォルダーからリソースをマウントすることはできないのでしょうか?-それとも他のパスを指定する必要がありますか?

 
Igor Makanu:

作者は天才だと思います。トップセラーの9割はプラットフォームについて全く疑問を持たず、生来の知識でコードを書いているわけですから ))))

その他のアカウントに関するご質問はこちら

Commonフォルダからリソースに接続できない?-それとも、別の方法で処方する必要がありますか?

わからない。