MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1110 1...110311041105110611071108110911101111111211131114111511161117...1953 新しいコメント Dmitri Custurov 2020.04.01 21:34 #11091 if(OrderSelect(ticket, SELECT_BY_TICKET)){ double lots; string symbol = OrderSymbol(); while(true){ RefreshRates(); double price; parseClosePrice(OrderType(), symbol, price); if(OrderClose(OrderTicket(), OrderLots(), price, 500)){ break; }else{ Print(GetLastError()); } Sleep(1000); } エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectの チケットと一致しない可能性はありますか?チケット変数はゼロに等しいことができます。 エラーの再現に時間がかかる、問い合わせがしやすい。 Artyom Trishkin 2020.04.01 21:54 #11092 Dmitri Custurov: エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectのチケットと一致しない可能性はありますか? チケット変数はゼロに等しいことができます。 エラーの再現に時間がかかる、問い合わせがしやすい。 チケットで注文を選択 します。選択した注文がすでに終了していないことを確認していますか?しかし、もう一度閉じようとすると・・・。チケット選択成功後、終了時刻を確認してください。 Dmitri Custurov 2020.04.01 22:08 #11093 Artyom Trishkin: チケットに記載されている順番を選択して います。また、選択した注文がすでに終了していないことは確かですか?でも、また閉めようとしているんですね。チケットで選択成功後の終了時刻を確認する。 エラーが再現されたら確認してみます。私はすべてのチケットをグローバル変数に格納しています。注文が終了すると、それらは削除されます。OrderSelect()の前に、グローバル変数からチケットを取得します。チケットが変数にない場合 - この変数は0になり、したがって、注文は選択されるべきでなく、OrderSelect()はfalseを返すでしょう。しかし、一般的には、そう、確認する価値があります。ありがとうございます。 Artyom Trishkin 2020.04.01 22:15 #11094 Dmitri Custurov: エラーが再現されたら確認してみます。私はすべてのチケットをグローバル変数に格納しています。注文が終了すると、それらは削除されます。OrderSelect()の前に、グローバル変数からチケットを取得します。チケットが変数にない場合 - この変数は0になり、したがって、注文は選択されるべきでなく、OrderSelect()はfalseを返すでしょう。しかし、一般的には、そう、確認する価値があります。ありがとうございます。 チケットで注文が選択された場合、終値を確認するのが標準的です。注文がクローズされてクローズドオーダーのリストから選択されているのか、それともまだオープンされていてマーケットオーダーのリストから選択されているのか、他の方法ではわからないでしょう。 最も近視眼的な方法は、グローバル 変数にチケットを格納することです。取引環境から取得する必要があります - 現在の情報はそこにあります。 Dmitri Custurov 2020.04.01 22:25 #11095 Artyom Trishkin: チケットで注文が選択された場合、終値を確認するのが標準的です。注文がクローズされクローズドリストから選択されたのか、それともまだオープンされていてマーケットリストから選択されたのかは、他の方法ではわかりません。 グローバル 変数にチケットを格納するのは最も短絡的である。取引環境から取得する必要があります - 現在の情報はそこにあります。 OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)のように選択すると、部分的に解決するのでしょうか。私は別の理由でチケットをグローバル変数に保存しているのですが、まあ、今回もそれを使いました。 Artyom Trishkin 2020.04.01 22:38 #11096 Dmitri Custurov: OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)のように選択すると、部分的に解決するのでしょうか。私は別の理由でチケットをグローバル変数に保存していますが、今回もそれを使いました。 プール(MODE_TRADES)は、チケットによる選択時に無視されます。 Igor Makanu 2020.04.01 22:41 #11097 Dmitri Custurov: エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectのチケットと一致しない可能性はありますか? チケットの変数がゼロになる場合があります。 エラーの再現に時間がかかるので、問い合わせる方が楽です。 通常、成行注文の有無を確認する程度で十分です。 OrderCloseTime() == 0 //注文がオープンされている OrderCloseTime() > 0 //オーダーがクローズされる 指値注文の場合、終値も 確認する必要があります。終値が0であれば、指値注文はキャンセルされたことになります。 Dmitri Custurov 2020.04.01 22:53 #11098 皆さん回答ありがとうございました、了解です )) odyn 2020.04.02 05:30 #11099 こんにちは。 できれば、PositionClosePartialメソッドを使ったコードを共有してください。 理論的には理解できるのですが、実際に動くコードが見たいのです。 あるいは、どこを見ればいいのかアドバイスしてください。 よろしくお願いします。 Alexey Viktorov 2020.04.02 07:57 #11100 odyn: こんにちは。 できれば、PositionClosePartialメソッドを使ったコードを共有してください。 理論的には理解できるのですが、実際に動くコードが見たいのです。 あるいは、どこを見ればいいのかアドバイスしてください。 事前に感謝しています。 実はこれ、たった1行のコードなんです。でも、そのためにはポジションチケットを手に入れなければならない。ここでは、OnInitから0.2ロットのポジションをオープンし、OnTickでポジションの半分をクローズするExpert Advisorを紹介します。 //+------------------------------------------------------------------+ //| 00.mq5 | //| © 2020, Alexey Viktorov | //| https://www.mql5.com/ru/users/alexeyvik/news | //+------------------------------------------------------------------+ #property copyright "© 2020, Alexey Viktorov" #property link "https://www.mql5.com/ru/users/alexeyvik/news" #property version "1.00" #include <Trade\Trade.mqh> CTrade trade; ulong posTicket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { trade.SetExpertMagicNumber(111); trade.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.2, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0.0, 0.0); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(PositionSelectByTicket(posTicket) && PositionGetDouble(POSITION_VOLUME) > 0.1) trade.PositionClosePartial(posTicket, 0.1); } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- if(trans.type == TRADE_TRANSACTION_HISTORY_ADD) { if(PositionSelectByTicket(trans.position) && PositionGetInteger(POSITION_MAGIC) == 111 && PositionGetString(POSITION_SYMBOL) == _Symbol) posTicket = PositionGetInteger(POSITION_TICKET); } } //+------------------------------------------------------------------+ また、以下はCTrade クラスのフルコードです。 //+------------------------------------------------------------------+ //| Partial close specified opened position (for hedging mode only) | //+------------------------------------------------------------------+ bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation) { //--- check stopped if(IsStopped(__FUNCTION__)) return(false); //--- for hedging mode only if(!IsHedging()) return(false); //--- check position existence if(!PositionSelectByTicket(ticket)) return(false); string symbol=PositionGetString(POSITION_SYMBOL); //--- clean ClearStructures(); //--- check filling if(!FillingCheck(symbol)) return(false); //--- check if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { //--- prepare request for close BUY position m_request.type =ORDER_TYPE_SELL; m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID); } else { //--- prepare request for close SELL position m_request.type =ORDER_TYPE_BUY; m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK); } //--- check volume double position_volume=PositionGetDouble(POSITION_VOLUME); if(position_volume>volume) position_volume=volume; //--- setting request m_request.action =TRADE_ACTION_DEAL; m_request.position =ticket; m_request.symbol =symbol; m_request.volume =position_volume; m_request.magic =m_magic; m_request.deviation=(deviation==ULONG_MAX) ? m_deviation : deviation; //--- close position return(OrderSend(m_request,m_result)); } ファイル: 00.mq5 5 kb 1...110311041105110611071108110911101111111211131114111511161117...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectの チケットと一致しない可能性はありますか?チケット変数はゼロに等しいことができます。
エラーの再現に時間がかかる、問い合わせがしやすい。エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectのチケットと一致しない可能性はありますか? チケット変数はゼロに等しいことができます。
エラーの再現に時間がかかる、問い合わせがしやすい。チケットで注文を選択 します。選択した注文がすでに終了していないことを確認していますか?しかし、もう一度閉じようとすると・・・。チケット選択成功後、終了時刻を確認してください。
チケットに記載されている順番を選択して います。また、選択した注文がすでに終了していないことは確かですか?でも、また閉めようとしているんですね。チケットで選択成功後の終了時刻を確認する。
エラーが再現されたら確認してみます。私はすべてのチケットをグローバル変数に格納しています。注文が終了すると、それらは削除されます。OrderSelect()の前に、グローバル変数からチケットを取得します。チケットが変数にない場合 - この変数は0になり、したがって、注文は選択されるべきでなく、OrderSelect()はfalseを返すでしょう。しかし、一般的には、そう、確認する価値があります。ありがとうございます。
エラーが再現されたら確認してみます。私はすべてのチケットをグローバル変数に格納しています。注文が終了すると、それらは削除されます。OrderSelect()の前に、グローバル変数からチケットを取得します。チケットが変数にない場合 - この変数は0になり、したがって、注文は選択されるべきでなく、OrderSelect()はfalseを返すでしょう。しかし、一般的には、そう、確認する価値があります。ありがとうございます。
チケットで注文が選択された場合、終値を確認するのが標準的です。注文がクローズされてクローズドオーダーのリストから選択されているのか、それともまだオープンされていてマーケットオーダーのリストから選択されているのか、他の方法ではわからないでしょう。
最も近視眼的な方法は、グローバル 変数にチケットを格納することです。取引環境から取得する必要があります - 現在の情報はそこにあります。
チケットで注文が選択された場合、終値を確認するのが標準的です。注文がクローズされクローズドリストから選択されたのか、それともまだオープンされていてマーケットリストから選択されたのかは、他の方法ではわかりません。
グローバル 変数にチケットを格納するのは最も短絡的である。取引環境から取得する必要があります - 現在の情報はそこにあります。
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)のように選択すると、部分的に解決するのでしょうか。私は別の理由でチケットをグローバル変数に保存しているのですが、まあ、今回もそれを使いました。
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)のように選択すると、部分的に解決するのでしょうか。私は別の理由でチケットをグローバル変数に保存していますが、今回もそれを使いました。
プール(MODE_TRADES)は、チケットによる選択時に無視されます。
エラー4108を返すことがあります - OrderCloseのチケットが間違っています。OrderTicket()がOrderSelectのチケットと一致しない可能性はありますか? チケットの変数がゼロになる場合があります。
エラーの再現に時間がかかるので、問い合わせる方が楽です。通常、成行注文の有無を確認する程度で十分です。
OrderCloseTime() == 0 //注文がオープンされている
OrderCloseTime() > 0 //オーダーがクローズされる
指値注文の場合、終値も 確認する必要があります。終値が0であれば、指値注文はキャンセルされたことになります。
こんにちは。
できれば、PositionClosePartialメソッドを使ったコードを共有してください。
理論的には理解できるのですが、実際に動くコードが見たいのです。
あるいは、どこを見ればいいのかアドバイスしてください。
よろしくお願いします。
こんにちは。
できれば、PositionClosePartialメソッドを使ったコードを共有してください。
理論的には理解できるのですが、実際に動くコードが見たいのです。
あるいは、どこを見ればいいのかアドバイスしてください。
事前に感謝しています。
実はこれ、たった1行のコードなんです。でも、そのためにはポジションチケットを手に入れなければならない。ここでは、OnInitから0.2ロットのポジションをオープンし、OnTickでポジションの半分をクローズするExpert Advisorを紹介します。
また、以下はCTrade クラスのフルコードです。