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

 
Ilya Malev:

なぜスレッドを読むのですか、私はすでにすべてを理解しました。

私はいくつかのEAですべて完璧に動作しており、ライブラリに問題はありません。

 
fxsaber:

そうでないケースはいくらでもある。各グリッド注文は数十のポジションを生成し、各ポジションは同じTPによってクローズし、数十のクローズポジションを 生成します。

1) ちなみに、MT4 の部分ポジションもそのようには生成されません(少なくとも通常のブローカーでは)。他に反論はありますか?

2) 実際、この特定の瞬間に失敗したのはあなたのライブラリです。なぜなら、すでに申し上げたように、ライブラリは理想的な世界のために書かれたものではなく、私たちの罪深く不完全で惨めな世界のために書かれたものだからです。私はあなたの立場をよく理解しているし、私自身がそのようなコードを書くことはないだろう。もし書いたとしても、この話題であなたと議論することはないし、静かにやり直すだろう。しかし問題は、私がこのコードを書いていないということだ :)オーケー、対話をありがとう。

 
Ilya Malev:

1) ご参考までに、MT4 の部分ポジションもそのようには生成されません(少なくとも通常のブローカーでは)。他に反論はありますか?

戦闘的な取引履歴を考慮に入れて意思決定するシステムはすべて曲者だ。ただし、バーチャルな取引履歴は例外だ。しかし、それは全く別の話だ。

2) 実際、この特別な瞬間の「戦闘使用」に耐えられなかったのは、あなたのライブラリなのです。なぜなら、すでに申し上げたように、ライブラリは理想的な世界のために書かれたものではなく、私たちの罪深く不完全で惨めな世界のために書かれたものだからです。あなたの立場はよく理解できるし、私自身もそのようなコードを書くことはないだろう。もし書いたとしても、この話題であなたと議論することはないし、静かにやり直すだろう。しかし問題は、私がこのコードを書いていないことだ :)わかりました、対話に感謝します。

MT4コーダーはMT5、特にライブラリに近づくことを許されるべきではない。あなたがそうでなくてよかった。

事実、曲がったMT4アドバイザーはライブラリで消化されないかもしれない。正しく書かれたMT4-advisorなら問題ない。


ZY SELECT_BY_TICKETを "簡単にする "ために追加しないことを学べばいいんだ。

 

SelectByTicketを使わずにチケットを変更する問題に遭遇しました。私はこのように回避しました:

                #ifdef __MQL5__
                        long ticket = OrderTicketOpen();
                        ticket = HistoryDealGetInteger( ticket, DEAL_ORDER );
                #endif 
 
Andrey Khatimlianskii:

SelectByTicketを使わずにチケットを変更する問題に遭遇しました。私はこのように回避しました:

明確にお願いします。

 
fxsaber:

はっきりさせてください。

私たちは当時、決定プロセスでこのことについて議論したようなものです。

オーダーにはいくつかの情報が紐づいています。そして、新しい注文を設定する際には、履歴からすべての注文についてこのデータを分析する必要がありました。

 
Andrey Khatimlianskii:

私たちはそのとき、決断のプロセスで話し合ったんだ。

オーダーにはいくつかの情報が紐づいています。そして、新しい注文を設定する際には、履歴からすべての注文についてこのデータを分析する必要があった。

なるほど。私たちはポジションがどのように浪費されているかを理解する必要があった。

 

OrderSendはTRADE_RETCODE_INVALID_PRICEの 代わりにERR_TRADE_SEND_FAILEDを 返します:

2018.12.14 01:00:18.479 2016.02.11 15:40:40   failed buy stop 0.08 EURUSD.m at 1.13196 [Invalid price]
2018.12.14 01:00:18.479 2016.02.11 15:40:40   Alert: #4756,  Не удалось отправить торговый запрос: CommonExpert.mqh|2438 | OrderSend buy stop 0.08 @1.13196

通常、私のプログラミング・エラーでは、ERR_TRADE_SEND_FAILEDは無効な(すでにクローズされた、またはNULL)チケットを渡すことを意味します。そして、この方法ではプログラム上では違いが分かりません。

 
Edgar:

OrderSend は TRADE_RETCODE_INVALID_PRICE の代わりに ERR_TRADE_SEND_FAILED を返します:

通常、私のプログラミング・エラーでは、ERR_TRADE_SEND_FAILEDは無効な(すでにクローズされた、またはNULL)チケットを渡すことを意味します。そしてこの方法では、プログラム上ではその違いを見分けることができません。

#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)

void OnStart()
{
  if (OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid - 100 * _Point, 0, 0, 0) < 0)
  {
    Print(GetLastError());                     // err_trade_send_failed
    Print(MT4ORDERS::LastTradeResult.retcode); // トレードコード無効価格
  }
}


スクリプト実行ログ

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 0
Request.symbol = EURUSD
Request.volume = 1.0
Request.price = 1.13473
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_SELL_LIMIT (3)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 10015
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = Invalid price 0.082 ms
Result.request_id = 0
Result.retcode_external = 0

4756
10015
 
ありがとう