ライブラリ: MT4Orders - ページ 78 1...717273747576777879808182838485...95 新しいコメント Aleksey Vyazmikin 2022.07.21 11:58 #771 私は自分のクラスで次のようなエラー処理を行った。 #property strict #ifdef __MQL5__ #include <MQL4_To_MQL5.mqh> //https://www.mql5.com/ja/code/16006 #endif // __MQL5__ #define GetLastError GetOrderError // MT5 だけでなく MT4 にも存在しなければならない。 // https://www.mql5.com/ru/forum/93352/page19#comment_6730221 #include <MT4Orders.mqh> #define BUY 0 #define SELL 1 #define ALL -1 #define LAST 0 #define NOMODY -1 bool LogInfo=true;// エラー・ログへのプリント /* 以下は、注文を扱うためのクラスの関数です */ クラスの最後に関数 //+-------------------------------------------------------------------------------------------------------------------+ //|| MT5からMT4へのエラー変換 //+-------------------------------------------------------------------------------------------------------------------+ int GetOrderError() { //int error=MT4ORDERS::LastTradeResult.retcode_external; // カスタムコードを返す。 int error=(int)MT4ORDERS::LastTradeResult.retcode; // 注文をサーバーに送信した後、エラーコードを返す。 if(LogInfo==true)Print("error MT5=",error); switch(error) { case 10016: error=130;//足が違う break; case 10018: error=132;//市場閉鎖 break; case 10020: error=135;//価格が変更されました break; case 136: error=136;//価格がない - MT5にコードがない break; case 10004: error=138;//新価格 break; case 145: error=145;//注文がマーケットに近すぎるため、修正が禁止されています。 break; case 146: error=146;/トレーディングサブシステムがビジー - MT5にコードがない break; default: error=error;//記述されていないエラー } return (error); } #undef GetLastError fxsaber 2022.07.21 13:51 #772 Aleksey Vyazmikin #:私のクラスでのエラー処理は次のようにした。クラスの最後に関数 悪くないバリアントだ。ただ、他のエラー・コードは 利用できないことを覚えておいてほしい。 Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения www.mql5.com Ошибки времени выполнения - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Aleksey Vyazmikin 2022.07.21 17:15 #773 fxsaber #:悪い選択肢ではない。ただ、他のエラーコードは 使用できないことを覚えておいてほしい。 私の理解が正しければ、コンパイラーはGetLastErrorを置き換えることはもうないだろう。 fxsaber 2022.07.21 17:45 #774 Aleksey Vyazmikin #:この変更は私のクラスの周りのコードにのみ有効で、#undef GetLastErrorという置換をオフにした後は、私の理解が正しければ、コンパイラはGetLastErrorをそれ以上置き換えないようです。 あなたの言うとおりです。私はあなたの言っている意味が一度で理解できませんでした。 Aleksey Vyazmikin 2022.07.21 19:29 #775 fxsaber #:その通りだ。何が言いたいのかすぐには分からなかった。 ありがとう!あとはテストするだけだ :) Aleksey Vyazmikin 2022.07.22 18:52 #776 コロンとクエスチョンマークばかりでよくわかりません。 //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ double AccountFreeMarginCheck(const string Symb,const int Cmd,const double dVolume) { double Margin; return(::OrderCalcMargin((ENUM_ORDER_TYPE)Cmd, Symb, dVolume, ::SymbolInfoDouble(Symb,(Cmd==::ORDER_TYPE_BUY) ? ::SYMBOL_ASK : ::SYMBOL_BID),Margin) ? ::AccountInfoDouble(::ACCOUNT_MARGIN_FREE) - Margin : -1); } 資金9k、レバレッジ1k100、ロット0.01で、ゼロより小さい値を返します。 Aleksey Vyazmikin 2022.07.22 20:55 #777 ログに情報を印刷/+------------------------------------------------------------------+ //|注文を出すのに十分な資金があるかチェックする。 //+------------------------------------------------------------------+ bool CheckMoneyForTrade(double lots,int type) { string symb=Symbol(); double free_margin=AccountFreeMarginCheck(symb,type,lots); double MarginAsk=0.0; bool MarginAskB=OrderCalcMargin(ENUM_ORDER_TYPE(type),Symbol(),lots,SymbolInfoDouble(Symbol(),SYMBOL_ASK),MarginAsk); double MarginBid=0.0; bool MarginBidB=OrderCalcMargin(ENUM_ORDER_TYPE(type),Symbol(),lots,SymbolInfoDouble(Symbol(),SYMBOL_BID),MarginBid); Print("ACCOUNT_MARGIN_FREE=",AccountInfoDouble(ACCOUNT_MARGIN_FREE), " SYMBOL_ASK=",SymbolInfoDouble(Symbol(),SYMBOL_ASK), " SYMBOL_BID=",SymbolInfoDouble(Symbol(),SYMBOL_BID), " OrderCalcMarginAsk=",MarginAsk, " OrderCalcMarginBid=",MarginBid, " free_margin=",free_margin ); //-- 十分な資金がない場合 if(free_margin<0) { string oper=(type==OP_BUY)? "Buy":"Sell"; Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError()); return(false); } if(NewOrderAllowedVolume(Symbol())<(lots+0.1))return(false);//利用可能な容量を確認する //-- テストは成功した return(true); }テスターで2022.07.22 21:50:39.521 2009.12.04 14:30:00 ACCOUNT_MARGIN_FREE=999560.05 SYMBOL_ASK=89.63 SYMBOL_BID=89.6 OrderCalcMarginAsk=100.0 OrderCalcMarginBid=100.0 free_margin=999460.05 実生活では2022.07.22 21:45:08.956 Bingo_MT5 (USDJPY,M15) ACCOUNT_MARGIN_FREE=9000.0 SYMBOL_ASK=136.267 SYMBOL_BID=136.241 OrderCalcMarginAsk=0.0 OrderCalcMarginBid=0.0 free_margin=-1.0 2022.07.22 21:45:08.956 Bingo_MT5 (USDJPY,M15) Not enough money for Buy 0.0 USDJPY Error code=4002 未知の理由により、OrderCalcMargin() の計算が行われていないようです。 エラー4002とは クライアント端末関数の 内部呼び出しの パラメータに誤りがあります。 という意味なのですが、意味がよくわかりません。 fxsaber 2022.07.22 21:18 #778 Aleksey Vyazmikin #:コロンとクエスチョンマークばかりでよくわからないんです。 あなたは古代の、急いで組み立てたソリューションを使っている。 取引、自動取引システム、取引戦略のテストに関するフォーラム。 ライブラリ: MT4Orders Aleksey Vyazmikin, 2022.07.21 11:58 AM 私のクラスでエラーとそう仕事を作った #ifdef __MQL5__ #include <MQL4_To_MQL5.mqh> //https://www.mql5.com/ja/code/16006 #endif // __MQL5__ MT4Ordersとは何の関係もないので、投稿したことを何度も後悔しました。それは例の補足にすぎませんでした。その意味は覚えていません。その意味は覚えていない。 そういえば、ここで「コンバージョン」というもっと凝った解答を作ったことを思い出した。 取引、自動取引システム、取引戦略のテストに関するフォーラムライブラリ: MT4Ordersfxsaber, 2019.01.13 17:23 PM. KimのMT4での機能はかなり人気があるので、私は彼のサイトからすべてのソースをダウンロードし、MT5でそれらのための簡単な「コンバータ」を書きました。 #include <KimIVToMT5.mqh> //https://c.mql5.com/3/263/KimIVToMT5.mqh 私自身はMT4StyleはOrder関数にしか使っていません。他のMT4標準関数は絶対に変換しませんし、このオプションは松葉杖だと考えています。私は、マージン関数を変換しようとせずに、ネイティブ関数にマージン関数を書くことをお勧めします。マージンに関する私のクラスを見ました。そして、これは通常のFXのためだけのものです。 Aleksey Vyazmikin 2022.07.23 10:09 #779 fxsaber #:急いで組み立てた古いソリューションを使っているんだろう。MT4Ordersとは何の関係もないので、掲載したことを何度も後悔した。単なる例の補足だった。その意味は覚えていない。調べたくもない。 そういえば、ここで「コンバージョン」というもっと凝った解答を作ったことを思い出した。私自身はMT4StyleをOrder関数にのみ使用している。他のMT4標準関数は絶対に変換しませんし、このオプションは松葉杖だと考えています。私は、マージン関数を変換しようとせずに、ネイティブ関数の上にマージン関数を書くことをお勧めします。マージンに関する私のクラスを見ました。そして、これは通常のFXのためだけのものです。 私は、EAのロジックの機能をMT4とMT5用にコンパイル可能なコードにするというタスクがあっただけで、環境や注文の操作に関するものは、上記のinkludniksの助けを借りて変換したり、別々の関数を取り出してそれぞれのプラットフォーム用に作り直したりしました。このプロジェクトは大規模になり、あなたのソリューションにとても助けられました。 以前、あなたのコードを考慮せずにトラバーサルを行いました(MQL4_To_MQL5.mqhはあなたのコードではありませんか? #define MODE_BID 9 #define MODE_ASK 10 #define MODE_DIGITS 12 #define MODE_SPREAD 13 #define MODE_STOPLEVEL 14 #define MODE_LOTSIZE 15 #define MODE_POINT 11 #define MODE_TICKVALUE 16 #define MODE_TICKSIZE 17 #define MODE_MAXLOT 18 #define MODE_MINLOT 19 #define MODE_LOTSTEP 20 //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ double MarketInfo(const string Symb,const int Type) { switch(Type) { case MODE_BID: return(::SymbolInfoDouble(Symb, ::SYMBOL_BID)); case MODE_ASK: return(::SymbolInfoDouble(Symb, ::SYMBOL_ASK)); case MODE_DIGITS: return((double)::SymbolInfoInteger(Symb, ::SYMBOL_DIGITS)); case MODE_SPREAD: return((double)::SymbolInfoInteger(Symb, ::SYMBOL_SPREAD)); case MODE_STOPLEVEL: return((double)::SymbolInfoInteger(Symb, ::SYMBOL_TRADE_STOPS_LEVEL)); case MODE_LOTSIZE: return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_CONTRACT_SIZE)); case MODE_POINT: return(::SymbolInfoDouble(Symb, ::SYMBOL_POINT)); case MODE_TICKVALUE: return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_SIZE)); case MODE_TICKSIZE: return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_VALUE)); case MODE_MAXLOT: return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MAX)); case MODE_MINLOT: return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MIN)); case MODE_LOTSTEP: return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_STEP)); } return(-1); } fxsaber 2022.07.23 10:40 #780 Aleksey Vyazmikin #:それともMQL4_To_MQL5.mqhがあなたのコードではないのですか? 私のコードですが、かなり古いものです。Kimのmqhを調べた方がいい。MarketInfoのためのもっと精巧なソリューションがある。 1...717273747576777879808182838485...95 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私は自分のクラスで次のようなエラー処理を行った。
クラスの最後に関数
私のクラスでのエラー処理は次のようにした。
クラスの最後に関数
悪くないバリアントだ。ただ、他のエラー・コードは 利用できないことを覚えておいてほしい。
悪い選択肢ではない。ただ、他のエラーコードは 使用できないことを覚えておいてほしい。
私の理解が正しければ、コンパイラーはGetLastErrorを置き換えることはもうないだろう。
この変更は私のクラスの周りのコードにのみ有効で、#undef GetLastErrorという置換をオフにした後は、私の理解が正しければ、コンパイラはGetLastErrorをそれ以上置き換えないようです。
あなたの言うとおりです。私はあなたの言っている意味が一度で理解できませんでした。
その通りだ。何が言いたいのかすぐには分からなかった。
ありがとう!あとはテストするだけだ :)
コロンとクエスチョンマークばかりでよくわかりません。
資金9k、レバレッジ1k100、ロット0.01で、ゼロより小さい値を返します。
ログに情報を印刷
テスターで
実生活では
未知の理由により、OrderCalcMargin() の計算が行われていないようです。
エラー4002とはクライアント端末関数の 内部呼び出しの パラメータに誤りがあります。
という意味なのですが、意味がよくわかりません。
コロンとクエスチョンマークばかりでよくわからないんです。
あなたは古代の、急いで組み立てたソリューションを使っている。
取引、自動取引システム、取引戦略のテストに関するフォーラム。
ライブラリ: MT4Orders
Aleksey Vyazmikin, 2022.07.21 11:58 AM
私のクラスでエラーとそう仕事を作った
そういえば、ここで「コンバージョン」というもっと凝った解答を作ったことを思い出した。
取引、自動取引システム、取引戦略のテストに関するフォーラム
ライブラリ: MT4Orders
fxsaber, 2019.01.13 17:23 PM.
KimのMT4での機能はかなり人気があるので、私は彼のサイトからすべてのソースをダウンロードし、MT5でそれらのための簡単な「コンバータ」を書きました。私自身はMT4StyleはOrder関数にしか使っていません。他のMT4標準関数は絶対に変換しませんし、このオプションは松葉杖だと考えています。私は、マージン関数を変換しようとせずに、ネイティブ関数にマージン関数を書くことをお勧めします。マージンに関する私のクラスを見ました。そして、これは通常のFXのためだけのものです。
急いで組み立てた古いソリューションを使っているんだろう。
そういえば、ここで「コンバージョン」というもっと凝った解答を作ったことを思い出した。
私自身はMT4StyleをOrder関数にのみ使用している。他のMT4標準関数は絶対に変換しませんし、このオプションは松葉杖だと考えています。私は、マージン関数を変換しようとせずに、ネイティブ関数の上にマージン関数を書くことをお勧めします。マージンに関する私のクラスを見ました。そして、これは通常のFXのためだけのものです。
私は、EAのロジックの機能をMT4とMT5用にコンパイル可能なコードにするというタスクがあっただけで、環境や注文の操作に関するものは、上記のinkludniksの助けを借りて変換したり、別々の関数を取り出してそれぞれのプラットフォーム用に作り直したりしました。このプロジェクトは大規模になり、あなたのソリューションにとても助けられました。
以前、あなたのコードを考慮せずにトラバーサルを行いました(MQL4_To_MQL5.mqhはあなたのコードではありませんか?
それともMQL4_To_MQL5.mqhがあなたのコードではないのですか?
私のコードですが、かなり古いものです。Kimのmqhを調べた方がいい。MarketInfoのためのもっと精巧なソリューションがある。