エラー、バグ、質問 - ページ 2930 1...292329242925292629272928292929302931293229332934293529362937...3185 新しいコメント Vitaly Muzichenko 2020.12.26 05:34 #29291 mt4からmt5へのインジケータの変換 DRAW_HISTOGRAMの サイズに問題があります。 1」「2」とするとサイズが変わるのですが、「3」「4」=サイズは「2」のままです。 なぜMT4ではすべてうまくいくのに、MT5ではこんなにも問題があるのでしょうか? #property indicator_separate_window #property indicator_plots 4 #property indicator_buffers 4 #property indicator_color1 clrDodgerBlue #property indicator_color2 clrDodgerBlue #property indicator_color3 clrLimeGreen #property indicator_color4 clrFireBrick #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 3 mt4 の結果 mt5での結果、設定で "3 "にしているのに、"2 "の厚さしか表示されない。 OnInit()でプロパティを設定しても、うまくいきません。 PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3); Aliaksandr Hryshyn 2020.12.27 14:04 #29292 デバッグ中に重大なエラーが 発生しました。struct sA { int i; string s; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class cA { public: sA my_array[]; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { cA *ca; ca=new cA(); ArrayResize(ca.my_array,1); ZeroMemory(ca.my_array); ArrayPrint(ca.my_array); }結果2020.12.27 17:04:26.966 1 (EURUSD,M1) Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5' 2020.12.27 17:04:26.967 1 (EURUSD,M1) crash --> 000001FE5AF10199 8B4318 mov eax, [rbx+0x18] 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF1019C 4089442420 mov [rsp+0x20], eax 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101A1 41B910000000 mov r9d, 0x10 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101A7 49B8B807F15AFE01 mov r8, 0x1fe5af107b8 2020.12.27 17:04:26.967 1 (EURUSD,M1) 0000 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101B1 488D17 lea rdx, [rdi] 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101B4 48B998D45F5FFE01 mov rcx, 0x1fe5f5fd498 2020.12.27 17:04:26.967 1 (EURUSD,M1) 0000 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101BE 49FF96A8120000 call qword near [r14+0x12a8] ; #11378 (terminal64.exe) 2020.12.27 17:04:26.967 1 (EURUSD,M1) 2020.12.27 17:04:26.967 1 (EURUSD,M1) 00: 0x000001FE5AF10199 2020.12.27 17:04:26.967 1 (EURUSD,M1) 01: 0x000001FE633F0010 2020.12.27 17:04:26.967 1 (EURUSD,M1) 現時点での最新ベータ版 Документация по MQL5: Программы MQL5 / Ошибки выполнения www.mql5.com Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Stanislav Korotky 2020.12.27 15:06 #29293 メインウィンドウやサブウィンドウにプロパティを表示するためのインジケータハンドルを取得する方法を見つけた方はいらっしゃいますか?IndicatorCreateを使用して作成され、ユーザーの要求に応じてChartIndicatorAddを 使用してチャートに追加できる任意のサードパーティーインジケーターのことを話しているのです。 fxsaber 2020.12.27 17:40 #29294 Stanislav Korotky: メインウィンドウやサブウィンドウにインジケータハンドルのプロパティを表示させる方法を考え出した方はいらっしゃいますか?IndicatorCreateで作成したカスタム・インジケータをChartIndicatorAddでチャートに追加する方法についてです。 OBJ_CHARTに インジケータを突っ込んで、その位置を確認することも可能でしょう。 Nikolai Semko 2020.12.27 22:34 #29295 Stanislav Korotky: メインウィンドウやサブウィンドウのインジケータハンドルから表示プロパティを取得する方法を見つけた方はいらっしゃいますか?IndicatorCreateで作成したカスタム・インジケータをChartIndicatorAddでチャートに追加する方法についてです。 が似たようなことをやっていました。 私が見つけたのはこちらです。効果があるかどうか覚えていない。ぜひご覧ください。bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) { long chart_id =ChartFirst(); while (chart_id!=-1) { int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL); int total_ind; for(int i=0; i<total_sub; i++) { total_ind = ChartIndicatorsTotal(chart_id,i); for (int j=0; j<total_ind; j++) { string name = ChartIndicatorName(chart_id,i,j); if (ChartIndicatorGet(chart_id,i,name)== handle) { ChartId=chart_id; symbol= ChartSymbol(chart_id); timeframe=ChartPeriod(chart_id); sub_win=i; Name=name; return true; } } } chart_id=ChartNext(chart_id); } return false; } このコードは、あるインジケータのハンドルによって、開いているすべてのチャートを検索します。シンボル、タイムフレーム、チャートID、サブウィンドウ、インジケータ名を返します。 Stanislav Korotky 2020.12.28 11:46 #29296 fxsaber:OBJ_CHARTに インジケータを入れて、その位置を確認すればいいんでしょうね。 試してみます!とりあえず、ユーザーで指定するオプションを作る必要がありました。 Stanislav Korotky 2020.12.28 11:51 #29297 Nikolai Semko:が似たようなことをやっていました。 私が見つけたのはこちらです。効果があるかどうか覚えていない。ぜひご覧ください。 コードから判断すると、開いているすべてのチャートからハンドル名でインジケータを検索しています。シンボル、タイムフレーム、チャートID、サブウィンドウ、インジケータ名を返します。 IndicatorCreateで作成されたインジケータはウィンドウに配置されるのではなく、ウィンドウの中に「座る」のであり、タスクはウィンドウにそのハンドルによってそのようなインジケータを配置することである。さて、MQL5では、ChartIndicatorAdd関数を使って メインウィンドウやサブウィンドウに、インジケータの「プロパティ」に関係なく、任意のハンドルを追加することができますが(エラーなし!)、意図した通りに追加されないと、非常におかしな結果になるようです。 Stanislav Korotky 2020.12.28 14:13 #29298 指標にはもっと大きな問題があるんです。 中には、1つの入力配列で簡易版に従ってOnCalculateハンドラを実装し、その計算のために価格タイプを選択できるものもあります。サードパーティのMQL5プログラムから、インジケータがこの価格タイプを期待していることをどうやって知ることができますか?これは、インジケータの作成時にすべてのパラメータの後に渡さなければなりません。どうにもならないようです。また、そうでない場合は、外部からアクセスできない#property indicator_applied_priceによってインジケータが描画されます。ここでは、プログラムによってチャートにインジケータ/AMAを追加する簡単なExpert Advisorを紹介します。 int OnInit() { const int h = iCustom(NULL, 0, "Examples/AMA"); if(h == INVALID_HANDLE) { Print("iCustom failed: ", _LastError); return INIT_FAILED; } if(!ChartIndicatorAdd(0, 0, h)) { Print("ChartIndicatorAdd failed: ", _LastError); return INIT_FAILED; } ChartRedraw(); return INIT_SUCCEEDED; } 1つは終値(プログラムで作成)、もう1つは始値(タイムフレームの変更と#property indicator_applied_price PRICE_OPENにより作成。) Stanislav Korotky 2020.12.28 18:44 #29299 インジケーターのテーマの続きとして、私がMqlParamパラメータの問題を発見し回避するために使用したExpert Advisorを添付します。 Expert Advisorの仕事は、"Examples/Price_Channel "というインジケータがまだない場合、同じパラメータでチャートに追加することです。 そのために、iCustom/IndicatorCreateを使ってインスタンスを作成し、IndicatorParametersを通してそのパラメータの配列を取得し、その後、チャートに既に存在するインディケータに対してループでIndicatorParametersを呼び出します:配列のパラメータに一致するものがない場合、そのインディケータはチャートに加えられ、もし、一致しているなら新しいハンドルは単に破壊されるだけです。 問題は、パラメータの等価性が必ずしも期待通りに働かないことです。特に、このようなフェイルセーフのテストケースがあります。空のチャートにExpert Advisorを配置し、クリックすると、インジケータの最初のインスタンスが作成されます。そして、他のチャートのタイムフレームに切り替え(古いインジケータは残る)、再度クリックします。不思議なことに、2つ目のインジケータのインスタンスが作成されます。 実行とログの分析から、これはパラメータ内のインジケータ名の文字列が誤って等化されていることが原因であることが明らかです。そこにある文字列は260文字だが、端末0はもっと前に位置している。そのあとは、サービス情報か、ゴミのようなものです。そこで、文字列の比較"=="あるいはStringCompareは、この "ゴミ "を考慮に入れて、文字列の不等号を得ることになる。 文字列をchar配列に 変換すると、配列は完全一致になる。短い配列に変換すると、ゴミになる。全体として、ドキュメントに記載されていない非整合的な動作がある。 Window N: 1 0, Price Channel(22), 12 [type] [integer_value] [double_value] [string_value] [0] 14 0 0.000 "Indicators\Examples/Price_Channel" [1] 7 22 0.000 null ind1: 'Indicators\Examples/Price_Channel ind2: 'Indicators\Examples/Price_Channel 260 0 / 260 0 Char arrays 34 34 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 101 95 67 104 97 110 110 101 108 0 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 101 95 67 104 97 110 110 101 108 0 Short arrays 260 260 [ 0] 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 [ 24] 101 95 67 104 97 110 110 101 108 0 103 110 97 108 0 0 0 0 0 0 0 0 0 0 [ 48] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 72] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 96] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [120] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [144] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [168] 0 0 0 0 0 0 0 0 0 0 0 0 13 3328 58074 86 13696 54 0 0 35120 3210 0 0 [192] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [216] 0 0 0 0 61841 38184 17648 16370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [240] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 0] 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 [ 24] 101 95 67 104 97 110 110 101 108 0 103 110 97 108 0 32 32 77 32 65 32 82 32 75 [ 48] 32 83 0 32 99 111 109 109 97 32 115 101 112 97 114 97 116 101 100 32 108 105 115 116 [ 72] 41 0 32 112 114 111 116 111 116 121 112 101 115 41 0 0 115 0 0 0 0 0 0 0 [ 96] 528 0 0 0 0 45 0 0 3 0 0 0 512 0 0 0 1160 45 0 0 7256 30655 0 0 [120] 0 0 0 0 512 0 0 0 0 65535 2272 0 29648 45 0 0 0 0 0 0 0 0 0 0 [144] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [168] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [192] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [216] 3 0 0 0 26341 16284 1 0 1308 16 0 0 49814 30635 0 0 0 0 0 0 32016 37 0 0 [240] 2 0 0 0 50336 16481 1 0 2 0 0 0 3 0 0 0 45520 37 0 0 1 0 MQLの文字列処理の原理に問題があるのか、それとも別の問題なのか、具体的にどのようなバグがあるのかよくわかりません。 ニュアンスをご存知の方がいらっしゃいましたら、ヒントをお願いします。 ファイル: Indicator1.mq5 4 kb fxsaber 2020.12.28 19:17 #29300 Stanislav Korotky:ニュアンスをご存知の方がいらっしゃいましたら、ヒントをお願いします。 知っていても、頭の中で全レイヤーをもう一度呼び起こさなければならないような機能です。 ここで、セルフアベイラビリティーの定義がありました。TFを切り替えても効果があるようでした。 Init_Sync www.mql5.com Библиотека делает синхронизированными Init/Deinit индикаторов 1...292329242925292629272928292929302931293229332934293529362937...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
mt4からmt5へのインジケータの変換
DRAW_HISTOGRAMの サイズに問題があります。
1」「2」とするとサイズが変わるのですが、「3」「4」=サイズは「2」のままです。
なぜMT4ではすべてうまくいくのに、MT5ではこんなにも問題があるのでしょうか?
mt4 の結果
mt5での結果、設定で "3 "にしているのに、"2 "の厚さしか表示されない。
OnInit()でプロパティを設定しても、うまくいきません。
PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3);
デバッグ中に重大なエラーが 発生しました。
結果
現時点での最新ベータ版メインウィンドウやサブウィンドウにインジケータハンドルのプロパティを表示させる方法を考え出した方はいらっしゃいますか?IndicatorCreateで作成したカスタム・インジケータをChartIndicatorAddでチャートに追加する方法についてです。
OBJ_CHARTに インジケータを突っ込んで、その位置を確認することも可能でしょう。
メインウィンドウやサブウィンドウのインジケータハンドルから表示プロパティを取得する方法を見つけた方はいらっしゃいますか?IndicatorCreateで作成したカスタム・インジケータをChartIndicatorAddでチャートに追加する方法についてです。
が似たようなことをやっていました。
このコードは、あるインジケータのハンドルによって、開いているすべてのチャートを検索します。シンボル、タイムフレーム、チャートID、サブウィンドウ、インジケータ名を返します。私が見つけたのはこちらです。効果があるかどうか覚えていない。ぜひご覧ください。
OBJ_CHARTに インジケータを入れて、その位置を確認すればいいんでしょうね。
試してみます!とりあえず、ユーザーで指定するオプションを作る必要がありました。
が似たようなことをやっていました。
コードから判断すると、開いているすべてのチャートからハンドル名でインジケータを検索しています。シンボル、タイムフレーム、チャートID、サブウィンドウ、インジケータ名を返します。私が見つけたのはこちらです。効果があるかどうか覚えていない。ぜひご覧ください。
IndicatorCreateで作成されたインジケータはウィンドウに配置されるのではなく、ウィンドウの中に「座る」のであり、タスクはウィンドウにそのハンドルによってそのようなインジケータを配置することである。さて、MQL5では、ChartIndicatorAdd関数を使って メインウィンドウやサブウィンドウに、インジケータの「プロパティ」に関係なく、任意のハンドルを追加することができますが(エラーなし!)、意図した通りに追加されないと、非常におかしな結果になるようです。
指標にはもっと大きな問題があるんです。
中には、1つの入力配列で簡易版に従ってOnCalculateハンドラを実装し、その計算のために価格タイプを選択できるものもあります。サードパーティのMQL5プログラムから、インジケータがこの価格タイプを期待していることをどうやって知ることができますか?これは、インジケータの作成時にすべてのパラメータの後に渡さなければなりません。どうにもならないようです。また、そうでない場合は、外部からアクセスできない#property indicator_applied_priceによってインジケータが描画されます。ここでは、プログラムによってチャートにインジケータ/AMAを追加する簡単なExpert Advisorを紹介します。
1つは終値(プログラムで作成)、もう1つは始値(タイムフレームの変更と#property indicator_applied_price PRICE_OPENにより作成。)
インジケーターのテーマの続きとして、私がMqlParamパラメータの問題を発見し回避するために使用したExpert Advisorを添付します。
Expert Advisorの仕事は、"Examples/Price_Channel "というインジケータがまだない場合、同じパラメータでチャートに追加することです。
そのために、iCustom/IndicatorCreateを使ってインスタンスを作成し、IndicatorParametersを通してそのパラメータの配列を取得し、その後、チャートに既に存在するインディケータに対してループでIndicatorParametersを呼び出します:配列のパラメータに一致するものがない場合、そのインディケータはチャートに加えられ、もし、一致しているなら新しいハンドルは単に破壊されるだけです。
問題は、パラメータの等価性が必ずしも期待通りに働かないことです。特に、このようなフェイルセーフのテストケースがあります。空のチャートにExpert Advisorを配置し、クリックすると、インジケータの最初のインスタンスが作成されます。そして、他のチャートのタイムフレームに切り替え(古いインジケータは残る)、再度クリックします。不思議なことに、2つ目のインジケータのインスタンスが作成されます。
実行とログの分析から、これはパラメータ内のインジケータ名の文字列が誤って等化されていることが原因であることが明らかです。そこにある文字列は260文字だが、端末0はもっと前に位置している。そのあとは、サービス情報か、ゴミのようなものです。そこで、文字列の比較"=="あるいはStringCompareは、この "ゴミ "を考慮に入れて、文字列の不等号を得ることになる。
文字列をchar配列に 変換すると、配列は完全一致になる。短い配列に変換すると、ゴミになる。全体として、ドキュメントに記載されていない非整合的な動作がある。
MQLの文字列処理の原理に問題があるのか、それとも別の問題なのか、具体的にどのようなバグがあるのかよくわかりません。
ニュアンスをご存知の方がいらっしゃいましたら、ヒントをお願いします。
ニュアンスをご存知の方がいらっしゃいましたら、ヒントをお願いします。
知っていても、頭の中で全レイヤーをもう一度呼び起こさなければならないような機能です。
ここで、セルフアベイラビリティーの定義がありました。TFを切り替えても効果があるようでした。