ロボットの作成 - ページ 7

 
Vladimir M.:
普段はOnDeinitでハンドルと計算部分をクリアして、すべて削除しています。オブジェクトはインジケータではありません。

https://www.mql5.com/ru/docs/chart_operations/chartindicatordelete

"チャートからインジケータを削除しても、インジケータの計算部も端末メモリから削除されるわけではありませんインジケータハンドルを解放するには、IndicatorRelease() 関数を使用します。"

そう、ウラジミール、私はすでにそれをやって、以前にも書いたが、結果はやはり同じだったのだ。

ウラジミールさん、ありがとうございます。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

新型トレーディングロボット

MrBrooklinさん 2020.09.28 10:38

1時間以上、この問題を解いています。Expert Advisor起動時にZigZagColorインジケータを作成し、チャートに表示させたいと思いました。int OnInitで行われました。

   handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
                          Inp_ZZ_Depth,
                          Inp_ZZ_Deviation,
                          Inp_ZZ_Backstep);
   ChartIndicatorAdd(ChartID(),0,handle_iCustom);

インジケーターが作成され、表示されました。Expert Advisor を削除した後に、インジケータを削除する必要があります。書いているところです。

void OnDeinit(const int reason)
  {
//---
   IndicatorRelease(handle_iCustom);
   ObjectsDeleteAll(0,"Examples\\ZigzagColor");
  }

しかし、インジケーターが外れることはない。すべて整理しました。ハンドルの清掃と削除機能の適用を行いました。アンインストールできない原因は何なんだろう。

ウラジミールさん、ありがとうございます。


 
Alekseu Fedotov:

関数でチャートからインジケータを削除します。


ChartIndicatorDelete()

long chart_id, // チャートID

int sub_window // サブウィンドウの番号

const string indicator_shortname // 短いインジケータ名

);

Alexeyさん、ありがとうございます。明日、頭を冷やして試してみます。もう、情報が錯綜しています。よく言われるように、朝はぐっすり眠れそうです

今、もう一つ、戸惑いと驚きが 大きい。ウラジミール・カルプトフ氏が開発したスクリプトでチャートを消去しようとしましたが、このスクリプトはカスタムインジケーター ZigzagColor以外の全てを完全に削除してしまいました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?同じスクリプトでシンプルなZigZagを削除してみましたが、どちらも削除されません謎だ...。

ウラジミールさん、ありがとうございます。

 
MrBrooklin:

Alexeyさん、ありがとうございます!明日はもう情報が錯綜しているので、頭をクリアにしてやってみます。諺にもあるように、朝には賢くなるのです。

さて、もうひとつ、私が大いに戸惑い、 驚いたことがあります。ウラジミール・カルプトフ氏が開発したスクリプトでチャートを消去しようとしましたが、このスクリプトはカスタムインジケーター ZigzagColor以外の全てを完全に削除してしまいました!!!!!!!!!!!!!!!!!!!!!!!!!!!!?同じスクリプトでシンプルなZigZagを削除してみましたが、どちらも削除されません謎だ...。

ウラジミールさん、ありがとうございます。

このスクリプトを試す


#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int window=ChartWindowFind(0,"ZigzagColor");
   bool res=ChartIndicatorDelete(0,window,"ZigzagColor");
//--- проанализируем результат вызова ChartIndicatorDelete()
   if(!res)
     {
      PrintFormat("Не удалось удалить индикатор ZigzagColor с окна #%d. Код ошибки %d",
                  window,GetLastError());
     }
  }


 

ZigzagColor という短い名前 - そしてこれがデフォルトです。

2020.09.29 03:41:36.604 IndicatorDelete (XAUUSD,M30)    ZigZag(12,5,3)

を入れる必要があり、それこそ

ZigZag(12,5,3)
 
SanAlex:

ZigzagColor という短い名前 - そしてこれがデフォルトです。

であり、また、そのように綴るべきである。

または、インジケータ自体を変更し、よりシンプルな名前にすることもできます。

