ライブラリ: MT4Orders - ページ 34

 

私はこのような興味深い特異性に気づいた


私はmt4用の統計インジケーター(無料)を持っている。

私はmt5用のものを作ることにしました。

ライブラリは間に合いました!(自分でそのようなライブラリを書くのはあまりにも怠惰です)。


その前にMT5用のバージョンを作っていたのですが、それなりに不具合がありました。


MQL5のコードをすべて削除し、MT4Ordersライブラリを接続したところ、起動時にナンセンスが表示されるようになりました。


同時に、履歴はすべて正常です:


また、OrderPrintは(履歴と同様に)すべてを正しく表示します。


私はチケット番号で取引を選択しています(複雑で分かりにくいシステムで、私自身いつも混乱してしまい、しばらくすると仕組みを忘れてしまいます :-))。)

これがコードの一部です:

      if(SearchNextTicket(firsttimeticket,ticketREPORT,i,HistoryarrayNumber)==2)
        {
         firsttimeticket=MT45_OrderCloseTime();
        }
      ticketREPORT=MT45_OrderTicket();


ポイントは、(統計のために)次のチケットは終了時間でソートして選択され、時間が同じならチケット番号で選択されるということです。

この場合、無意味な表示になってしまいます。


しかし、無害なprint文字列を追加すると、すべてが動作します:

 Print("1=== i="+i+" firsttimeticket="+firsttimeticket+" ticketREPORT="+ticketREPORT+" HistoryarrayNumber="+HistoryarrayNumber);
      if(SearchNextTicket(firsttimeticket,ticketREPORT,i,HistoryarrayNumber)==2)
        {
         firsttimeticket=MT45_OrderCloseTime();
        }
      ticketREPORT=MT45_OrderTicket();

という無害な文字列を追加すると、すべてがうまくいく。



プリントのマジックは何ですか?


この印刷はうまくいきます:

       Print("1=== i="+i);


このようなプリントはもう正常に動作しません。

       Print("1=== i=");
 

わかった。

int i; // 動作しない

int i=0; // すべてうまくいく

 
Vladislav Andruschenko:

面白いことに気づいた

この機能を再現する短いソースを書く。そうすれば、推測せずに行動できるようになる。


チケットによる選択

#include <MT4Orders.mqh>

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  const int Size = ArrayResize(Tickets, OrdersHistoryTotal());
  
  for (int i = 0; i < Size; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket(); // チケットの暗記
      
  for (int i = 0; i < Size; i++)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET)) // チケットで選ぶ
      OrderPrint();
}
 
fxsaber:

この機能をプレーするための短いソースを書いてください。そうすれば、推測せずに行動することが可能になる。


チケットの選択


おそらく変数の初期 化が原因だろう(私にとっては)。

さらに解析する。

 
Andrey Khatimlianskii:

私たちの通信で掘り起こした:

このタスクでは

注文を設定するレベルは価格履歴に基づいて計算されますが、ティックの動きの性質に基づいて調整されます。注文がトリガーされ、取引が終了した後、EAは同じ価格レベルに基づいて注文を出すべきではありません(ただし、その時点で異なる値で調整することができます)。私はこの情報(注文が関連するレベル)をチケットにバインドされたメイン変数に格納します。もちろん、コメントに書くこともできますが、必ずしも便利で信頼できるとは限りません。

OrderTicketOpen にバインドするのが論理的です。それから、TicketOpen-transactionのためにSELECT_BY_TICKETを作る必要があります。そして、TicketOpenオーダーにSELECT_BY_TICKETを追加します。

TicketOpenの両方のバリアントに対して複数のENTRY_OUT-dealsが存在し得るが、選択されるべきは1つだけであることは明らかである。しかし、このような会計業務では、このような曖昧さは障害にはなりません。

良いご指摘をありがとうございます。そのような配置は考えていませんでした。

 

mt5 のレポートでは、mt4 のレポートとはすべて数え方が違うのが興味深い。


