Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1284

 
Youri Lazurenko:

Grazie ancora, ora la linea è come una linea, bello da vedere. SoloObjectDelete(0, name);; è necessario, altrimenti una volta disegnata la linea non viene ridisegnata. Lo stesso in mql4, l'ho solo dimenticato.

L'avrei fatto

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
    if(!ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0))
     {
      Print("Ошибка в создании линии");
      return (false);
     }
  ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
  ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
  ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 0, price1);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 1, price2);

  ChartRedraw();
  return(true);
 }
 
Vladimir Karputov:

Che sciocchezza. L'oggetto grafico disegnato si muove in modo fluido. L'esempio è dato nell'aiuto per ogni oggetto (per la linea orizzontaleOBJ_HLINE).

Potete anche cambiare qualsiasi proprietà a un oggetto già disegnato: colore, stile, odore...

Si fa manualmente, non discuto. Ma l'Expert Advisor disegna linee di tendenza per punti DeMark. Con la funzione ObjectDelete(0, name);, quando i punti cambiano, la vecchia linea di tendenza viene rimossa e ne viene disegnata una nuova. Senza questa funzione, le prime linee disegnate non vengono più ridisegnate. Questa non è una sciocchezza, è un fatto.

Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Manualmente, non discuto. L'Expert Advisor, invece, disegna linee di tendenza per punti DeMark. Con la funzione ObjectDelete(0, name);, quando i punti cambiano, la vecchia linea di tendenza viene rimossa e ne viene disegnata una nuova. Senza questa funzione, le prime linee disegnate non vengono più ridisegnate. Questa non è una sciocchezza, è un fatto.

Perché non leggi l'aiuto? Ed esegui l'esempio.

 
Alexey Viktorov:

Io lo farei.

Grazie, ma lascio la mia variante, funziona. Anche se lo proverò al posto di ObjectDelete(0, nome);.

 ChartRedraw();
Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Leggete la guida, per l'amor di Dio! Ed esegui l'esempio.

Ho letto il riferimento. Solo che tu sei indignato e io scrivo dalla pratica. Un'altra cosa è usare ChartRedraw() invece di ObjectDelet(), non discuto e controllerò. Questa è l'unica cosa che dovete sottolineare facendo riferimento all'esempio.

 
Youri Lazurenko:

Ho letto il riassunto. Solo tu ti indigni con le parole e io scrivo dalla pratica. Un'altra cosa è usare ChartRedraw() invece di ObjectDelet(), non discuto e controllo. Questa è l'unica cosa che dovete sottolineare facendo riferimento all'esempio.

La gente di solito chiede consigli in questo thread e quando li riceve, li ascolta. Come minimo leggete l'aiuto e applicate gli esempi. Per favore, se non vuoi ascoltare gli altri, non chiedere proprio nulla.

 
Youri Lazurenko:


Un esempio di come puoi cambiare al volo qualsiasi proprietà dell'oggetto grafico"Linea orizzontale" - non hai bisogno di cancellare l'oggetto per farlo, devi solo cambiare la proprietà.

C:\Users\barab\OneDrive\Изображения\Screenpresso\2021-02-01_16h09_06.gif

Codice:

//+------------------------------------------------------------------+
//|                       OBJ_HLINE change properties on the fly.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string          InpName="HLine";     // Line name
//--- an array for storing colors contains 14 elements
color colors[]=
  {
   clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
   clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- the number of colors
   int size=ArraySize(colors);
//--- get a random value
   int number=MathRand();
//--- get an index in the col[] array as a remainder of the integer devision
   int i=number%size;
//--- set line color
   ObjectSetInteger(ChartID(),InpName,OBJPROP_COLOR,colors[i]);
   ChartRedraw();
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Grazie, ma lascio la mia variante, funziona. Anche se lo proverò al posto di ObjectDelete(0, nome);.

Decisione completamente sbagliata. La cancellazione di un oggetto grafico e l'aggiornamento di un grafico non si sostituiscono in alcun modo.

Il mio esempio controlla prima se c'è un oggetto, in particolare una tendenza con il nome tfyu, che è nome nel layout della tastiera russa)). Poi, se non esiste, si disegna la tendenza. Se il tentativo di disegno non ha successo, il messaggio viene visualizzato e la funzione esce con return false.

Tutto ciò che segue, indipendentemente dal fatto che il trend sia già presente o sia stato appena disegnato, gli vengono assegnati i parametri specificati, i prezzi di tempo e coordinate, il tipo, lo spessore e qualsiasi altra cosa si voglia aggiungere. Dopo di che il grafico viene aggiornato e la funzione restituisce true.

Per la velocità di esecuzione, sarà meno costoso controllare la presenza della tendenza che cancellarla e disegnarne una nuova.

Ma... la decisione finale spetta a te e se ti piace grattarti l'orecchio sinistro con il mignolo destro, non ho il diritto di fermarti.

 
Youri Lazurenko:

E torniamo a disegnare la linea di tendenza. Se avete bisogno di un codice.

Codice molto cattivo.

 
Alexey Viktorov:

Io farei così.

Io avrei fatto così:

void CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
   {
    ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0);
    ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
    ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
    ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
   }
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 0, price1);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 1, price2);

  ChartRedraw();
 }
Motivazione: