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

 
fxsaber :


結果

OrderTicketID()が無効です。MT4Orders.mqhがダウンロードしたバージョンと違うようです。


ここからダウンロードしましたhttps://www.mql5.com/ja/code/16006


これは正しくありません。多くのエラーでコンパイルされています。

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
noChangepromise:

エラーが多い。

 
fxsaber :

.


関数名なし

あなたのコンピューターにはロシア語が入っているので、うまくいくかもしれませんが、ロシア語以外の言語ではユニコードで大きな問題があります。

 
noChangepromise:

あなたのコンピューターにはロシア語がインストールされているので、問題なく使えるかもしれませんが、ロシア語以外の言語ではユニコードに大きな問題があります。

このような問題が指摘されたのはこれが初めてです。コピーペーストではなく、ファイルそのものをダウンロードしてみてください。

 
noChangepromise:

iMA()またはiCustom()の変換方法の例を教えてください。

変換はしません。

 
// 変更リスト:
// 02.11.2019
// 修正: CloseByポジションのロット、手数料、クローズ価格を調整しました。


MT4では、取引されたロットの平均値と支払われた手数料を計算するのは非常に簡単です。

void OnStart()
{
  double AvgLots = 0;       // クローズド・ポジションの平均ロット。
  double AvgCommission = 0; // クローズしたポジションあたりの平均手数料。
  
  int AmountPositions = 0;  // クローズドポジションの数。
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && OrderLots())
    {
      AvgLots += OrderLots();
      AvgCommission += OrderCommission();
      
      AmountPositions++;
    }
    
  if (AmountPositions)
  {
    AvgLots /= AmountPositions;
    AvgCommission /= AmountPositions;
  }
}

強調表示された部分は、CloseByによってクローズされたポジションを 無視する役割を担っています。それらは取引されておらず、実際には偽物であるため。

このような単純なコード(私は他の例を与えていない)は、ライブラリの古いバージョンでMT5で正しく動作しないことが判明した。今はすべて問題ありません。


ZЫ ORDER_POSITION_BY_IDプロパティの使い方を初めて見つけました。

 
fxsaber:

ハイライトされたリンクは 未解決の問題です。回避策をご存知の方がいらっしゃいましたら、教えてください。

松葉杖の回避策

bool IsSynchronized( void )
{
  static ulong Orders[];
  
  bool Res = true;
  
  for (int i = ArraySize(Orders) - 1; (i >= 0) && Res; i--)
    if (Orders[i])
      Res = OrderSelect(Orders[i]) || HistoryOrderSelect(Orders[i]);
    
  if (Res)
    for (int i = ArrayResize(Orders, OrdersTotal()) - 1; i >= 0; i--)      
      Orders[i] = OrderGetTicket(i);
      
  return(Res);  
}

#include <MT4Orders.mqh>

void OnTick()
{
  if (!IsSynchronized())
  {
    Alert("Hello World!");
    
    return;
  }
  
  // ....
}
 

特に、このオプションがないと、OrderSelect(ticket,SELECT_BY_TICKET, MODE_HISTORY)を使用して、以前にオープンした成行注文とクローズした成行注文を選択することができません。なぜなら、移管されたチケットは(IsMT4Deal で破棄された)入力取引に属し、対応する出口の検索は(GetPositionDealOut 内の)MT4ORDERS_FASTHISTORY_OFF の条件付きコンパイルでカバーされるだけだからです。

 
Stanislav Korotky:

特に、このオプションがないと、OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)を使用して、以前にオープンした成行注文とクローズした成行注文を選択することができません。なぜなら、移管されたチケットは(IsMT4Deal で破棄される)入力取引に属し、対応する出口の検索は、MT4ORDERS_FASTHISTORY_OFF(GetPositionDealOut 内)の条件付きコンパイルでカバーされるだけだからです。

この低速モードが誰かに使われるとは思いもしなかった。すでに多くの水が流れてしまったので、それを維持しようとしても無理だ。