Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1269

 
Kira27:

Ho provato tutto quello che hai suggerito, girato e rigirato, ma continua a dipingere le linee in un solo colore in MT5. E in MT4 dipinge le linee normalmente, e senza alcun ritardo.

Credo di non aver provato tutto.

Alexey Viktorov:

È molto probabile che dopo aver rinominato un oggetto non sia ancora disponibile per il riferimento ad esso. Puoi provare a mettere ChartRedraw dopo aver rinominato. Se non aiuta, dovremo costruire la sequenza in qualche altro modo.

ps; Un'altra opzione: prima ridipingere con il nome sparam e poi rinominarlo.

Per qualche motivo, l'evento CHARTEVENT_OBJECT_CREATE conta immediatamente dopo che il topo tocca il grafico, non dopo aver finito la creazione dell'oggetto. E i prezzi delle diverse estremità del fusibile risultano essere gli stessi. Quindi dovete ridipingere dopo che l'oggetto è stato creato.

E un'altra osservazione: dipingete i livelli o la linea principale dello stoppino?

Ecco tre varianti:

Uno.

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

Secondo.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

Tre.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

come organizzare un algoritmo in un indicatore per prendere punti e trasferirli in un altro buffer.

- Per disegnare le linee di tendenza. (come nella foto)

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

Ho provato di tutto con l'istinto, sono disegnati ma in posti strani.

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

Ho allegato l'indicatore, funziona, ma non posso regolare queste linee.

Non ci riesco, forse qualcuno può indirizzarmi agli articoli sui punti vincolanti della linea di tendenza.

-- Non posso disegnarli, non è chiaro in quali punti.

EURUSDH4

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

qualcosa del genere, forse?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



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

Sono sulla strada giusta?

File:
2.mq5  82 kb
 
SanAlex:

Forse qualcuno può indirizzarmi verso articoli sui punti di trendline.

-- Tutto quello che posso fare ora è disegnarli, non è chiaro in quali punti.

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

qualcosa del genere, forse?

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

Sono sulla strada giusta?

Le linee di tendenza sono disegnate in 2 punti, sono o i dati del prezzo o i dati di un altro indicatore, l'esempio del disegno per frattali, che, tra l'altro, conoscete già)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

Lelinee di tendenza sono disegnate in 2 punti, si tratta di dati di prezzo o di dati di un altro indicatore, un esempio di disegno per frattali, che tra l'altro vi è familiare)

https://www.mql5.com/ru/code/29210

Volevo farlo con un solo indicatore, ma non ha funzionato.

- Ho dovuto farlo con due indicatori.

Questo è quello che ho fatto.

GBPUSDM30 GOTOV

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

Ho dimenticato di dire grazie! - Grazie!!!

 
SanAlex:

Volevo farlo in un Indicatore, ma non ha funzionato, ma l'ho fatto in questo, che tu hai suggerito.

- quindi ho dovuto farlo con due indicatori.

Ecco come funzionava.

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

Ho dimenticato di dire grazie! - Grazie!!!

Bene combinarli, si possono creare molti oggetti diversi in un solo indicatore)

 
Alexey Viktorov:

A quanto pare non ho provato tutto.

Per qualche ragione, l'evento CHARTEVENT_OBJECT_CREATE conta immediatamente dopo che il topo tocca il grafico, non dopo la fine della creazione dell'oggetto. E i prezzi delle diverse estremità del fusibile risultano essere gli stessi. Quindi, dobbiamo ridipingerlo dopo la creazione dell'oggetto.


Come l'hai determinato, in modo logico?

E un'altra osservazione: lei dipinge i livelli o la linea principale della fibra?


Ho provato a ridisegnare le linee di tendenza in diverse varianti))))

Ecco tre varianti:

Uno.

Secondo.

Il terzo.


Grazie mille per questi!!! Potrei imparare a pensare logicamente, basandomi sui tuoi esempi))))

Da quanto tempo sei nel trading? Io lo faccio da 12 anni ormai)))

 
Kira27:

Grazie mille per le opzioni!!! Userò i vostri esempi e imparerò a pensare logicamente))))

Voglio dire, da quanto tempo fai trading? Io lo faccio da 12 anni ormai).

Non sono sempre così "gentile". Non sono sempre così "gentile", solo durante gli attacchi... Quindi non c'è molto da imparare dai miei esempi. Sono nel commercio da quasi altrettanto tempo.

 
Alexey Viktorov:

Non sono sempre così "gentile". Solo durante gli attacchi... Quindi non c'è molto da imparare dai miei esempi. Sono più o meno lo stesso nel trading.

Non lo so, sto imparando meglio i metodi e le tecniche di programmazione tramite esempi. Vorrei che MQL5 avesse un tutorial come MQL4 dove il robot è spiegato passo dopo passo usando i file inclusi.

 
Alexey Viktorov:

Sono nel commercio da quasi altrettanto tempo.

Quindi conosci già l'essenza delle fluttuazioni del mercato? Mi sembra che ho già imparato)))) ho solo bisogno di chiederlo, perché posso lavorare con esso per un certo tempo, e poi scatto e creo un casino)))))) Ma ora capisco qualsiasi asset)))) mi piace soprattutto lo S&P, è tecnico e dinamico))

 
VVT:

Bene, combinandoli, si possono creare molti oggetti diversi in un solo indicatore)

Volevo farlo in questo modo, ci ho provato per una settimana, ma non funzionava.

- Sembra essere migliore nel secondo indicatore - non puoi vedere oltre i punti e le linee stesse, ci sono solo i punti e i livelli che servono per determinare le entrate nel mercato.

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

questi due indicatori sono uno (questa è la mia bozza - non ho cambiato i nomi dei 4 indicatori in essa)