Come posso imparare a creare oggetti grafici? MQL4. - pagina 3

 
Integer:

Se l'indicatore crea oggetti grafici e poi ottiene i loro parametri, no.

Ma è ancora più facile risolvere tutto attraverso l'uso di un indicatore. I calcoli vengono eseguiti nell'indicatore e i loro risultati vengono visualizzati tramite i buffer dell'indicatore.

C'è un'altra alternativa. Creare variabili globali con parametri della linea invece di linee, ma in questo caso, la funzione GetValueByShift() non funzionerà, dovete scrivere il suo analogo.

Capisco. Ma come disegnare una linea di tendenza in un indicatore senza alcun disegno grafico?

Si conoscono due indici di barre, devono essere collegati con una linea e disegnati a destra.

 
forexman77:

Capisco. Ma come posso disegnare una linea di tendenza nell'indicatore senza alcun disegno grafico?

Due indici di barre sono noti, dovrebbero essere collegati da una linea e disegnati verso destra.

Avevo un tale indicatore nel mio codice base. Ora non ce l'ho.

Dovremmo usare i calcoli. Conoscendo le coordinate di due punti possiamo semplicemente calcolare le coordinate del terzo.

 
Integer:

Avevo un simile indicatore nel mio codebase. Ora non c'è più, non c'è più.

Bisogna usare i calcoli per fare tutto. Conoscendo le coordinate di due punti, si possono semplicemente calcolare le coordinate del terzo.

Dove trovare una formula per questo calcolo?

In generale, sembra un po' nouveau. Il terminale ha tutti i tipi di canali, fibos e altri indici geometrici, ma sono inutili nel tester.

 
forexman77:

Dove posso trovare la formula per questo calcolo?

In generale, è una specie di nouveau riche. Ci sono molti canali, Fibos e altri indici geometrici nel terminale, ma sono inutili nel tester.

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - numeri delle barre. y1, y2 - valori dei prezzi. x3 - numero di barre per le quali il calcolo è condotto.

 
Integer:

x1, x2 - numeri delle barre. y1, y2 - valori dei prezzi. x3 - numero di barre per le quali viene eseguito il calcolo.

Ok. Grazie. Continuerò a scavare.
 
Integer:

x1, x2 - numeri delle barre. y1, y2 - valori dei prezzi. x3 - numero di barre per le quali viene eseguito il calcolo.

Fatto indicatore basato sui calcoli, le letture sono le stesse dell'indicatore sugli oggetti grafici.

L'ottimizzazione è in corso. L'unico problema è che i trade non vengono aperti correttamente.

Quando applico l'indicatore al grafico la linea è piatta all'inizio, ma poi diventa come dovrebbe essere e rimane così quando la posiziono su un nuovo tick.

 
forexman77:

Fatto un indicatore basato sui calcoli, le letture sono le stesse dell'indicatore sugli oggetti grafici.

L'ottimizzazione è in corso. L'unico problema è che i trade non vengono aperti correttamente.

Quando applico l'indicatore al grafico la linea è piatta all'inizio, e poi con un nuovo tick diventa come dovrebbe essere e rimane così.

Provate a testarlo in modalità visiva. Usando la stampa, cercate la differenza.
 
Integer:
Prova a testare in modalità visiva. Usando la stampa, il commento, cercate la differenza.

La modalità visiva non aiuterà. Sono riuscito a far sì che l'indicatore mostri solo il modello corrente.

L'indicatore stesso stampa il valore del primo indice (MQL4), la prima stampa esce con un valore errato, e le altre sono corrette sui nuovi tick.

Ti ho mandato il codice, nel tuo messaggio personale.

 

Comunque, ho trasferito tutti i calcoli delle linee di tendenza nell'EA. Sembra essere corretto.

Non posso fare un indicatore che mostri l'intera gamma della linea. Non ho abbastanza esperienza.

In realtà ho bisogno di un indicatore per vedere visivamente che i trade sono aperti correttamente.

Ho deciso di usare oggetti grafici per la visualizzazione.

Il problema è l'errore 4200 (l'oggetto esiste già).

Ho provato a dare un nuovo nome all'oggetto ogni volta. Stesso errore.

È possibile chiamare più oggetti? Se è così, come posso tagliare le parti non necessarie del raggio?

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

Comunque, ho trasferito tutti i calcoli delle linee di tendenza nell'EA. Sembra essere corretto.

Non posso fare un indicatore che mostri l'intera gamma della linea. Non ho abbastanza esperienza.

In realtà ho bisogno di un indicatore per vedere visivamente che i trade sono aperti correttamente.

Ho deciso di usare oggetti grafici per la visualizzazione.

Il problema è l'errore 4200 (l'oggetto esiste già).

Ho provato a dare un nuovo nome all'oggetto ogni volta. Stesso errore.

È possibile chiamare più oggetti? Se sì, come posso tagliare le parti non necessarie di un raggio?

Prima della creazione, potete controllare se l'oggetto esiste, funzione ObjectFind(). Non devi fare nulla, esiste e va bene, non è un brutto errore.

Un insieme di oggetti. Potete aggiungere il tempo della barra al nome dell'oggetto, avrà un nome unico.

Tagliare il fascio. Proprietà ObjectSet(Name,OBJPROP_RAY,false);

Motivazione: