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

 
fxsaber:

テスターで実行 mt4orders_exampleexpert.mq5

このライブラリを書いているとき、私はユーザーとの間に起こりうる問題の全容を十分に理解していなかった。あなたの前に、それらのすべてが指示なしで動作しました。

EA変換の簡潔な例は、ライブラリの説明だけでなく、その議論 - コメントの中にもあります(そこではさらに明確)。

ilan1_4_strict.mq4のおかげですべてがうまくいきましたが、私のEAは75のエラーを出しました。エラーはこのようなものです:


 
Nauris Zukas:

ilan1_4_strict.mq4ではすべてうまくいったが、私のeaでは75のエラーが出た。エラーはこのようなものです:


少なくとも、グラフィックの部分を全部捨ててください。

なぜテスターにそれが必要なのですか?

 
ivanivan_11:

少なくとも、グラフィックはすべて捨ててください。

なぜテスターに必要なんだ?

それをやってもバグはたくさんある。
 
Nauris Zukas:

ilan1_4_strict.mq4ではすべてうまくいったが、私のeaでは75のエラーが出た。エラーはこのようなものです:

ディスカッションと説明文に次のような言葉があります。

この作業は注文システムにのみ 影響します。

MQL4コードが変更なしで MetaTrader 5で動作する場合、そのような完全なライブラリを作成する可能性についての疑問は解決されていません。

ご注意ください!

ライブラリはMT4Orders.mqhという1つのファイルだけに含まれています。その他のファイルはすべて、ライブラリの使用例として添付されています。これらのファイルはライブラリの使用には必要ありません。

MT4からMT5への移行中、最も困難な障害は新しい注文システムです。MT4Ordersはこの難関を完全に取り除きます。その他の違いはそれほどがっかりするものではありません。簡単に書き換えることができますし、このトピックに関する便利な参考データも あります。さて、ライブラリの作業の正しさは次のように実証された。

ピップス、ニュース、マーチン、マルチカレンシーなどです

このようにMQL5で書くことができます。

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

エラー、バグ、質問

fxsaber, 2016.10.20 15:54

#define SLTP (10 * _Point)

#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>

// MT5標準ライブラリ経由 - MT5のみ
// SellLimitを設定し、SL/TPを設定する。
void MT5Order( const double Price )
{
  CTrade Trade;
  
  if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
    Trade.SetTypeFilling(ORDER_FILLING_RETURN);

  Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);

  const ulong Ticket = Trade.ResultOrder();
  
  if (Ticket > 0)
  {
    COrderInfo Order;
    
    if (Order.Select(Ticket))
      Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
  }      
}

#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006

// MT4-OSJS経由 - クロスプラットフォーム対応(MT4/5)
// SellLimitを設定し、SL/TPを設定する。
void MT4Order( const double Price )
{
  const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
  
  if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}


void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
    
    MT5Order(Price); // MT5標準ライブラリ経由 - MT5のみ
    MT4Order(Price); // MT4-OSJS経由 - クロスプラットフォーム対応(MT4/5)
    
    FirstRun = false;
  }
}

黄色くハイライトされたMT4Order関数は、MT5Order関数と同じことを行います。どのフォーラムでも、黄色のコードはすぐに理解されますが、代替のMT5のコードは理解されません。

そして、MT5用にどのように書くかは、誰もが自分で決めます。例えば、私はMT4Ordersを使うし、まれに 純粋な(SBは機能が弱い)MQL5も使う。両方の書き方が並行して機能します。しかし、MT4Ordersだけで書くと、注文システムはクロスプラットフォームになります。そのため、私は両方のプラットフォームで変更なしに動作するコードを書く練習をしています。

 
fxsaber:

だから、どちらのプラットフォームでも変わらないコードを書く練習をしているんだ。

ありがとう! 将来的には、このオプションについても考えなければならないだろう。
 

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

注文(MQL5)の最終決済価格を決定する方法は?

fxsaber, 2016.12.05 10:25 AM

#include <MT4Orders.mqh>

void OnStart()
{
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Alert(OrderClosePrice());
}
 
void Terminal()
{            
int oldticket=0;
int Ticket=0;
   ArrayResize(Mas_LOT,OrdersTotal(),3);
   ArrayInitialize(Mas_LOT,0); 

   for(int i=0; i <= OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)){    
      if (OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik){

      
      Mas_LOT[i][0] = OrderTicket();
      Mas_LOT[i][1] = OrderLots();
      Mas_LOT[i][2] = OrderType();
      Mas_LOT[i][3] = (OrderProfit() + OrderSwap() + OrderCommission());
      Mas_LOT[i][4] = OrderStopLoss();
      Mas_LOT[i][5] = OrderOpenPrice();

      Mas_LOT[i][6] = OrderTakeProfit();

}}}}

