こんにちは!最新版のライブラリと Expert Part_26 をダウンロードし、テスターでビジュアルモードにしたところ、成行注文はオープンされますが、すべての未決注文はオープンされません。
注文は発注されますが、保留中の注文は発注されません。
取引所シンボル、ブローカーOtkritie、バージョン5.00ビルド2190。
Alexander:
こんにちは!最新版のライブラリとExpert Part_26をダウンロードし、テスターにビジュアルモードとマーケットモードを入れました。
注文はオープンされましたが、すべての保留中の注文がオープンされません。
取引所シンボル、ブローカーOtkritie、バージョン5.00ビルド2190。
記事「MetaTrader用プログラムを簡単かつ迅速に作成するためのライブラリ(パートXXV)」の議論:取引サーバーから返されるエラーの処理"
アルチョム・トリシキン, 2019.11.28 09:39 AM
このバージョンのライブラリでも、次の バージョンでもそうですが、注文の充填タイプと注文の有効期限タイプをチェックしていませんでした。次回(27日)の記事で修正する予定です。
今のところ提案できるのは、取引リクエストを送信する際に、有効期限タイプを明示的に指定することです。例えば、指値売り注文を発注するには、テスト用Expert Advisorにそれを追加する必要があります:
//--- BUTT_SELL_LIMIT ボタンが押された場合: SellLimit を設定する。 else if(button==EnumToString(BUTT_SELL_LIMIT)) { //--- 売り指値注文を設定する engine.PlaceSellLimit(lot,Symbol(),distance_pending,stoploss,takeprofit,magic,TextByLanguage(「保留中の売りリミット,"Pending order SellLimit"),0,ORDER_TIME_DAY); }
そして、保留注文を設定 するメソッドの呼び出しを含むすべての行で同じことを行います。
はい、ありがとうございます。
//--- マジックナンバー内のデータ位置 int値 //----------------------------------------------------------- // ビット 32|31 24|2316|15 8|7 0| //----------------------------------------------------------- // バイト|3|2| 1 | 0 | //----------------------------------------------------------- // データ|uchar|uchar| ushort //----------------------------------------------------------- // descr|pend req id|id2|id1|magic||... //----------------------------------------------------------- //--- (1)指定されたマジックナンバーバー、(2)第1グループのID、(3)第2グループのID、(4)マジックナンバーバー値からの保留中のリクエストを返す。 ushort GetMagicID(void) const { return ushort(this.Magic() & 0xFFFF); } uchar GetGroupID1(void) const { return uchar(this.Magic()>>16) & 0x0F; } uchar GetGroupID2(void) const { return uchar((this.Magic()>>16) & 0xF0)>>4; } uchar GetPendReqID(void) const { return uchar(this.Magic()>>24) & 0xFF; }
数値からビットを抽出する便利な関数が ある。
//--- k番目のビット位置のcntビットを抽出する。 uint _getBits(const uint number,uint pos,uint cnt=1) const { return (number >> pos) & ((1 << cnt) - 1); } ushort GetMagicID(void) const { return ushort(_getBits(this.Magic(),0,16)); } uchar GetGroupID1(void) const { return uchar(_getBits(this.Magic(),16,4)); } uchar GetGroupID2(void) const { return uchar(_getBits(this.Magic(),20,4)); } uchar GetPendReqID(void) const { return uchar(_getBits(this.Magic(),24,8)); }
void CTradingControl::OnPReqByErrCodeHandler()
ここで元のマジックを返すメソッドを呼び出すことになっている。GetMagicID()?
//+------------------------------------------------------------------+ //| 注文の利益をpips単位で返す。| //+------------------------------------------------------------------+ int COrder::ProfitInPoints(void) const { MqlTick tick={0}; string symbol=this.Symbol(); if(!::SymbolInfoTick(symbol,tick)) return 0; ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)this.TypeOrder(); double point=::SymbolInfoDouble(symbol,SYMBOL_POINT); if(type==ORDER_TYPE_CLOSE_BY || point==0) return 0; if(this.Status()==ORDER_STATUS_HISTORY_ORDER) return int(type==ORDER_TYPE_BUY ? (this.PriceClose()-this.PriceOpen())/point : type==ORDER_TYPE_SELL ? (this.PriceOpen()-this.PriceClose())/point : 0); else if(this.Status()==ORDER_STATUS_MARKET_POSITION) { if(type==ORDER_TYPE_BUY) return int((tick.bid-this.PriceOpen())/point); else if(type==ORDER_TYPE_SELL) return int((this.PriceOpen()-tick.ask)/point); } else if(this.Status()==ORDER_STATUS_MARKET_PENDING) { if(type==ORDER_TYPE_BUY_LIMIT || type==ORDER_TYPE_BUY_STOP || type==ORDER_TYPE_BUY_STOP_LIMIT) return (int)fabs((tick.bid-this.PriceOpen())/point); else if(type==ORDER_TYPE_SELL_LIMIT || type==ORDER_TYPE_SELL_STOP || type==ORDER_TYPE_SELL_STOP_LIMIT) return (int)fabs((this.PriceOpen()-tick.ask)/point); } return 0; }
なぜ ORDER_STATUS_DEAL タイプの計算がないのですか?
そして、それは常に0です:
deal_profit_pts=(int)deal.GetProperty(ORDER_PROP_PROFIT_PT)

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第24部): 未決取引リクエストの使用 - 初期実装(ポジションのオープン) はパブリッシュされました:
本稿では、注文の値にいくつかのデータを格納し、マジックナンバーを配置し、保留中リクエストの実装を開始します。概念を確認するために、サーバエラーを受信して、待機後に繰り返しリクエストを送信する必要がある際にマーケットポジションを開くための最初のテスト保留中リクエストを作成しましょう。
コンパイルしてEAを起動します。インターネットをオフにして、端末の右下隅に次の画像が表示されるまで待ちます。
インターネットを無効にして[売]をクリックすると、取引サーバはエラーを返し、次のエントリが操作ログに表示されます。
エラーを受け取った後、ライブラリは、ショートポジションを開けなかったときにパラメータが設定された保留中リクエストを作成します。
保留中リクエストには、試行回数と20秒の待機時間も含まれます。
次に、取引サーバへの接続を復元できるようにインターネットを有効にします。
接続が復元されるとすぐに、ライブラリはサーバに送信する保留中リクエストの処理を開始します。その結果、操作ログエントリにポジションが表示されます。
ご覧のとおり、取引サーバへの接続を復元した後、現在のアカウントの取引は遅れて有効になりました。
しかし、保留中リクエストはとにかく機能しました。...
また、操作ログの実際のマジックナンバー(17629307)に続いて、括弧(123)のEA設定で定義されたマジックナンバーに加えたエントリ「G1: 13」があって、最初のグループIDが13であることが分かります。2番目のグループは値がゼロなので、IDはありません。よって「G2: XX」2番目のグループIDエントリはありません。
作者: Artyom Trishkin