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

 
-Aleks-:

エラーはほとんどなくなりましたが、1つだけ残っています:

'OrderCloseBy' - 関数が定義されていません cPoza13-1.mqh 1885 8

 //+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
  if(ticketB > 0 && ticketA > 0)
  {
    if(OrderCloseBy(ticketB, ticketA)) return true;
    else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
  }
  else return false;
 
  return false;
}

// 実現しないこと:
// クローズバイの瞬間......まだ時間がないんだ。おそらく将来、必要になったら。
// クローズしたポジションのTPとSLを決定する - 現在(ビルド1368)、MQL5はこの方法を知りません。

このライブラリは自分のために書いたもので、CloseByは使っていません。だから実装していない。もしかしたら、スピードアップして追加するかもしれない。

一時的な解決策として、ライブラリをインクルードする前に以下の行を追加してください。

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif
 
fxsaber:

もちろん可能だ。私はその必要性を感じなかった。

どうやらそうすべきらしい。

私はまた、平均化でグリッドを構築するとき、積極的に履歴を操作する必要があります。事実は、DCが注文の 最大数を制限していることであり、アカウントがグリッドを持つ15〜20のExpert Advisorを持っている場合、解決策は、注文の限界に近づいた瞬間にグリッドのいくつかを最小限に抑えることです。

 
fxsaber:
// 実現しないこと:
// クローズバイの瞬間......まだ時間がないんだ。おそらく将来、必要になれば。
// クローズしたポジションのTPとSLを決定する - 現在(ビルド1368)、MQL5はこの方法を知りません。
このライブラリは自分のために書いたもので、CloseByを使うことはない。だから実装していないんだ。多分、高速化したら、これも追加すると思う。

それはとても良いことだ。CloseByは、計算されたポイントの位置の一部を固定するのに便利なんだ。

 
-Aleks-:

また、平均化でグリッドを構築する際には、積極的に履歴を扱う必要があります。DCは注文の 最大数を制限しており、アカウントにグリッドを持つ15〜20のExpert Advisorsがある場合、解決策は、それぞれ注文の限界に近づいた時点でグリッドの一部が崩壊しているように見られ、我々はポジションの実際の財務結果を理解するために履歴を掘る必要があります。

次のビルドでは、CloseByとヒストリーアクセラレーションを追加する予定です。ただ、それが需要なのか(ライブラリが使用されている)、それとも念のための推奨なのかがわかりません。
 
fxsaber:
// 実現しないこと:
// クローズバイの瞬間......まだ時間がないんだ。おそらく将来、必要になったら。
// クローズしたポジションのTPとSLを決定する - 現在(ビルド1368)、MQL5はこの方法を知りません。

このライブラリは自分のために書いたもので、CloseByを使うことはない。だから実装していないんだ。おそらく、スピードが上がり次第、追加すると思います。

一時的な解決策として、ライブラリを有効にする前に以下の行を追加してください。

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif

ありがとう - オーダーを扱う部分ではコンパイルが成功しました!言語の非互換性に起因するエラーの残りを解決します。

 
fxsaber:
次のビルドでは、CloseByと履歴アクセラレーションを追加するつもりだ。ただ、これは需要がある(ライブラリーが使われている)のか、それとも念のための推奨なのかがわかりません。

私はこれを使用しており、非常に興味深い結果が得られているが、まだ実際のアカウントでは 使用していない。


 
fxsaber:
うまくいくでしょう!私はMT4Ordersで株式市場のすべてを行います。私はオープンポジションの数によって自分自身を制限しません。
しかし、MT4Ordersを介して証券取引所で履歴を扱うことはお勧めしません。つまり、MODE_TRADE - 問題なし、MODE_HISTORY -取引 所では不要です。
 

証券取引所でストップロスを設定することはできませんが、取引を開始することはできます。

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

そして私の意見では、あなたは修正のためのリブにそれを持っていません。

if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

私はあなたがここでそれを追加する必要があることを理解しています:

static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
  {
    MqlTradeRequest Request = {0};

               // 同じチケットの注文とポジションが存在する場合を考慮する。
    bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
               (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
               (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));

    if (Res)
    {
      Request.tp = TP;
      Request.sl = SL;
      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

      
      Res = MT4ORDERS::NewOrderSend(Request);
    }

    return(Res);
  }
はまだ動作しません。
 
Maxim Dmitrievsky:

彼は証券取引所でストップロスを設定することはできないが、取引を開始することはできる。

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

実際、これは開発者のバグに近い。次の行を追加する。

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // チケットは1枚だけでは不十分だ!
    }

    return(Res);
  }

そして、私の意見では、 libでは、修正のためにそれを指定しないでください。

すべてそこにある。
 
fxsaber:

実際、これはほとんど開発者のバグ だ。次の行を追加する

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // チケットは1枚だけでは不十分だ!
    }

    return(Res);
  }

そこですべてが正しい。
はい、そのように動作します、ありがとうございます...そして、オーダーピッキングが遅くなっています、はい...しかし、今のところ他のバグには気づいていません...。実際、オーダーピッキングを速くするのは理にかなっていると思う。