例えば、mt4の注文配列は、例えば平均テイク/ストップを計算するのに非常に便利で便利なものであり、この同じ配列を修正関数やtrawl関数に入力することができますが、MT4Orders.mqhライブラリを使用して mt5に変換するか、またはそれを使用せずに変換するのがよい方法です。
 
Aleksey Semenov:
MT4Orders.mqhライブラリを使用してMT5用に変換する方法
追加
#include <MT4Orders.mqh>
 
クロスプラットフォームの例

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

MetaTrader 5ビルド1525の新バージョン:ポジション形式での履歴の提示とテスターの改善

fxsaber, 2017.01.27 19:20

クロスプラットフォームスクリプトの実行

// MQL4&5コード

#property strict

#include <MT4Orders.mqh>

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick) && (OrdersTotal() == 0) &&
      (OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0) > 0))
  {
    const double Lots[] = {0.6, 0.3, 0.1};
    
    for (int i = 0; i < ArraySize(Lots); i++)    
      if (OrderSelect(0, SELECT_BY_POS) && SymbolInfoTick(_Symbol, Tick))
        OrderClose(OrderTicket(), Lots[i], Tick.bid, 0);

    const int Total = OrdersHistoryTotal();
    
    for (int i = 0; i < Total; i++)
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        OrderPrint();  
  }
}

まずはMT5-Hedgeで。このような素敵なMT4プリントアウト

#114769046 2017.01.27 19:57:25 balance 0.00  1 0 0 2017.01.27 19:57:11 0 0.00 0.00 50000.00 0
#114769087 2017.01.27 19:57:25 buy 0.60 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -5.40 0
#114769088 2017.01.27 19:57:25 buy 0.30 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -2.70 0
#114769089 2017.01.27 19:57:25 buy 0.10 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:26 1.06829 0.00 0.00 -0.90 0

クラシックレポート

注文
オープン時間注文シンボル種類数量価格S / LT / P時間取引条件コメント
2017.01.27 19:57:25131208025ユーロドル買う1.00 / 1.001.068382017.01.27 19:57:25埋め
2017.01.27 19:57:25131208027ユーロドル売り0.60 / 0.601.068292017.01.27 19:57:25埋め
2017.01.27 19:57:25131208030ユーロドル売り0.30 / 0.301.068292017.01.27 19:57:25埋め
2017.01.27 19:57:26131208031ユーロドル売り0.10 / 0.101.068292017.01.27 19:57:26フィルド
取引
時間取引記号種類方向性取引量価格注文手数料スワップ利益差額コメント
2017.01.27 19:57:11114769046残高0.000.0050 000.0050 000.00
2017.01.27 19:57:25114769085EURUSD買う1.001.068381312080250.000.000.0050 000.00
2017.01.27 19:57:25114769087EURUSD売り売り0.601.068291312080270.000.00-5.4049 994.60
2017.01.27 19:57:25114769088EURUSD売り売り0.301.068291312080300.000.00-2.7049 991.90
2017.01.27 19:57:26114769089EURUSD売り売り0.101.068291312080310.000.00-0.9049 991.00

確認として、同じスクリプトをMT4で実行する。

クラシックMT4レポート

クローズした取引
チケットオープン時間タイプサイズ項目価格S / LT / P閉店時間価格コミッション税金スワップ利益
1700392462017.01.27 20:00:41差額入金額50 000.00
1700392872017.01.27 20:00:57買う0.60ユーロドル1.068540.000000.000002017.01.27 20:00:571.068360.000.000.00-10.80
を#170039289へ
1700392892017.01.27 20:00:57買う0.30ユーロドル1.068540.000000.000002017.01.27 20:00:581.068360.000.000.00-5.40
を#170039290へ
1700392902017.01.27 20:00:57買う0.10ユーロドル1.068540.000000.000002017.01.27 20:00:581.068360.000.000.00-1.80
170039289より

スクリプトログのプリントアウト

#170039246 2017.01.27 20:00:41 balance 0.01  0 0 0 2017.01.27 20:00:41 0 0.00 0.00 50000.00 Deposit 0
#170039287 2017.01.27 20:00:57 buy 0.60 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:57 1.06836 0.00 0.00 -10.80 to #170039289 0
#170039289 2017.01.27 20:00:57 buy 0.30 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -5.40 to #170039290 0
#170039290 2017.01.27 20:00:57 buy 0.10 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -1.80 from #170039289 0

MT4とMT5のスクリプトログが一致していることがよくわかります。

ZY スクリプトのロジックがSB経由でMT5用に書かれている場合、スクリプトは正しく動作しません。一般的に、このような単純なMQL4のロジックをMT5用に書くのは難しいとさえ言えます。

削除済み  

シンボルとmajicによる選択は動作しません

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelectが 動作しない注文(インデックスによるチケット)を選択して動作しません。

ファイル: