Creare un robot - pagina 7

 
Vladimir M.:
Di solito cancello l'handle e la parte di calcolo in OnDeinit e tutto viene rimosso. L'oggetto non è un indicatore.

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

"Rimuovere un indicatore da un grafico non significa che anche la parte di calcolo dell'indicatore sarà rimossa dalla memoria del terminale. Per rilasciare la maniglia dell'indicatore, usate la funzione IndicatorRelease() ".

Sì, Vladimir, l'ho già fatto e scritto prima, ma il risultato è sempre lo stesso.

Saluti, Vladimir.

Forum sul trading, sistemi di trading automatico e test di strategia

Nuovo robot di trading

MrBrooklin, 2020.09.28 10:38

Ho risolto questo problema per più di un'ora. Volevo creare e visualizzare l'indicatore ZigZagColor sul grafico all'avvio di Expert Advisor. È stato fatto in 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);

L'indicatore è stato creato e visualizzato. Ora ho bisogno che l'indicatore venga cancellato dopo che l'Expert Advisor è stato rimosso. Lo sto scrivendo:

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

Ma l'indicatore non viene rimosso. Ho risolto tutto. Ho pulito la maniglia e applicato la funzione di cancellazione. Mi chiedo quale sia la ragione per cui non si disinstalla.

Saluti, Vladimir.


 
Alekseu Fedotov:

Rimuovere l'indicatore dal grafico con la funzione


ChartIndicatorDelete(

long chart_id, // ID del grafico

int sub_window // numero della sottofinestra

const string indicator_shortname // nome breve dell'indicatore

);

Grazie, Alexey, lo proverò domani a mente lucida, sono già confuso dalle informazioni che ho. Come si dice, dormirò meglio al mattino!

Ora ho un'altra cosa che mi ha lasciato molto perplesso e sorpreso. Ho provato a cancellare il grafico con lo script sviluppato da Vladimir Karputov, ma questo script ha cancellato assolutamente tutto tranne l'indicatore personalizzato ZigzagColor! Ho provato a rimuovere un semplice ZigZag con lo stesso script, non lo rimuove nemmeno! È un mistero...

Saluti, Vladimir.

 
MrBrooklin:

Grazie, Alexey, domani ci proverò a mente lucida, visto che sono già in un casino di informazioni. Come dice il proverbio - più saggio al mattino!

Ora c'è un'altra cosa che mi ha sconcertato e sorpreso molto. Ho provato a cancellare il grafico con lo script sviluppato da Vladimir Karputov, ma questo script ha cancellato assolutamente tutto tranne l'indicatore personalizzato ZigzagColor! Ho provato a rimuovere un semplice ZigZag con lo stesso script, non lo rimuove nemmeno! È un mistero...

Saluti, Vladimir.

Prova questo script


#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 breve ZigzagColor - e questo è il default, se lo imposti diversamente devi scrivere quelle cifre

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

e questo è esattamente quello che dovete mettere in

ZigZag(12,5,3)
 
SanAlex:

nome breve ZigzagColor - e questo è il default, se lo imposti diversamente devi scrivere quelle cifre

ed è così che dovrebbe essere scritto

o si può cambiare l'indicatore stesso - dare un nome più semplice

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

per esempio

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

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

Ti ho già mostrato lo script - se questo script è collegato a un grafico e non dai un nome all'indicatore, funzionerà senza cancellare alcun indicatore - ma scriverà nella finestra Expert Advisor quali indicatori sono disponibili

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

Questo è quello che ho

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:

Prova questo script

Buona giornata a tutti!

Aleksey, ho applicato il tuo script. Ho ricevuto il codice di errore 4115. Ho trovato cosa significa nel manuale:

ERRARE_INDICATORE_CARTOGRAFIA_CANNOT_DEL

4115

Errore quando si cancella l'indicatore dal grafico


Saluti, Vladimir.

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

o potete anche cambiare l'indicatore stesso dandogli un nome più semplice

come questo

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

Ho già scaricato lo script - se questo script è collegato a un grafico e non si dà un nome all'indicatore, funzionerà senza cancellare alcun indicatore - ma scriverà nella finestra di Expert Advisor quali indicatori sono presenti

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

Questo è quello che ho!

Ciao, ho implementato il tuo script. Due indicatori sono apparsi nella scheda Esperti : Volumi e ZigZag (80,20,0). È effettivamente così, solo l'indicatore ZigZag è scritto senza colore per qualche motivo.

Saluti, Vladimir.

 
Alekseu Fedotov:

Prova questo script

MrBrooklin:

Buona giornata a tutti!

Aleksey, ha applicato il tuo script. Ho ricevuto il codice di errore 4115.

Saluti, Vladimir.

Devo stare più attento.

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

Il nome dell'indicatore e il nome breve dell'indicatore spesso non coincidono.

 
MrBrooklin:

Ciao, ho applicato il tuo script. Due indicatori sono apparsi nella scheda Esperti: Volumi e ZigZag (80,20,0). È effettivamente così, solo l'indicatore ZigZag è scritto senza colore per qualche motivo.

Sinceramente, Vladimir.

Quindi, dovete scriverlo così - ZigZag (80,20,0).

Sarà sicuramente cancellato in questo caso.

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

ma senzaColore

perché è così che è scritto nell'indicatore

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

 
SanAlex:

Devi scriverlo così - ZigZag (80,20,0)

Lo ZigZag sarà sicuramente cancellato.

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

ma senzaColore

perché è così che è scritto nell'indicatore

Se cambiate le impostazioni, dovete aggiungere i numeri che avete specificato nell'indicatore

per esempio

ZigZag(12,5,3)