Criando um robô - página 7

 
Vladimir M.:
Normalmente eu limpo o cabo e a parte de cálculo no OnDeinit e tudo é removido. O objeto não é um indicador.

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

"Remover um indicador de um gráfico não significa que a parte de cálculo do indicador também será removida da memória do terminal. Para liberar o manípulo indicador, use a função IndicatorRelease() ".

Sim, Vladimir, eu já fiz isso e escrevi sobre isso antes, mas o resultado ainda é o mesmo.

Cumprimentos, Vladimir.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Novo robô comercial

MrBrooklin, 2020.09.28 10:38

Estou resolvendo este problema há mais de uma hora. Eu queria criar e exibir o indicador ZigZagColor no gráfico na inicialização do Expert Advisor. Foi feito no OnInit:

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

O indicador foi criado e exibido. Agora eu preciso que o indicador seja apagado depois que o Expert Advisor for removido. Estou escrevendo-o:

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

Mas o indicador não é removido. Já resolvi tudo. Eu limpei o cabo e apliquei a função de apagar. Qual será a razão pela qual não se está desinstalando?

Cumprimentos, Vladimir.


 
Alekseu Fedotov:

Remover o indicador da tabela com a função


GráficoIndicadorDelete(

long chart_id, // ID do gráfico

int sub_janela // número da subjanela

const string indicator_shortname // nome do indicador curto

);

Obrigado, Alexey, vou tentar com a cabeça limpa amanhã, já estou confuso com as informações que tenho. Como eles dizem, dormirei melhor pela manhã!

Agora tenho outra coisa que me intrigou e me surpreendeu muito. Tentei limpar o gráfico com o roteiro desenvolvido por Vladimir Karputov, mas este roteiro apagou absolutamente tudo, exceto o indicador personalizado ZigzagColor! Tentei remover um simples ZigZag com o mesmo roteiro, ele também não remove! É um mistério...

Cumprimentos, Vladimir.

 
MrBrooklin:

Obrigado, Alexey, amanhã vou tentar com a cabeça limpa, pois já estou em uma confusão de informações. Como diz o ditado - mais sábio pela manhã!

Agora há outra coisa que me intrigou muito e me surpreendeu. Tentei limpar o gráfico com o roteiro desenvolvido por Vladimir Karputov, mas este roteiro apagou absolutamente tudo, exceto o indicador personalizado ZigzagColor! Tentei remover um simples ZigZag com o mesmo roteiro, ele também não remove! É um mistério...

Cumprimentos, Vladimir.

Experimente este roteiro


#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());
     }
  }


 

nome curto ZigzagColor - e este é o padrão, se você defini-lo de forma diferente, você precisa escrever esses dígitos

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

e isso é exatamente o que você precisa colocar em

ZigZag(12,5,3)
 
SanAlex:

nome curto ZigzagColor - e este é o padrão, se você defini-lo de forma diferente, você precisa escrever esses dígitos

e é assim que deve ser grafado

ou você pode mudar o próprio indicador - dar um nome mais fácil

//--- 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

por exemplo

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

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

já lhe mostrei o roteiro - se este roteiro estiver anexado a um gráfico e você não der um nome de indicador, ele funcionará sem deletar nenhum indicador - mas escreverá na janela do Expert Advisor quais indicadores estão disponíveis

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

Isto é o que eu tenho

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:

Experimente este roteiro

Bom dia a todos!

Aleksey, eu apliquei seu roteiro. Recebi o código de erro 4115. Encontrei o que significa no manual:

ERR_CHART_INDICATOR_CANNOT_DEL

4115

Erro ao apagar o indicador do gráfico


Cumprimentos, Vladimir.

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

ou você também pode mudar o próprio indicador, dando-lhe um nome mais simples

como este

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

Eu já baixei o script - se este script estiver anexado a um gráfico e você não der um nome indicador ele funcionará sem deletar nenhum Indicador - mas ele escreverá na janela do Expert Advisor que os Indicadores estão presentes

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

Isto é o que eu tenho!

Olá! eu implementei seu roteiro. Dois indicadores apareceram na guia Especialistas : Volumes e ZigZag (80,20,0). De fato é assim, apenas o indicador ZigZag é escrito sem Cor por alguma razão.

Cumprimentos, Vladimir.

 
Alekseu Fedotov:

Experimente este roteiro

MrBrooklin:

Bom dia a todos!

Aleksey, aplicou seu roteiro. Recebi o código de erro 4115.

Cumprimentos, Vladimir.

Tenho que ser mais cuidadoso.

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

O nome do indicador e o nome curto do indicador muitas vezes não coincidem.

 
MrBrooklin:

Olá! eu apliquei seu roteiro. Dois indicadores apareceram na guia Especialistas: Volumes e ZigZag (80,20,0). De fato é assim, apenas o indicador ZigZag é escrito sem Cor por alguma razão.

Atenciosamente, Vladimir.

Portanto, você tem que escrever assim - ZigZag (80,20,0).

Neste caso, ele será definitivamente eliminado.

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

mas semCor

porque é assim que está escrito no indicador

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

 
SanAlex:

Você tem que escrever assim - ZigZag (80,20,0)

O ZigZag será definitivamente eliminado.

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

mas semCor

porque é assim que está escrito no indicador

Se você mudar as configurações, você precisa adicionar aqueles números que você especificou no Indicador

por exemplo

ZigZag(12,5,3)