MT4からMT5への乗り換えの問題。正確には、MT5で一部のアルゴリズムをerrなしで実行できないことです。 - ページ 10 1...3456789101112 新しいコメント Igor Makanu 2019.07.31 11:05 #91 Vict: 不思議なんですが、今までやろうと思わなかったんです。 メモリ割り当ての ような大量のエラーチェックをなくすことができる。 オプションではなく、EAはチャートから削除され、プログラムの任意の場所から次のティックの前に "OSに終了 "する必要があります。 おそらく、現在のティックのデータが利用できないことに関連する関数を安全に呼び出すために、すべてをマクロでエレガントにラップすることが可能であり、ここでは "ダミー" です。 void OnStart() { for(int i=0;i<10;i++) { double o=Open(i); if(o>0.0) printf("%d : %f",i,o); else { printf("Error № %d ",(int)o); return; } } } //+------------------------------------------------------------------+ double Open(int shift) { ResetLastError(); double result=iOpen(NULL,0,shift); int err=GetLastError(); if(err>0) result=-err; return(result); } //+------------------------------------------------------------------+ というのは、コードの可読性を考えると、そのように書くのがいいと思うんです。 void OnStart() { for(int i=0;i<10;i++) { double o=Try( Open(i),"Текст сообщения" ); printf("%d : %f",i,o); } } このTryは、現実的にはマクロで包んで、失敗した場合は「OSに抜ける」のでしょうか? 削除済み 2019.07.31 11:41 #92 Igor Makanu: は、このTryをマクロに包んで、失敗した場合に「OSに抜ける」のが現実的でしょうか? #define Try(VAR, EXPR, MES) \ VAR = EXPR; \ if (VAR <= 0.0) { \ printf("Error: %s ", MES); \ return; \ } double o; Try(o, Open(i), "something goes wrong"); ダメ? 私はよく、関数の最初にいろいろなミニマムを書き、最後にundefineを書きます。当然ながら、アクションが頻繁に繰り返されるのであれば、そうでなければ意味がない。 #define MYERR_HANDLER(INDEX) \ { \ Alert(__FILE__, " ", __LINE__, "-", INDEX, ": error"); \ this.state = obst_error; \ return obev_no_event; \ } 中絶についても誤解がある、エラーによっては完璧だ。 Igor Makanu 2019.07.31 11:46 #93 Vict: ダメ? やった! が、理想はその代わりに欲しいです。 double o; Try(o, Open(i), "something goes wrong"); このように double o = Try(Open(i), "something goes wrong"); Open()関数のシグネチャを変えればいいという問題ではないのです......。でも、この形なら本当に欲しいものが手に入る!;) ---------------------- 追記: オプションとして、グローバルに記述された変数 Tryerror または bool Tryresult でもかまいません。 削除済み 2019.07.31 11:52 #94 Igor Makanu: このように プラスでも可能かどうか疑問です(例外を投げ入れることはできますが、可能性は低いでしょう)。でも、いろいろなことが起こるから、もしかしたら誰かが驚いてくれるかもしれない・・・。 削除済み 2019.07.31 12:26 #95 だから、ぱっと見で Try(double, o, Open(i), "something goes wrong"); というのが、この状況での最大値でしょう。 削除済み 2019.07.31 12:47 #96 まったくもって馬鹿だなぁ、できるんだろうなぁ。 double Try_helper; #define Try(EXPR, MES) \ Try_helper = EXPR; \ if (Try_helper <= 0.0) { \ printf("Error: %s ", MES); \ return; \ } double o = Try(Open(i), "something goes wrong"); コンパイルはしていませんが、動作するはずです。 Igor Makanu 2019.07.31 13:01 #97 Vict: 私、バカだから仕方ないよね。 コンパイルはしていませんが、動作するはずです。 マシンのシャイターン!!!うまくいった!!! チェックとシミュレーションエラー ( shift>5 ) double Try_helper; #define Try(EXPR, MES) \ Try_helper = EXPR; \ if (Try_helper <= 0.0) { \ printf("Error: %s ", MES); \ return; \ } void OnStart() { for(int i=0;i<10;i++) { double o = Try(Open(i), "something goes wrong"); printf("%d : %f",i,o); } } //+------------------------------------------------------------------+ double Open(int shift) { ResetLastError(); double result=iOpen(NULL,0,shift); int err=GetLastError()>0; if(err>0) result=-err; if(shift>5) result = -999; return(result); } //+------------------------------------------------------------------+ 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 0 : 1.115010 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 1 : 1.114670 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 2 : 1.114590 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 3 : 1.114400 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 4 : 1.115240 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 5 : 1.115450 2019.07.31 16:58:48.154 tst1 (EURUSD,H1) Error: Something goes wrong. すごい!マクロのコードもとてもシンプルになりました。 ありがとうございました。- あなたは間違いなくマジシャンです!(笑) The problem of transferring Weekly performance Any questions from newcomers 削除済み 2019.07.31 14:24 #98 どうぞ、お気軽にご利用ください。 上のマクロには欠点があります。ヘルパーの型がハードコードされているため、文字列を返す Try 関数に、2 つのマクロを作らないと double を渡すことができません。私はスポーツに興味を持ちました - それを回避する方法(すべてのタイプに対して1つのマクロを記述すること。オプションなしのµlでは、c++では、そこは本当に必要ではありませんが、それでも)?誰も自分のバリエーションを提案しようとしないのか(まあ、結局のところ、自分の体調を維持する必要があるのだが)。 Igor Makanu 2019.07.31 14:56 #99 Vict: ぜひ使ってみてください。 上のマクロには欠点があります。ヘルパーの型がハードウエア化されているため、文字列を返す関数を Try なぜダメかというと、+記号が解除されていないのです このように、あなたのマクロを梳かし、どのように使おうとしているのか。 int _GetLastError; double _Try_helper; string _Try_FUNCSIG; #define Try(FUNC,MSG, EXCEPT) _Try_helper=FUNC;if(_GetLastError>0){printf("%s : error № %d %s ",_Try_FUNCSIG,_GetLastError,MSG);EXCEPT;} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { for(int i=0;i<10;i++) { double o = Try(Open(i), "something goes wrong"+Txt(),return); printf("%d : %f",i,o); } } //+------------------------------------------------------------------+ double Open(int shift) { _Try_FUNCSIG=__FUNCSIG__; ResetLastError(); double result=iOpen(NULL,0,shift); _GetLastError=GetLastError(); if(shift>5)_GetLastError=999; return(result); } //+------------------------------------------------------------------+ string Txt() { return(" Txt "); マクロのパラメータEXCEPT が例外処理となり、ログに出力しない場合は return または ; - として動作しますが、OnTick() のボディを残しません。 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 0 : 1.113350 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 1 : 1.114180 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 2 : 1.115110 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 3 : 1.115010 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 4 : 1.114670 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 5 : 1.114590 2019.07.31 19:01:28.353 tst1 (EURUSD,H1) double Open(int) : error #999 something goes wrong Txt. The problem of transferring 10points 3.mq4 OrdersTotal in MQL5 削除済み 2019.07.31 15:37 #100 Igor Makanu: まあ、つまり、こういうことです。 string f(int) {return "hello world";} double f(double) {return 35;} int main() { double d = Try(f(0.), "double error"); string s = Try(f(0), "stirng error"); cout << s << "-" << d << endl; // hello world-35 return 0; } ここの人たちはギャンブルをしないようです。おいおい、どうしたんだ。 template <typename T> T Try_helper; #define Try(EXPR, MES) \ Try_helper<decltype(EXPR)> = EXPR; \ if (Try_helper<decltype(EXPR)> == decltype(EXPR){}) {\ printf("%s\n", MES); \ return 1; \ } 1...3456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
不思議なんですが、今までやろうと思わなかったんです。
メモリ割り当ての ような大量のエラーチェックをなくすことができる。
オプションではなく、EAはチャートから削除され、プログラムの任意の場所から次のティックの前に "OSに終了 "する必要があります。
おそらく、現在のティックのデータが利用できないことに関連する関数を安全に呼び出すために、すべてをマクロでエレガントにラップすることが可能であり、ここでは "ダミー" です。
というのは、コードの可読性を考えると、そのように書くのがいいと思うんです。
このTryは、現実的にはマクロで包んで、失敗した場合は「OSに抜ける」のでしょうか?
は、このTryをマクロに包んで、失敗した場合に「OSに抜ける」のが現実的でしょうか?
ダメ?
私はよく、関数の最初にいろいろなミニマムを書き、最後にundefineを書きます。当然ながら、アクションが頻繁に繰り返されるのであれば、そうでなければ意味がない。
中絶についても誤解がある、エラーによっては完璧だ。
ダメ?
やった!
が、理想はその代わりに欲しいです。
このように
Open()関数のシグネチャを変えればいいという問題ではないのです......。でも、この形なら本当に欲しいものが手に入る!;)
----------------------
追記: オプションとして、グローバルに記述された変数 Tryerror または bool Tryresult でもかまいません。
このように
プラスでも可能かどうか疑問です(例外を投げ入れることはできますが、可能性は低いでしょう)。でも、いろいろなことが起こるから、もしかしたら誰かが驚いてくれるかもしれない・・・。
だから、ぱっと見で
というのが、この状況での最大値でしょう。
まったくもって馬鹿だなぁ、できるんだろうなぁ。
コンパイルはしていませんが、動作するはずです。
私、バカだから仕方ないよね。
コンパイルはしていませんが、動作するはずです。
マシンのシャイターン!!!うまくいった!!!
チェックとシミュレーションエラー ( shift>5 )
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 0 : 1.115010
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 1 : 1.114670
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 2 : 1.114590
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 3 : 1.114400
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 4 : 1.115240
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) 5 : 1.115450
2019.07.31 16:58:48.154 tst1 (EURUSD,H1) Error: Something goes wrong.
すごい!マクロのコードもとてもシンプルになりました。
ありがとうございました。- あなたは間違いなくマジシャンです!(笑)
どうぞ、お気軽にご利用ください。
上のマクロには欠点があります。ヘルパーの型がハードコードされているため、文字列を返す Try 関数に、2 つのマクロを作らないと double を渡すことができません。私はスポーツに興味を持ちました - それを回避する方法(すべてのタイプに対して1つのマクロを記述すること。オプションなしのµlでは、c++では、そこは本当に必要ではありませんが、それでも)?誰も自分のバリエーションを提案しようとしないのか(まあ、結局のところ、自分の体調を維持する必要があるのだが)。
ぜひ使ってみてください。
上のマクロには欠点があります。ヘルパーの型がハードウエア化されているため、文字列を返す関数を Try
なぜダメかというと、+記号が解除されていないのです
このように、あなたのマクロを梳かし、どのように使おうとしているのか。
マクロのパラメータEXCEPT が例外処理となり、ログに出力しない場合は return または ; - として動作しますが、OnTick() のボディを残しません。
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 0 : 1.113350
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 1 : 1.114180
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 2 : 1.115110
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 3 : 1.115010
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 4 : 1.114670
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) 5 : 1.114590
2019.07.31 19:01:28.353 tst1 (EURUSD,H1) double Open(int) : error #999 something goes wrong Txt.
まあ、つまり、こういうことです。
ここの人たちはギャンブルをしないようです。おいおい、どうしたんだ。