Creación de un robot - página 7

 
Vladimir M.:
Suelo borrar el asa y la parte de cálculo en OnDeinit y se elimina todo. El objeto no es un indicador.

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

"Eliminar un indicador de un gráfico no significa que la parte de cálculo del indicador también se elimine de la memoria del terminal. Para liberar el mango del indicador, utilice la función IndicatorRelease() ".

Sí, Vladimir, ya lo hice y escribí sobre ello antes, pero el resultado sigue siendo el mismo.

Saludos, Vladimir.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Nuevo robot de trading

MrBrooklin, 2020.09.28 10:38

Llevo más de una hora resolviendo este problema. Quería crear y mostrar el indicador ZigZagColor en el gráfico al iniciar el Asesor Experto. Se hizo en 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);

El indicador fue creado y mostrado. Ahora necesito que el indicador se elimine después de que se elimine el Asesor Experto. Lo estoy escribiendo:

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

Pero el indicador no se elimina. Lo he solucionado todo. He limpiado el mango y he aplicado la función de borrado. Me pregunto cuál es la razón por la que no se desinstala.

Saludos, Vladimir.


 
Alekseu Fedotov:

Eliminar el indicador del gráfico con la función


ChartIndicatorDelete(

long chart_id, // ID del gráfico

int sub_window // número de la subventana

const string nombre_del_indicador // nombre corto del indicador

);

Gracias, Alexey, mañana lo intentaré con la cabeza despejada, ya estoy confundido con la información que tengo. Como se dice, ¡mejor por la mañana!

Ahora tengo otra cosa que me desconcierta y me sorprende mucho. ¡Intenté borrar el gráfico con el script desarrollado por Vladimir Karputov, pero este script borró absolutamente todo excepto el indicador personalizado ZigzagColor! Intenté eliminar un simple ZigZag con el mismo script, ¡tampoco se elimina! Es un misterio...

Saludos, Vladimir.

 
MrBrooklin:

Gracias, Alexey, mañana lo intentaré con la cabeza despejada, que ya estoy hecho un lío de información. Como dice el refrán, ¡más sabio por la mañana!

Ahora hay otra cosa que me desconcertó mucho y me sorprendió. ¡Intenté borrar el gráfico con el script desarrollado por Vladimir Karputov, pero este script borró absolutamente todo excepto el indicador personalizado ZigzagColor! Intenté eliminar un simple ZigZag con el mismo script, ¡tampoco se elimina! Es un misterio...

Saludos, Vladimir.

Pruebe esta secuencia de comandos


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


 

nombre corto ZigzagColor - y este es el valor por defecto, si se establece de manera diferente es necesario escribir esos dígitos

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

y eso es exactamente lo que tienes que poner

ZigZag(12,5,3)
 
SanAlex:

nombre corto ZigzagColor - y este es el valor por defecto, si se establece de manera diferente es necesario escribir esos dígitos

y así es como debe escribirse

o puede cambiar el propio indicador - dar un nombre más 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 ejemplo

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

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

Ya le mostré el script - si este script se adjunta a un gráfico y usted no da un nombre de indicador, funcionará sin borrar ningún indicador - pero escribirá en la ventana del Asesor Experto qué indicadores están disponibles

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

Esto es lo que tengo

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:

Pruebe este script

¡Buenos días a todos!

Aleksey, he aplicado tu guión. Tengo el código de error 4115. He encontrado lo que significa en el manual:

ERR_CHART_INDICATOR_CANNOT_DEL

4115

Error al borrar el indicador del gráfico


Saludos, Vladimir.

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

o también puede cambiar el propio indicador dándole un nombre más sencillo

así

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

Ya he descargado el script - si este script se adjunta a un gráfico y no se da un nombre de indicador, funcionará sin borrar ningún indicador - pero escribirá en la ventana del Asesor Experto qué indicadores están presentes

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

¡Esto es lo que tengo!

Hola! He implementado su script. En la pestaña Expertos aparecen dos indicadores: Volúmenes y ZigZag (80,20,0). Efectivamente es así, sólo que el indicador ZigZag está escrito sin Color por alguna razón.

Saludos, Vladimir.

 
Alekseu Fedotov:

Pruebe esta secuencia de comandos

MrBrooklin:

¡Buenos días a todos!

Aleksey, aplica tu guión. Tengo el código de error 4115.

Saludos, Vladimir.

Tengo que tener más cuidado.

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

El nombre del indicador y el nombre corto del indicador a menudo no coinciden.

 
MrBrooklin:

Hola! He aplicado su script. En la pestaña Expertos aparecen dos indicadores: Volúmenes y ZigZag (80,20,0). Efectivamente es así, sólo que el indicador ZigZag está escrito sin Color por alguna razón.

Sinceramente, Vladimir.

Por lo tanto, tienes que escribirlo así - ZigZag (80,20,0).

En este caso, se borrará definitivamente.

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

pero sinColor

porque así es como está escrito en el indicador

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

 
SanAlex:

Tienes que escribirlo así - ZigZag (80,20,0)

El ZigZag será definitivamente eliminado.

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

pero sinColor

porque así es como está escrito en el indicador

Si cambia la configuración, deberá añadir los números que haya especificado en el Indicador

por ejemplo

ZigZag(12,5,3)