初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 854 1...847848849850851852853854855856857858859860861...1503 新しいコメント 削除済み 2018.05.01 19:48 #8531 CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) をいじっていて、内部が整理されていないことに気がつきました。boolとResultRetcode()という2つのリターンコードが全てです。RetCodeは常に内部で0になってからfalseを返すわけではないので、PositionCloseがfalseを返した場合、RetCodeはTRADE_RETCODE_DONEを返す可能性があります。この2つの戻り値を同期させることができれば、開発者にとってありがたいことです。 Vladimir Karputov 2018.05.01 19:50 #8532 . ... Rick D. ... .: CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) をいじっていて、内部が整理されていないことに気がつきました。boolとResultRetcode()という2つのリターンコードが全てです。RetCodeは常に内部で0になってからfalseを返すわけではないので、PositionCloseがfalseを返した場合、RetCodeはTRADE_RETCODE_DONEを返す可能性があります。この2つの戻り値を同期させることができれば、開発者にとってありがたいことです。コード+サンプル+ログ。 削除済み 2018.05.01 21:43 #8533 一つ変なバグを発見しました。私だけのものなのかもしれません。 COrderInfo::OrderType()は常に0を返す。 それを確認するために、手動で任意の保留中の注文(BuyStop、SellStop、...)を発注することができます。 を入力し、それをスクリプトに入力します。 #include <Trade\Trade.mqh> COrderInfo m_order; void OnStart() { ulong ticket = 250262937; //здесь ваш тикет if (!m_order.Select(ticket)) { PrintFormat("COrderInfo::Select(#%I64u) failed", ticket); return; } PrintFormat("OrderType= %d", m_order.Type()); }仮想関数表で何かあるかも?デバッグでは、virtual int CObject::Type()にしかたどり着けません。 PS.もう、自分でもわかっているんです。COrderInfo には、Type() と OrderType() という 2 つの類似したメソッドがあります。 削除済み 2018.05.02 11:19 #8534 Vladimir Karputov:コード+サンプル+ログ。どんな状況か見てみましょう。 #include <Trade\Trade.mqh> CTrade m_trade; void OnStart() { int LErr; bool bRC; double price; ResetLastError(); price = 0.0; bRC = m_trade.Buy(0.1, "EURUSD", price, 0.0, 0.0); LErr = GetLastError(); PrintFormat("! Buy: (bRC= %s)(RetCode= %u: %s)(LErr= %d)", ticket, (string)bRC, m_trade.ResultRetcode(), m_trade.ResultComment(), LErr ); //В m_trade.ResultRetcode() теперь TRADE_RETCODE_DONE //--- ulong ticket = 1; //Позиции с таким тикетом нет ResetLastError(); bRC = m_trade.PositionClose(ticket); LErr = GetLastError(); PrintFormat("! Close #%I64u: (bRC= %s)(RetCode= %u: %s)(LErr= %d)", ticket, (string)bRC, m_trade.ResultRetcode(), m_trade.ResultComment(), LErr ); //В m_trade.ResultRetcode() все еще TRADE_RETCODE_DONE }CTradeには、新しい操作の前にそれらをリセットするSetResultRetcodeとSetResultCommentのメソッドが見当たりません。 私のクラスを継承し、そこに1つのメソッドを追加する必要があります。 class CTradeEx : public CTrade { public: void SetResult(MqlTradeResult& result) { m_result = result; } }; Vladimir Karputov 2018.05.02 11:50 #8535 . ... Rick D. ... .:どんな状況か見てみましょう。 CTradeには、新しい操作の前にそれらをリセットするSetResultRetcodeとSetResultCommentのメソッドが見当たりません。 何のために?まったくもって不要な機能。 第一に、あなたは空中で撃つ - 最初に確認することなく、取引注文を送信する - 操作が返されたものを確認せずに。PositionCloseは bool型です。 次に、ポジションクローズチェーンについてですが、ポジションが見つからない(指定したチケットで選択できない)場合は、"false "を返します。 //+------------------------------------------------------------------+ //| Close specified opened position | //+------------------------------------------------------------------+ bool CTrade::PositionClose(const ulong ticket,const ulong deviation) { //--- check stopped if(IsStopped(__FUNCTION__)) return(false); //--- check position existence if(!PositionSelectByTicket(ticket)) return(false); string symbol=PositionGetString(POSITION_SYMBOL); //--- clean このとき、構造体はどこにもクリアされません。なぜなら、それは意味がないからです。 削除済み 2018.05.02 12:11 #8536 Vladimir Karputov:何が言いたいの?まったくもって不要な機能。 第一に、あなたは空中で撃つ - 最初に確認することなく、取引注文を送信する - 操作が返されたものを確認せずに。PositionCloseは bool型です。 次に、ポジションクローズチェーンについてですが、ポジションが見つからない(指定したチケットで選択できない)場合は、"false "を返します。 同時に、構造体はどこにもクリアされない。結局のところ、以前は位置を選択できなかったのだから、構造体には何の情報もないのである。 1) ResetLastError()は絶対に不要な関数と言った方がいいかもしれません。 2)返送された結果に対するチェックがある。例えて言えば、あるWinAPI関数を呼び出して、それがエラーを返し、GetLastError() (ResultRetcodeのアナログ)が任意の最後のコードを返すと想像してください。 もし私がPositionCloseを呼び出す前に何らかのチェックを加えても(私はそうします)、RetCodeが変化しない場合、他の呼び出しの前の他のチェックを上書きすることはありません。 私のExpert Advisorはログに情報を書き込みます。必要なのは、ある呼び出しがfalseを返した場合に、ResultRetcodeとResultCommentをログにきちんと書き込むことだけです。 Vladimir Karputov 2018.05.02 12:37 #8537 . ... Rick D. ... .: 1) ResetLastError()は全く不要と言った方が良いかもしれません。 2)リターン結果のチェックがある。例えて言えば、あるWinAPI関数を呼び出して、それがエラーを返し、GetLastError() (ResultRetcodeのアナログ)が任意の最後のコードを返すと想像してください。 PositionCloseを呼び出す前に何らかのチェックを加えても(そうするつもりです)、RetCodeが変化しない場合には、他の呼び出し前のチェックを上書きしません。 私のExpert Advisorはログに情報を書き込みます。必要なのは、あるコールがfalseを返したときに、ログにResultRetcodeとResultCommentをまともに書き込むことだけです。ResultRetcode() メソッドを呼び出すことで、取引要求の実行結果(取引サーバーのリターンコード)を確認する必要が ある場合、CTradeクラスのヘルプをお読みください。 削除済み 2018.05.02 12:56 #8538 Vladimir Karputov:ResultRetcode() メソッドを呼び出して、取引要求の実行結果(取引サーバーのリターンコード)を確認する タイミングは、CTradeクラスのヘルプをお読みください。と断言してもいい。 1) PositionCloseがfalseを返した場合、Retcodeは満たされないのですか? 2) PositionCloseがtrueを返した場合、Retcodeは常に入力されるのか? Seric29 2018.05.02 16:57 #8539 Vladimir Karputov:注文→取引→ポジションポジションから始値を 取る。このOrder -> Trade -> Positionの様子を画像で見せてもらえますか、トレードが書かれている場所より下にあるので、そこにコピーすることはできません Vladimir Karputov 2018.05.02 17:32 #8540 Seric29:このOrder→trade→positionの様子を画像で見せてもらえないでしょうか、トレードが書き込まれるのは一番下なのでコピーできないのです。 質問を書き直すか、句読点をつけるか、いっそのこと、何を、どこで、誰が、と絵に書き足してください。そうでなければ、見慣れた文字が見えても、意味や言いたいことが理解できないことになります。 1...847848849850851852853854855856857858859860861...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) をいじっていて、内部が整理されていないことに気がつきました。boolとResultRetcode()という2つのリターンコードが全てです。RetCodeは常に内部で0になってからfalseを返すわけではないので、PositionCloseがfalseを返した場合、RetCodeはTRADE_RETCODE_DONEを返す可能性があります。この2つの戻り値を同期させることができれば、開発者にとってありがたいことです。
コード+サンプル+ログ。
COrderInfo::OrderType()は常に0を返す。
それを確認するために、手動で任意の保留中の注文(BuyStop、SellStop、...)を発注することができます。
を入力し、それをスクリプトに入力します。
仮想関数表で何かあるかも?デバッグでは、virtual int CObject::Type()にしかたどり着けません。
PS.もう、自分でもわかっているんです。COrderInfo には、Type() と OrderType() という 2 つの類似したメソッドがあります。
コード+サンプル+ログ。
どんな状況か見てみましょう。
CTradeには、新しい操作の前にそれらをリセットするSetResultRetcodeとSetResultCommentのメソッドが見当たりません。
私のクラスを継承し、そこに1つのメソッドを追加する必要があります。
どんな状況か見てみましょう。
CTradeには、新しい操作の前にそれらをリセットするSetResultRetcodeとSetResultCommentのメソッドが見当たりません。
何のために?まったくもって不要な機能。
第一に、あなたは空中で撃つ - 最初に確認することなく、取引注文を送信する - 操作が返されたものを確認せずに。PositionCloseは bool型です。
次に、ポジションクローズチェーンについてですが、ポジションが見つからない(指定したチケットで選択できない)場合は、"false "を返します。
このとき、構造体はどこにもクリアされません。なぜなら、それは意味がないからです。
何が言いたいの?まったくもって不要な機能。
第一に、あなたは空中で撃つ - 最初に確認することなく、取引注文を送信する - 操作が返されたものを確認せずに。PositionCloseは bool型です。
次に、ポジションクローズチェーンについてですが、ポジションが見つからない(指定したチケットで選択できない)場合は、"false "を返します。
同時に、構造体はどこにもクリアされない。結局のところ、以前は位置を選択できなかったのだから、構造体には何の情報もないのである。
1) ResetLastError()は絶対に不要な関数と言った方がいいかもしれません。
2)返送された結果に対するチェックがある。例えて言えば、あるWinAPI関数を呼び出して、それがエラーを返し、GetLastError() (ResultRetcodeのアナログ)が任意の最後のコードを返すと想像してください。
もし私がPositionCloseを呼び出す前に何らかのチェックを加えても(私はそうします)、RetCodeが変化しない場合、他の呼び出しの前の他のチェックを上書きすることはありません。
私のExpert Advisorはログに情報を書き込みます。必要なのは、ある呼び出しがfalseを返した場合に、ResultRetcodeとResultCommentをログにきちんと書き込むことだけです。
1) ResetLastError()は全く不要と言った方が良いかもしれません。
2)リターン結果のチェックがある。例えて言えば、あるWinAPI関数を呼び出して、それがエラーを返し、GetLastError() (ResultRetcodeのアナログ)が任意の最後のコードを返すと想像してください。
PositionCloseを呼び出す前に何らかのチェックを加えても(そうするつもりです)、RetCodeが変化しない場合には、他の呼び出し前のチェックを上書きしません。
私のExpert Advisorはログに情報を書き込みます。必要なのは、あるコールがfalseを返したときに、ログにResultRetcodeとResultCommentをまともに書き込むことだけです。
ResultRetcode() メソッドを呼び出すことで、取引要求の実行結果(取引サーバーのリターンコード)を確認する必要が ある場合、CTradeクラスのヘルプをお読みください。
ResultRetcode() メソッドを呼び出して、取引要求の実行結果(取引サーバーのリターンコード)を確認する タイミングは、CTradeクラスのヘルプをお読みください。
と断言してもいい。
1) PositionCloseがfalseを返した場合、Retcodeは満たされないのですか?
2) PositionCloseがtrueを返した場合、Retcodeは常に入力されるのか?
注文→取引→ポジションポジションから始値を 取る。
このOrder -> Trade -> Positionの様子を画像で見せてもらえますか、トレードが書かれている場所より下にあるので、そこにコピーすることはできません
このOrder→trade→positionの様子を画像で見せてもらえないでしょうか、トレードが書き込まれるのは一番下なのでコピーできないのです。
質問を書き直すか、句読点をつけるか、いっそのこと、何を、どこで、誰が、と絵に書き足してください。そうでなければ、見慣れた文字が見えても、意味や言いたいことが理解できないことになります。