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

 
Aliaksandr Kryvanos:

シンボルとマジックによる選択が機能しない

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

OrderSelectは 動作しません。注文(インデックスによるチケット)を選択して動作しません。添付ファイルに簡単な例がありますが、なぜかMT5では動作しません。

このコードはMT4では動作しません。ポジションをゼロに設定し、別の値と比較しているからです。
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",0,0,clrNONE);
コードを次のように修正してください。
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",MagicNumber,0,clrNONE);
アラームは偽です。
削除済み  
ありがとうございます、申し訳ありません。たまたま、あるEAをmt5バージョンに翻訳しようとしていて、時間がかかり、取引ロジックが一致せず、マジックやそれに影響する可能性のあるものすべてをチェックしたので、簡単な例を書いたのですが、うまくいきませんでした。しかし、その後、私は自分の間違いを発見し、上記のこの例はそれとは何の関係もありません。自分の投稿を削除したかったのですが、時間がありませんでした。
 
Aliaksandr Kryvanos:

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

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

OrderSelectが 機能しません。注文(インデックスによるチケット)を選択して動作しません。添付ファイルの簡単な例ですが、なぜかmt5では動作しません。

OrderSendでマジックを設定しない
削除済み  

MT5で注文を送信する際のエラーに関するデータを取得するにはどうすればよいでしょうか。

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

エラーコードはMqlTradeResult 構造体に含まれています。結果にアクセスしないと、MT5で上記のコードを使用することができません。トレードサーバーのエラーを返すようにmt4orders.mqhを修正するにはどうすればよいでしょうか?

 
Aliaksandr Kryvanos:

MT5で注文を送信する際のエラーに関するデータを取得するにはどうすればよいでしょうか。

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

エラーコードはMqlTradeResult 構造体に含まれています。結果にアクセスせずにMT5で上記のコードを使用することはできません。

MqlTradeResultのコードで補足してください。
削除済み  
例えば、注文をクローズする際にエラーが発生した場合、GetLastError() は、MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
 
Aliaksandr Kryvanos:
つまり、注文の決済時にエラーが発生した場合、MqlTradeResult Result; Result.retcodeをOrderSend(Request, Result)でチェックしなくても、GetLastError()は(取引サーバーの)エラーコードを返しますか?

はい、実装は難しくありません。

Aliaksandr Kryvanos:
bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

ハイライトされた意味がわかりません。

削除済み  
fxsaber:

はい、実装は難しくありません。

ハイライトの意味がわかりません。

mt4用のEAにありました。

実装は難しくないとのことですが、実際にはMqlTradeResult 構造体を分析しなくても、注文が送信されなかった場合、GetLastError()はトレードサーバーエラーを返すことができます。

にチェックを追加するだけです:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ?Result.retcode < TRADE_RETCODE_ERROR : false);
  }

しかし、GetLastError() がそのまま動作するのであれば、そうする必要があるのでしょうか?

 
Aliaksandr Kryvanos:

これはmt4アドバイザーの場合です。

ロジックにエラーがあります。

実装は難しくないとのことですが、実際にはMqlTradeResult 構造体を分析しなくても、注文が送信されなければGetLastError()はトレードサーバーエラーを返すことができます。

にチェックを追加するだけです:

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ?Result.retcode < TRADE_RETCODE_ERROR : false);
  }

しかし、GetLastError()がそのまま機能するのであれば、その必要があるのでしょうか?

私はあなたを理解していません。あなたのifの実装はエラーを含んでいます。さらに、TRADE_RETCODE_DONE_PARTIAL というものがあります。

そして、あなたのコードを修正したとしても、エラーメッセージが記録されるだけです(そして、それを毎回見たくない人がいるかもしれません)。しかし、それはMQLでは使用できません。

したがって、GetLastErrorが標準の実行時エラーと 追加の取引サーバーのリターンコードの 両方を返す場合の変形が最も最適であると思われます。

削除済み  
なるほど、GetLastError() トレードサーバーのエラーも出力させる方法を教えてください。ありがとうございます。