//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag("+(string)InpDepth+","+(string)InpDeviation+","+(string)InpBackstep+")");
   PlotIndexSetString(0,PLOT_LABEL,"ZigzagColor");
//--- set an empty value

例えば

//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag");
   PlotIndexSetString(0,PLOT_LABEL,"ZigzagColor");
//--- set an empty value

-----------------------------------------------

このスクリプトをチャートに貼り付けて、インジケータ名を指定しなければ、インジケータを削除することなく動作しますが、Expert Advisorウィンドウにどのインジケータが使用可能であるかを書き込みます。

https://c.mql5.com/3/332/IndicatorDelete.mq5

これは私が持っているものです。

CS      0       03:41:36.549    IndicatorDelete (XAUUSD,M30)    EWO(5,35)
DF      0       03:41:36.604    IndicatorDelete (XAUUSD,M30)    ZigZag(12,5,3)
KR      0       03:41:36.626    IndicatorDelete (XAUUSD,M30)    LeMan_BrainTrend1Sig
FE      0       03:41:36.646    IndicatorDelete (XAUUSD,M30)    Hline VSC
RN      0       03:41:36.666    IndicatorDelete (XAUUSD,M30)    Pivot Lines TimeZone
KG      0       03:41:36.686    IndicatorDelete (XAUUSD,M30)    Line through two fractals
DL      0       03:41:36.706    IndicatorDelete (XAUUSD,M30)    sanbox
 
Alekseu Fedotov:

このスクリプトを試す

皆さん、ごきげんよう。

Alekseyさん、あなたのスクリプトを適用しました。エラーコード 4115が表示された。ハンドブックにその意味が書いてありました。

err_chart_indicator_cannot_del

4115

チャートからインジケータを削除するとエラーになる件


ウラジミールさん、ありがとうございます。

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

または、よりシンプルな名前を付けて、インジケータ自体を変更することもできます。

このように

-----------------------------------------------

このスクリプトをチャートに貼り付けて、インジケータ名を指定しない場合、インジケータを削除することなく動作しますが、Expert Advisorウィンドウにどのインジケータが存在するかが表示されます。

https://c.mql5.com/3/332/IndicatorDelete.mq5

これが私の持っているものだ!

こんにちは!あなたのスクリプトを実装しました。Experts タブにVolumesと ZigZag(80,20,0)の2つのインジケータが 表示されました。確かにそうなのですが、ZigZag インジケータだけなぜかColorが ない書き方になっています。

ウラジミールさん、ありがとうございます。

 
Alekseu Fedotov:

このスクリプトを試す

MrBrooklin:

皆さん、ごきげんよう。

アレクセイ、あなたのスクリプトを適用しました。エラーコード 4115が表示された。

ウラジミールさん、ありがとうございます。

もっと気をつけないといけないですね。

bool  ChartIndicatorDelete( 
   long           chart_id,              // идентификатор графика 
   int            sub_window             // номер подокна 
   const string   indicator_shortname    // короткое имя индикатора 
   );

インジケーター名とインジケーターショートネームは一致しないことが多い。

 
MrBrooklin:

こんにちは!あなたのスクリプトを適用しました。Experts タブにVolumesとZigZag(80,20,0)の2つのインジケータが表示されました。確かにそうなのですが、ZigZag インジケータだけなぜかColorが ない書き方になっています。

敬具 ウラジミール

だから、ZigZag (80,20,0) のように書く必要がある。

この場合、間違いなく削除されます。

-----------------

ただし、Color なし

というのは、インジケータにこのように書かれているからです。

IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag("+(string)InpDepth+","+(string)InpDeviation+","+(string)InpBackstep+")");

 
SanAlex:

ジグザグ(80,20,0)のような書き方です。

ZigZagは必ず削除されます。

-----------------

ただし、Color なし

というのは、インジケータにこのように書かれているからです。

設定を変更した場合は、Indicatorで指定した数字を追加する必要があります。

例えば

ZigZag(12,5,3)