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

 

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

ライブラリ: MT4Orders

fxsaber, 2018.04.14 09:10 AM

#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnInit()
{
  long Ticket;
  
  PRINT((Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Bid - 100 * _Point, Bid + 100 * _Point, "Hello World!", 12345)));
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    PRINT(OrderClose(OrderTicket(), 0.3, OrderClosePrice(), 0));
}

void OnDeinit( const int )
{
  const int Total = OrdersHistoryTotal();
  
  for (int i = 1; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      OrderPrint();
      
      PRINT(OrderTicket());
      PRINT(OrderMagicNumber());
      PRINT(OrderComment());
      PRINT(OrderTicketOpen());
    }
}


結果

2018.03.25 00:00:00   instant buy 1.00 EURUSD at 1.23527 sl: 1.23414 tp: 1.23614 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #2  buy 1.00 EURUSD at 1.23527 done (based on order #2)
2018.03.25 00:00:00   deal performed [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   order performed buy 1.00 at 1.23527 [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   (Ticket=OrderSend(_Symbol,OP_BUY,1,Ask,0,Bid-100*_Point,Bid+100*_Point,Hello World!,12345)) = 2
2018.03.25 00:00:00   instant sell 0.30 EURUSD at 1.23514, close #2 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #3  sell 0.30 EURUSD at 1.23514 done (based on order #3)
2018.03.25 00:00:00   deal performed [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   order performed sell 0.30 at 1.23514 [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   OrderClose(OrderTicket(),0.3,OrderClosePrice(),0) = true
2018.03.26 01:04:40   take profit triggered #2  buy 0.70 EURUSD 1.23527 sl: 1.23414 tp: 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   deal #4  sell 0.70 EURUSD at 1.23614 done (based on order #4)
2018.03.26 01:04:40   deal performed [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   order performed sell 0.70 at 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
final balance 10000046.11 EUR
2018.03.26 23:59:59   #3 2018.03.25 00:00:00 buy 0.30 EURUSD 1.23527 1.23414 1.23614 2018.03.25 00:00:00 1.23514 0.00 0.00 -3.16 Hello World! 12345
2018.03.26 23:59:59   OrderTicket() = 3
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = Hello World!
2018.03.26 23:59:59   OrderTicketOpen() = 2
2018.03.26 23:59:59   #4 2018.03.25 00:00:00 buy 0.70 EURUSD 1.23527 0.00000 1.23614 2018.03.26 01:04:40 1.23614 0.00 0.00 49.27 tp 1.23614 12345
2018.03.26 23:59:59   OrderTicket() = 4
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = tp 1.23614
2018.03.26 23:59:59   OrderTicketOpen() = 2

例では、TP/SLがトリガーされると、元のコメント「Hello World!」がMT5のコメント「tp 1.23614」に完全に置き換えられていることがわかります。

MT4では、このような状況では、コメントは「Hello World! tp 1.23614」となります。MT4Ordersでも同じようにすべきでしょうか?

つまり、SL/TP/MOクローズの場合、履歴の注文コメントは、MT4と同じように、始値と終値のコメントの組み合わせにするのが正しい/便利ですか?

 
fxsaber:

この例では、TP/SLがトリガーされると、元の "Hello World!"のコメント全体が、MT5の対応する "tp 1.23614 "に置き換えられていることがわかる。

MT4では、このような状況では、コメントは「Hello World! tp 1.23614」となります。MT4Ordersでも同じようにする必要がありますか?

つまり、SL/TP/MOのクローズでは、履歴の注文コメントは、MT4と同じように、オープンとクローズのコメントの組み合わせにするのが正しい/便利ですか?

次のようなものを提案します:

Original_Comment[tp:1.23614](コメントを解析する必要がある場合があるため)

コメントの長さが制限を超えた場合の異常な状況のログを含む

 
fxsaber:

この例では、TP/SLがトリガーされると、元の "Hello World!"のコメント全体が、MT5の対応する "tp 1.23614 "に置き換えられていることがわかる。

MT4では、このような状況では、コメントは「Hello World! tp 1.23614」となります。MT4Ordersでも同じようにする必要がありますか?

つまり、SL/TP/MOクローズの場合、履歴の注文コメントは、MT4と同じように、始値と終値のコメントの組み合わせにするのが正しい/便利ですか?

OrderCommentは、OrderCommissionと同様にライブラリにあり、現在非常に遅いです(複数回呼び出すと顕著です)。MT5の仕様(このデータを2つの取引に分割する)のせいであることは明らかです。

OrderCommentOpenを追加すればいいのでは?あるいは、MT4の動作をエミュレートするために、OrderCommentOpen、OrderCommentClose、OrderCommentという完全にユニバーサルなバリアントを作ることもできます。

重たいOrderCommissionとOrderCommentのためのキャッシュ、または私自身の取引リストのためのキャッシュについてまだ考えています。

 
Andrey Khatimlianskii:

OrderCommissionと同様に、OrderCommentも現在ライブラリでは非常に遅い(複数回呼び出すと顕著)。MT5の仕様(このデータを2つの取引に分割する)のためであることは明らかです。

リアルタイムには影響しないはずです。

OrderCommentOpenを追加するだけでよいのでは?あるいは、OrderCommentOpen、OrderCommentClose、OrderComment という、MT4 の動作をエミュレートしようとするユニバーサルなバリアントを作る。

追加する価値があるかもしれません。今のところ、このようにできます(過去のMT4注文の場合)。

string OrderCommentOpen()
{
  return(HistoryDealSelect(OrderTicketOpen()) ? HistoryDealGetString(OrderTicketOpen(), DEAL_COMMENT) : NULL);
}

string OrderCommentClose()
{
  return(HistoryDealSelect(OrderTicket()) ? HistoryDealGetString(OrderTicket(), DEAL_COMMENT) : NULL);
}

重たいOrderCommissionとOrderCommentのキャッシュ、または私自身の取引リストのキャッシュについてはまだ考えています。

もしキャッシュを作るのであれば、全履歴を対象とすべきです。そして、それはGeneric-bibleをベースにしたほうがいい。唯一の欠点は、VPSの メモリを食うことだ。

MQはTesterでヒストリーをうまく処理した。それが高速化されたとき、キャッシュの話題に関する考えは消えてしまった(バイブルの生のバージョンがあった)。さらに、取引履歴がロジックに深刻な影響を与えるようなテスター用のTSを思いつかなかった。

履歴をリアルタイムでキャッシュすることは不可能である。そして、なぜリアルタイムでマイクロ秒を節約するのか?

 
fxsaber:

リアルタイムに影響はないはずだ。

追加する価値があるかもしれません。現在、以下のように実行できます(過去のMT4注文の場合)。

キャッシュを作成する場合、全履歴を対象とすべきである。また、Generic-bibleをベースにした方が良いだろう。デメリットはただ一つ、VPSの メモリを食うこと。

MQはTesterでヒストリーをうまく処理した。それが高速化されたとき、キャッシュの話題に関する考えは消えてしまった(バイブルの生のバージョンがあった)。さらに、取引履歴がロジックに深刻な影響を与えるようなテスターのTSを思いつかなかった

取引履歴をリアルタイムでキャッシュすることは不可能である。そして、なぜリアルタイムでマイクロ秒を保存するのでしょうか?

私の理解が正しければ、私は1つのTSを持っています:特定の時間に私たちはシグナルで市場に参入し始め、最終的にいくつかの買いと売りを行い、セッションの終わりに私たちはそのまますべてを閉じます。次の日、私たちは円を描くが、ロットはすでに最後のセッションの終了履歴によって計算されます、すなわち、我々は履歴を取得し、利益またはいくつかの損失を閉じたかどうかを確認します。
つまり、履歴にアクセスすることなく - TSは使用できません。

 
Vitaly Muzichenko:

私の理解が正しければ、私は1つのTSが動作します:我々は、最終的にいくつかの買いと売りの信号で市場に参入し、特定の時間に開始し、セッションの終了時に、我々はそのまますべてを閉じます。翌日も同じことを繰り返しますが、ロットはすでに前セッションの終値履歴に基づいて計算されています。つまり、履歴にアクセスし、利益で決済したのか、損失で決済したのかを確認します。
つまり、履歴にアクセスしなければ、TSは使えないのです。

キーワードは「真剣に」である。取引履歴が取引ロジックに切り込むことができるのは明らかだ。問題はTSで、テスターではTSにアクセスすることで顕著に速度が低下し始める。

 
fxsaber:

リアルタイムに影響はないはずだ。

追加する価値があるかもしれません。現在、以下のように実行できます(過去のMT4注文の場合)。

キャッシュを作成する場合、全履歴を対象とすべきである。また、Generic-bibleをベースにした方が良いだろう。デメリットはただ一つ、VPSの メモリを食うこと。

MQはTesterでヒストリーをうまく処理した。それが高速化されたとき、キャッシュの話題に関する考えは消えてしまった(バイブルの生バージョンがあった)。さらに、 取引履歴がロジックに深刻な影響を与えるようなテスターのTSを思いつかなかった

取引履歴をリアルタイムでキャッシュすることは不可能である。また、なぜリアルタイムでマイクロ秒を節約するのでしょうか?

似たような "パターン "がないか履歴を検索するコードを見せたことがありますね。

ここに深い履歴を持つ単純なTSがあります:

現在」から「少し過去(例えば取引日)」までのある時間の現在の価格の「形状パターン」を見て、履歴の中のすべての類似した価格パターンを探し、「一致の度合い」によって分類し、履歴の中でそのような「画像」の最も一致した部分をいくつか選択する。仮想I/Oで履歴を分析し、現在の状態に対するインプット/アウトプットの推奨を得る。履歴パターンの分析結果に基づいて、各推奨に「重み」を割り当てることもできる。

 
Artyom Trishkin:

あなたは以前、似たような「パターン」を履歴から検索するコードを示した。

それがこれだ。

これが、深い履歴を持つ最も単純なTSである:

現在」から「少し過去(たとえば取引日)」までのある時間について、現在の価格の「形状パターン」を調べ、履歴の中から類似の価格パターンをすべて検索し、「一致の度合い」によって分類し、履歴の中からそのような「画像」の最も一致する部分をいくつか選択する。仮想I/Oで履歴を分析し、現在の状態に対するインプット/アウトプットの推奨を得る。履歴のパターンを分析した結果に基づいて、それぞれの推薦に「重み」を割り当てることもできる。

どうやらあなたは理解していないようだ。取引履歴のことだ。

Библиотеки: Кроссплатформенная библиотека оригинальных математических функций
Библиотеки: Кроссплатформенная библиотека оригинальных математических функций
  • 2017.03.27
  • www.mql5.com
Кроссплатформенная библиотека оригинальных математических функций: Автор: fxsaber...
 

歴史が論理に重大な影響を与えるようなTCは適応的TCである。

何が問題なのか?

 
Алексей Тарабанов:

歴史が論理に重大な影響を与えるようなTCは、適応的TCである。

どこでつまずいたのですか?

取引履歴(価格履歴ではない)がバックテスト時間に大きく影響するTSの例が必要だ。