MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 957 1...950951952953954955956957958959960961962963964...1953 新しいコメント Artyom Trishkin 2019.08.31 17:53 #9561 Igor Kryuchkov: Ctrl+B --> "All "ボタン - オブジェクトは1つです。問 題は、Canvasを使わずに通常の方法でRECTANGLEを作成 した場合です。適切な数のRECTANGLEオブジェクトが 作成されます。 Canvasでは、1つしか作れないんです。なぜ、そんなふうになるのでしょうか。RECTANGLE ごとにユニークな 名前を作っています。 もちろん、プログラマーにも感謝です。 自分の名前がユニークだと思う理由は何ですか?新しいオブジェクトを作成する前に確認しましたか?また、オブジェクトの作成 結果は確認していますか?この場合のエラーコードは何ですか? Igor Kryuchkov 2019.08.31 17:57 #9562 Artyom Trishkin: 完全に再現可能なコードがない - 具体的な議論ができない。そこで何をしたのかわからない。最も単純なことから、ある種の問題を作り出してしまったのですね。 #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #include <Canvas\Canvas.mqh> CCanvas C; int History = 5000; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int BarsCounted = IndicatorCounted(); if (BarsCounted < 0) return (-1); if (BarsCounted > 0) BarsCounted--; int BarsTotal = Bars - BarsCounted; if( BarsTotal > History ) BarsTotal = History; for (int i = BarsTotal-1; i >=1 ; i--) { double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, i); if(rsi > 70 ) { C.CreateBitmap(0, 0, i, Time[i+5], Close[i+1], 50, 70,COLOR_FORMAT_ARGB_NORMALIZE); C.Rectangle(10, 40, 70, 80, ColorToARGB(clrRed,200)); C.Update(true); Print(i); } } //--- return value of prev_calculated for next call return(rates_total); } Rustam Bikbulatov 2019.08.31 17:57 #9563 Igor Kryuchkov: リスタートとはどういう意味ですか? グローバル変数 を使って、オーダーオープンの計算をしています。例えば5であれば、すでに5つの注文が開かれていて、6つ目の注文が上がるのを待っているということです。カウンタが5に設定された場合、すでに開いているにもかかわらず、5つの追加注文が開かれたことを意味します。ターミナルを閉じてから再度開いても同じことが起こります。どうすれば直るのか? Igor Kryuchkov 2019.08.31 18:01 #9564 Rustam Bikbulatov: グローバル変数 を使って、オーダーオープンの計算をしています。例えば5であれば、すでに5つの注文が開かれていて、6つ目の注文が上がるのを待っているということです。カウンタが5に設定された場合、すでに開いているにもかかわらず、5つの追加注文が開かれたことを意味します。ターミナルを閉じてから再度開いても同じことが起こります。どうすれば直るのか? int OnInit()関数では、グローバル変数の存在を確認し、存在していて0より大きい場合は0に設定します。 Artyom Trishkin 2019.08.31 18:02 #9565 Igor Kryuchkov: これって4点? Igor Kryuchkov 2019.08.31 18:03 #9566 Artyom Trishkin: 4倍なのか? そうそう、MQL4はCanvasについて質問したときに気づいたのですが Igor Kryuchkov 2019.08.31 18:42 #9567 Artyom Trishkin: これは4なのか? 4号機でも使えるはずだ。 Artyom Trishkin 2019.08.31 18:46 #9568 Igor Kryuchkov: 4でも使えるはずだ。 //+------------------------------------------------------------------+ //| Test.mq4 | //| Copyright 2019, Artem A. Trishkin, Skype artmedia70 | //| https://www.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, Artem A. Trishkin, Skype artmedia70" #property link "https://www.mql5.com/ru/users/artmedia70" #property version "1.00" #property strict #property indicator_chart_window #include <Arrays\ArrayObj.mqh> #include <Canvas\Canvas.mqh> class CCanvObj : public CObject { public: CCanvas m_canvas; }; int History = 5000; string prefix=MQLInfoString(MQL_PROGRAM_NAME)+"_"; CArrayObj list_canvas; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom deindicator initialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- indicator buffers mapping ObjectsDeleteAll(0,prefix); //--- return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Проверка и расчёт количества просчитываемых баров int limit=rates_total-prev_calculated; if(limit>1) { limit=rates_total-1; } //--- Цикл расчёта индикатора for(int i=fmin(limit,History); i>=0; i--) { double rsi=iRSI(NULL,PERIOD_CURRENT,14,PRICE_CLOSE,i); if(rsi>70) { //--- Создаём новый объект CCanvas CCanvObj *obj=new CCanvObj(); if(obj==NULL) continue; if(!list_canvas.Add(obj)) continue; string name=prefix+(string)i; //--- Создаём ресурс Bitmap с именем name if(obj.m_canvas.CreateBitmap(0,0,name,time[i+5],close[i+1],50,70,COLOR_FORMAT_ARGB_NORMALIZE)) { obj.m_canvas.Rectangle(0,0,49,69,ColorToARGB(clrRed,200)); obj.m_canvas.Update(true); } } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ Igor Kryuchkov 2019.08.31 22:09 #9569 Artyom Trishkin: ありがとうございます、すべてうまくいきました。 グラフを拡大縮小 するとき、矩形も小さくできるのでしょうか? スケールを追従しています。しかし、インジケータは新しいティックでしかそれを理解しない。 時には大きな遅れが生じることもあります。どうしたらいいのでしょうか? Artyom Trishkin 2019.08.31 22:15 #9570 Igor Kryuchkov: ありがとうございます、すべてうまくいきました。 グラフを拡大縮小 するとき、矩形も小さくできるのでしょうか? スケールを追従しています。しかし、インジケータは新しいティックでしかそれを理解しない。 時には大きな遅れが生じることもあります。どうすればいいのでしょうか? スケーリング時のリサイズを避けたかったのでは・・・。 OnChartEvent()はtick依存ではない 必要なチャートイベントが登録されたら、OnChartEvent() で作成したすべてのオブジェクトを更新します。そうでない場合は、新しいティックの時のみ更新されます。 1...950951952953954955956957958959960961962963964...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Ctrl+B --> "All "ボタン - オブジェクトは1つです。問 題は、Canvasを使わずに通常の方法でRECTANGLEを作成 した場合です。適切な数のRECTANGLEオブジェクトが 作成されます。
Canvasでは、1つしか作れないんです。なぜ、そんなふうになるのでしょうか。RECTANGLE ごとにユニークな 名前を作っています。
もちろん、プログラマーにも感謝です。
自分の名前がユニークだと思う理由は何ですか?新しいオブジェクトを作成する前に確認しましたか?また、オブジェクトの作成 結果は確認していますか?この場合のエラーコードは何ですか?
完全に再現可能なコードがない - 具体的な議論ができない。そこで何をしたのかわからない。最も単純なことから、ある種の問題を作り出してしまったのですね。
リスタートとはどういう意味ですか?
グローバル変数 を使って、オーダーオープンの計算をしています。例えば5であれば、すでに5つの注文が開かれていて、6つ目の注文が上がるのを待っているということです。カウンタが5に設定された場合、すでに開いているにもかかわらず、5つの追加注文が開かれたことを意味します。ターミナルを閉じてから再度開いても同じことが起こります。どうすれば直るのか?
グローバル変数 を使って、オーダーオープンの計算をしています。例えば5であれば、すでに5つの注文が開かれていて、6つ目の注文が上がるのを待っているということです。カウンタが5に設定された場合、すでに開いているにもかかわらず、5つの追加注文が開かれたことを意味します。ターミナルを閉じてから再度開いても同じことが起こります。どうすれば直るのか?
int OnInit()関数では、グローバル変数の存在を確認し、存在していて0より大きい場合は0に設定します。
4倍なのか?
そうそう、MQL4はCanvasについて質問したときに気づいたのですが
これは4なのか?
4でも使えるはずだ。
ありがとうございます、すべてうまくいきました。
グラフを拡大縮小 するとき、矩形も小さくできるのでしょうか?
スケールを追従しています。しかし、インジケータは新しいティックでしかそれを理解しない。
時には大きな遅れが生じることもあります。どうしたらいいのでしょうか?
ありがとうございます、すべてうまくいきました。
グラフを拡大縮小 するとき、矩形も小さくできるのでしょうか?
スケールを追従しています。しかし、インジケータは新しいティックでしかそれを理解しない。
時には大きな遅れが生じることもあります。どうすればいいのでしょうか?