カスタムシンボル。エラー、バグ、質問、提案。 - ページ 13 1...67891011121314151617181920...34 新しいコメント Slava 2019.06.07 05:54 #121 fxsaber:さらに、00:00:01であれば、CustomTicksAddで2秒前にあったバーを再形成することはできません。もちろん、無理です。なぜなら、00:00:01に到着したティックは、すでに次のバーを形成しているはずだからです。通常の場合 fxsaber 2019.06.07 06:04 #122 Slava:テスターにとっては、一昨日のティックが今日の新鮮なティックとなります。 言いたいことはわかります。半年前のカスタムティックを使ったエクササイズは、テスターらしい内容になっていますね。あなたの状況は(一般的な意味での)普通ではないカスタム品の規格外使用については。さまざまな状況における特殊性を見極め、それを解決しようとするのが議論というものです。 fxsaber 2019.06.07 06:07 #123 Slava:もちろん、これではうまくいきません。なぜなら、00:00:01 に入ってくるティックは、すでに次のバーを形成しているはずだからです。通常の場合秒単位でティックをタイムアウトさせるサービスを想像してみてください(通常、数式で行うように、100ms以下かもしれません)。そして、真夜中になると、バーはその日の最後のティックを失うことが多いのです。 fxsaber 2019.06.07 06:19 #124 バグ16。 M1バーはあるが、他のタイムフレームが表示されない。 どうすれば皮肉な再現ができるのか......わからない。 Slava 2019.06.07 13:03 #125 fxsaber: バグ16。 M1バーはあるが、他のタイムフレームが表示されない。 再現の仕方がわからない。 そのバーは、秒数が0でないものではないのですか? fxsaber 2019.06.07 13:15 #126 Slava: 秒数が0でない時間を持つバーではないですか?EURUSDでは実際のティックがあり、バーは通常(1分の倍数)です。 M1以外の期間では安定的に問題が発生しました。そのため、映像は問題なく収録できました。 しかし、しばらくすると問題が再生されなくなった。このシンボルは、このブランチのExpert Advisorによって作成さ れたものです。 fxsaber 2019.06.11 18:48 #127 バグ17。 ダニの話は 完全に消えます。 #define PRINT(A) Print(#A + " = " + (string)(A)) #define SIZE 100 void OnStart() { MathSrand((uint)TimeLocal()); const string Name = _Symbol + (string)MathRand(); MqlTick Ticks[]; PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ. PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, D'2019.06.01' * 1000)); // Взяли тики PRINT(ArrayResize(Ticks, SIZE)); // Оставили только SIZE-тиков PRINT(CustomTicksAdd(Name, Ticks)); // Пробросили их все MqlTick NewTicks[]; PRINT(CopyTicksRange(Name, NewTicks)); // Взяли тики, что в истории // PRINT(CustomTicksReplace(Name, 0, LONG_MAX, NewTicks)); // И перезаписали их. PRINT(CopyTicksRange(Name, Ticks)); // Убедились, что тиков в истории ровно SIZE PRINT(CustomTicksDelete(Name, Ticks[SIZE - 1].time_msc - 60 * 1000, LONG_MAX)); // Удалили последнюю минуту PRINT(CopyTicksRange(Name, Ticks)); // Убедились, что тиков стало меньше на удаленное количество } 結果 CustomSymbolCreate(Name,NULL,_Symbol) = true SymbolSelect(Name,true) = true CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,D'2019.06.01'*1000) = 533797 ArrayResize(Ticks,100) = 100 CustomTicksAdd(Name,Ticks) = 100 CopyTicksRange(Name,Ticks) = 100 CustomTicksDelete(Name,Ticks[100-1].time_msc-60*1000,LONG_MAX) = 1 CopyTicksRange(Name,Ticks) = 0 下線部のコメントを削除すると、スクリプトは正常に動作します。どうやら、古いAdd-typesはReplace-typesが行く場所には行かないようです。 fxsaber 2019.06.11 19:42 #128 バグ18。 ティックが削除されると、最後のバーが失われます。 #define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { MathSrand((uint)TimeLocal()); const string Name = _Symbol + (string)MathRand(); MqlTick Ticks[]; PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ. PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка PRINT(CopyTicks(_Symbol, Ticks)); // Взяли тики PRINT(CustomTicksReplace(Name, 0, LONG_MAX, Ticks)); // Записали их. PRINT(CustomTicksDelete(Name, Ticks[ArraySize(Ticks) - 1].time_msc - 60 * 1000, LONG_MAX)); // Удалили последнюю минуту MqlTick LastTick[1]; PRINT(CopyTicks(Name, LastTick, COPY_TICKS_ALL, 0, 1)); // Распечатали последний тик ArrayPrint(LastTick); MqlRates LastBar[1]; PRINT(CopyRates(Name, PERIOD_M1, 0, 1, LastBar)); // Распечатали последний бар ArrayPrint(LastBar); } 結果 CustomSymbolCreate(Name,NULL,_Symbol) = true SymbolSelect(Name,true) = true CopyTicks(_Symbol,Ticks) = 2000 CustomTicksReplace(Name,0,LONG_MAX,Ticks) = 2000 CustomTicksDelete(Name,Ticks[ArraySize(Ticks)-1].time_msc-60*1000,LONG_MAX) = 25 CopyTicks(Name,LastTick,COPY_TICKS_ALL,0,1) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [0] 2019.06.11 22:37:42 1.13284 1.13288 0.0000 0 1560292662809 6 0.00000 CopyRates(Name,PERIOD_M1,0,1,LastBar) = 1 [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2019.06.11 22:36:00 1.13278 1.13284 1.13278 1.13279 13 3 0 fxsaber 2019.06.12 00:24 #129 バグ19。 スプレッドの計算が正しくない。 #define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { MathSrand((uint)TimeLocal()); const string Name = _Symbol + (string)MathRand(); PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ. PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка MqlTick Tick[1]; if (SymbolInfoTick(_Symbol, Tick[0])) { // Специально задаем отрицательный спред. Tick[0].bid = 1.11643; Tick[0].ask = 1.11632; PRINT(CustomTicksAdd(Name, Tick)); // Пробросили тик. PRINT(SymbolInfoInteger(Name, SYMBOL_SPREAD)); // Смотрим его спред. ArrayPrint(Tick); // Смотрим сам тик. } } 結果 CustomSymbolCreate(Name,NULL,_Symbol) = true SymbolSelect(Name,true) = true CustomTicksAdd(Name,Tick) = 1 SymbolInfoInteger(Name,SYMBOL_SPREAD) = -10 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [0] 2019.06.03 00:32:11 1.11643 1.11632 0.0000 0 1559521931040 6 0.00000 Roman 2019.06.15 21:35 #130 バグ20.バグから削除されました。解決策は以下のブランチにあります。 2085カスタムシンボルプロパティの 設定が正しくありません。 結果にずれが生じている。 プロパティは、いずれかのオプションにしたがって設定されました。 CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_FOK); Результат: Filling == None или CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_IOC); Результат: Filling == Fill or Kill или CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_RETURN); Результат: Filling == Immediate or Cancel 1...67891011121314151617181920...34 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
さらに、00:00:01であれば、CustomTicksAddで2秒前にあったバーを再形成することはできません。
もちろん、無理です。なぜなら、00:00:01に到着したティックは、すでに次のバーを形成しているはずだからです。通常の場合
テスターにとっては、一昨日のティックが今日の新鮮なティックとなります。
言いたいことはわかります。半年前のカスタムティックを使ったエクササイズは、テスターらしい内容になっていますね。あなたの状況は(一般的な意味での)普通ではない
カスタム品の規格外使用については。さまざまな状況における特殊性を見極め、それを解決しようとするのが議論というものです。
もちろん、これではうまくいきません。なぜなら、00:00:01 に入ってくるティックは、すでに次のバーを形成しているはずだからです。通常の場合
秒単位でティックをタイムアウトさせるサービスを想像してみてください(通常、数式で行うように、100ms以下かもしれません)。そして、真夜中になると、バーはその日の最後のティックを失うことが多いのです。
バグ16。
M1バーはあるが、他のタイムフレームが表示されない。
![](https://c.mql5.com/3/281/clip0143.gif)
どうすれば皮肉な再現ができるのか......わからない。バグ16。
M1バーはあるが、他のタイムフレームが表示されない。
再現の仕方がわからない。秒数が0でない時間を持つバーではないですか?
EURUSDでは実際のティックがあり、バーは通常(1分の倍数)です。
M1以外の期間では安定的に問題が発生しました。そのため、映像は問題なく収録できました。
しかし、しばらくすると問題が再生されなくなった。このシンボルは、このブランチのExpert Advisorによって作成さ れたものです。
バグ17。
ダニの話は 完全に消えます。
結果
下線部のコメントを削除すると、スクリプトは正常に動作します。どうやら、古いAdd-typesはReplace-typesが行く場所には行かないようです。
バグ18。
ティックが削除されると、最後のバーが失われます。
結果
バグ19。
スプレッドの計算が正しくない。
結果
バグ20.バグから削除されました。解決策は以下のブランチにあります。
2085
カスタムシンボルプロパティの 設定が正しくありません。
結果にずれが生じている。
プロパティは、いずれかのオプションにしたがって設定されました。