mt4 では、ソートは取引終了時刻で行われ、取引終了時刻が同じ場合はチケットでカウントされます。


mt5では、レポートのソートは取引開始時刻で 行われます。

不便ですね。



それとも mt5 ではチケット番号(取引開始時間)順ですか?

 
Vladislav Andruschenko:

mt5のレポートでは、すべてがmt4のレポートとは異なる方法でカウントされるのが興味深い。

mt4 では、ソートは終了時刻で行わ れ、取引の終了時刻が同じであればチケットでカウントされる。

開始 時間で行われます。

不便だ。

そして、そうではありません。

それともチケット番号(開始時間)順ですか?

MT5では終値でソートしています - MT5自身が履歴に記録を残す方法です。

 
fxsaber:

そんなことはない

そうではありません。

MT5 は終了時間でソートする - MT5 自体が履歴にレコードを入れる方法だ。


私はmt4からダウンロードしたレポートを使っています。

統計インジケーターを作っていたとき、私の数値はmt4からのレポートと一致しませんでした。

すべての数字を同じにするには、すべてのポジションを終値でソートする必要があることが経験的にわかりました(終値が同じ場合は、これらのポジションを取引でソートします)。

この原則によれば、私のレポートとmt4のレポートの統計の数字はすべて同じです。

mt5の場合、私の計算では何も変更せず、あなたのライブラリを適用しただけです。そして、レポートをアップロードするときに、mt5では始値でソートしていることがわかりました。

SELECT_BY_TICKETはなぜか正しく機能しません。

 
Vladislav Andruschenko:


mt4からダウンロードしたレポートを見ている。

統計インジケータを作成したところ、私の数値はmt4からのレポートと一致しませんでした。

すべての数字を同じにするためには、すべてのポジションを終値でソートする必要があることが経験的にわかりました(終値が同じ場合は、これらのポジションを取引でソートします)。

この原則に従えば、私のレポートの統計とmt4のレポートの数値はすべて同じになります。

mt5の場合、私の計算では何も変更せず、あなたのライブラリを適用しただけです。そして、レポートをアップロードする際に、mt5でのソートが開始時間でソートされることがわかりました。

SELECT_BY_TICKETはなぜか正しく機能しません。

mt4では完璧に動作するものが、mt5では完璧に動作しません。

 
Vladislav Andruschenko:


mt4からダウンロードしたレポートを見ている。

統計インジケータを作成したところ、私の数値はmt4からのレポートと一致しませんでした。

すべての数字を同じにするためには、すべてのポジションを終値でソートする必要があることが経験的にわかりました(終値が同じ場合は、これらのポジションを取引でソートします)。

この原則に従えば、私のレポートの統計とmt4のレポートの数値はすべて同じになります。

mt5の場合、私の計算では何も変更せず、あなたのライブラリを適用しただけです。そして、レポートをアップロードする際に、mt5では始値でソートしていることがわかりました。

実行する

取引、自動取引システム、取引戦略のテストに関するフォーラム。

ライブラリ:レポート

fxsaber, 2018.12.11 12:28 pm.

レポートがどのように見えるかをすぐに理解するには、以下のスクリプトを自分の口座で実行すれば十分です。

#define  REPORT_BROWSER      // ブラウザ起動時にレポートを作成 - DLL許可が必要です。
#include <Report.mqh> //https://www.mql5.com/ja/code/18801

void OnStart()
{
  REPORT::ToFile(); // ブラウザでレポートを作成し、開く。
}

SELECT_BY_TICKETがなぜか正しく動作しません。

取引、自動取引システム、取引戦略のテストに関するフォーラム。

ライブラリ: MT4Orders

fxsaber, 2019.03.11 21:40

チケット選択が機能する

#include <MT4Orders.mqh>

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  const int Size = ArrayResize(Tickets, OrdersHistoryTotal());
  
  for (int i = 0; i < Size; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket(); // チケットの暗記
      
  for (int i = 0; i < Size; i++)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET)) // チケットで選ぶ
      OrderPrint();
}