Aiuta a disegnare un fibo in uno script

 

Publi

Aiuta a disegnare un fibo in uno script

 

Publi

Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 12

Discussione: Aiuta a disegnare un fibo in uno script

  1. #1
    1 Allegato/i Ciao

    Ho uno script MT4 che inserisce un ordine in sospeso sulla barra corrente. Mi piacerebbe all'interno dello stesso script disegnare un fibo sulla barra corrente. Qualcuno può aiutarmi a farlo? Ho provato a usare le istruzioni qui, ma sono sopra la mia testa:

    https://docs.mql4.com/constants/obje...bject/obj_fibo

    Qualcuno mi può aiutare per favore?

    Grazie

    Pietro

    https://www.forexmad.com/attachments...1349220712.mq4

  2. #2
    Grazie per questo, controllerò stasera quando torno a casa. No, non ho modificato nessuno dei file lib standard...
    Citazione Originariamente Scritto da ;
    Ciao Maxx, {quote} Non sono sicuro di aver modificato i file lib standard, ma se lo hai fatto può essere un grosso problema e dovresti ripristinarli nel modo in cui sono venuti. Se hai bisogno di modificare la libreria standard, dovrai invece creare una classe figlio... se non hai ignorato questo commento. {quote} Sì... se non chiami Detach(), il disegno del grafico viene rimosso dal distruttore di oggetti. Non utilizzare lo stesso oggetto per creare più disegni grafici. Ogni disegno grafico dovrebbe avere il proprio oggetto. Ecco un esempio di creazione di un nuovo...
    Citazione Originariamente Scritto da ;
    Ciao Maxx, {quote} Non sono sicuro di aver modificato i file lib standard, ma se lo hai fatto può essere un grosso problema e dovresti ripristinarli nel modo in cui sono venuti. Se hai bisogno di modificare la libreria standard, dovrai invece creare una classe figlio... se non hai ignorato questo commento. {quote} Sì... se non chiami Detach(), il disegno del grafico viene rimosso dal distruttore di oggetti. Non utilizzare lo stesso oggetto per creare più disegni grafici. Ogni disegno grafico dovrebbe avere il proprio oggetto. Ecco un esempio di creazione di un nuovo...

  3. #3
    Ciao Maxx,
    Citazione Originariamente Scritto da ;
    Quando eseguo il debug, sembra chiamare un ObjectDelete() in ChartObject.mqh...? La cosa divertente è che quando lo commento, non viene disegnato a. Se lo lascio dentro, disegna il fibo, ma il fibo non viene visualizzato nell'elenco Oggetti per il grafico. Posso farne a meno ora, ma sarebbe bello poter eliminare manualmente diversi Fibo in futuro.
    Non sono sicuro che tu abbia modificato i file lib standard, ma se lo hai fatto può essere un grosso problema e dovresti ripristinarli nel modo in cui sono venuti. Se hai bisogno di modificare la libreria standard, dovrai invece creare una classe figlio... se non hai ignorato questo commento.
    Citazione Originariamente Scritto da ;
    Sta facendo tutto quello che voglio, a parte lasciare il grafico nell'elenco degli oggetti. Ho bisogno di Detach(), ma cos'altro devo fare per inserirlo lì? Non riesco a vedere a qui:
    Sì... se non chiami Detach(), il disegno del grafico viene rimosso dal distruttore di oggetti. Non utilizzare lo stesso oggetto per creare più disegni grafici. Ogni disegno grafico dovrebbe avere il proprio oggetto. Ecco un esempio di creazione di un nuovo oggetto nell'heap, assegnarlo a un puntatore, lavorare con l'oggetto, quindi aggiungerlo al contenitore ArrayObj che puoi quindi utilizzare per manipolare gli oggetti lungo la strada o quando hai finito lo farà elimina automaticamente gli oggetti dalla memoria in modo da non doverti ricordare di farlo manualmente. Codice inserito/ --------------------------------------------- --------------------- /| FiboDraw.mq4 |/| nicholishen |/| www.reddit.com/u/nicholishenFX |/ ------------------------------------------------ ------------------- #property copyright nicholishen #property link www.reddit.com/u/nicholishenFX #property version 1.00 #property strict #include lt;ChartObjects\ChartObjectsFibo .mqhgt; #include lt;Array\ArrayObj.mqhgt;/ ------------------------------------------------ ------------------- /| Funzione di avvio del programma script |/ ------------------------------------------------ ------------------- void OnStart() {/---/--- cancella tutti gli oggetti del grafico rimasti da un'esecuzione precedente. Questo è solo per lo script ObjectsDeleteAll(0,myFibo);/--- ottenere punti di ancoraggio fibo da zigzag struct myAnchors { double price; data e ora; myAnchors()rice(0.0),time(NULL){} } anchors#91;2#93;;/gestire automaticamente la memoria CArrayObj objArray; for(int i=0;ilt;10;i ) { anchors#91;1#93;.price = High#91;i#93;; ancore#91;1#93;.tempo = Tempo#91;i#93;; anchors#91;0#93;.prezzo = Alto#91;i#93;-((Alto#91;i#93;-Basso#91;i#93/2); ancore#91;0#93;.tempo = Tempo#91;i#93;; stringa fibo_name = myFibo_ IntegerToString(i);/--- dichiara e crea un oggetto della classe fibo CCChartObjectFibo *fibo = new CCChartObjectFibo; fibo.Create(0,/chartID nome_fibo,/nome oggetto grafico 0,/sottofinestra anchors#91;1#93;.time,/time 1 anchors#91;1#93;.prezzo,/prezzo 1 ancore#91;0#93;.tempo,/tempo 2 ancore#91;0#93;.prezzo/prezzo 2 );/--- impostazione di nuovi livelli perché vogliamo 76.4 e nessuna estensione, altrimenti questo passaggio non è necessario double level#91;10#93; = {-9, -7, -5, -3, -1, 1, 3, 5, 7, 9} ; stringa nomelivello#91;10#93; = {4R,3R,2R,1R,S,L,1R,2R,3R,4R}; fibo.LevelsCount(10); for(int j=0;jlt;ArraySize(livelli);j ) { fibo.LevelValue(j,livelli#91;j#93; fibo.LevelDescription(j,nomelivello#91;j#93; fibo.LevelColor(j,clrBlack);}/disattiva ray fibo.RayRight(false);/lascia l'oggetto sul grafico dopo che l'oggetto è stato distrutto fibo.Detach(); objArray.Add(fibo); } }/ --------------------------------------------- ---------------------

  4. #4
    1 allegato/i
    Citazione Originariamente Scritto da ;
    {quote} Beh, tutto dipende da come vuoi implementarlo... Stai cercando di lasciare i disegni sul grafico?

    Citazione Originariamente Scritto da ;
    {quote}Stai tentando di aggiornare il disegno corrente?
    No, ma forse in futuro vorrò aggiornarlo manualmente... Posso tornare su questo punto.
    Citazione Originariamente Scritto da ;
    {quote} Cosa succede quando chiami fibo.Detach()? Hai impostato un punto di interruzione e hai esaminato il codice nel debugger?
    Quando eseguo il debug, sembra chiamare un ObjectDelete() in ChartObject.mqh...? La cosa divertente è che quando lo commento, non viene disegnato a. Se lo lascio dentro, disegna il fibo, ma il fibo non viene visualizzato nell'elenco Oggetti per il grafico. Posso farne a meno ora, ma sarebbe bello poter eliminare manualmente diversi Fibo in futuro.
    Citazione Originariamente Scritto da ;
    {quote} Suggerimento: non puoi creare(...) lo stesso nome oggetto più di una volta.
    Ah, questa è la chiave! Ho aggiunto timecurrent al nome fibo (probabilmente non la soluzione più elegante) e tutto sembra funzionare. Sta facendo tutto quello che voglio, a parte lasciare il grafico nell'elenco degli oggetti. Ho bisogno di Detach(), ma cos'altro devo fare per inserirlo lì? Non riesco a vedere a qui:
    https://docs.mql4.com/objects
    https://www.forexmad.com/attachments...5757347892.mq4

  5. #5

    Citazione Originariamente Scritto da ;
    {quote} Ha funzionato! Sono sicuro che il codice non è molto elegante ma funziona! Grazie mille per tutti i tuoi consigli. Ho fatto funzionare tutto come voglio tranne 1 cosa... Posso eseguirlo solo una volta su un grafico. Cosa devo fare in modo da poter chiamare lo script ogni barra e continuare ad aggiungere un nuovo fibo? Sospetto che abbia qualcosa a che fare con la distruzione dell'oggetto, ma non ne sono sicuro? {file}
    Beh, tutto dipende da come vuoi implementarlo... Stai cercando di lasciare i disegni sul grafico? Stai tentando di aggiornare il disegno corrente? Cosa succede quando chiami fibo.Detach()? Hai impostato un punto di interruzione e hai esaminato il codice nel debugger? Suggerimento: non puoi creare(...) lo stesso nome di oggetto più di una volta.

  6. #6
    1 allegato/i
    Citazione Originariamente Scritto da ;
    {quote} Provalo e dimmi cosa succede
    Ha funzionato! Sono sicuro che il codice non è molto elegante ma funziona! Grazie mille per tutti i tuoi consigli. Ho fatto funzionare tutto come voglio tranne 1 cosa... Posso eseguirlo solo una volta su un grafico. Cosa devo fare in modo da poter chiamare lo script ogni barra e continuare ad aggiungere un nuovo fibo? Sospetto che abbia qualcosa a che fare con la distruzione dell'oggetto, ma non ne sono sicuro?
    https://www.forexmad.com/attachments...1574714932.mq4

  7. #7

    Citazione Originariamente Scritto da ;
    {quote} Provalo e dimmi cosa succede
    Penso che il suo problema sia ricevere 101 errori di compilazione e 1 avviso.

  8. #8

    Citazione Originariamente Scritto da ;
    Questo script è ottimo se vuoi disegnare una fibo dalla candela più alta alla candela più bassa, che è il solito uso dello strumento fibo. Vorrei posizionare il fibo solo sulla candela più recente. Come potrei farlo per favore? Rimuovere il ciclo for e utilizzare qualcosa come High[0] per il prezzo?
    Provalo e dimmi cosa succede

  9. #9
    Questo script è ottimo se vuoi disegnare una fibo dalla candela più alta alla candela più bassa, che è il solito uso dello strumento fibo. Vorrei posizionare il fibo solo sulla candela più recente. Come potrei farlo per favore? Rimuovere il ciclo for e utilizzare qualcosa come High[0] per il prezzo?

  10. #10
    Questo è in realtà abbastanza semplice se usi la libreria standard.
    https://www.mql5.com/en/docs/standar...hartobjectfiboCodice inserito/ --------------------------------------------- --------------------- /| FiboDraw.mq4 |/| nicholishen |/| www.reddit.com/u/nicholishenFX |/ ------------------------------------------------ ------------------- #property copyright nicholishen #property link www.reddit.com/u/nicholishenFX #property version 1.00 #property strict #include lt;ChartObjects\ChartObjectsFibo .mqhgt;/ ------------------------------------------------ ------------------- /| Funzione di avvio del programma script |/ ------------------------------------------------ ------------------- void OnStart() {/--- ObjectDelete(0,myFibo);/--- ottenere punti di ancoraggio fibo da zigzag struct myAnchors { double price; data e ora; myAnchors()rice(0.0),time(NULL){} } anchors#91;2#93;; indice int = -1; for(int i=0;ilt;Barre(Simbolo(),Period());i ) { double val = iCustom(Simbolo(),Period(),ZigZag,15,5,3,0,i); if((val != 0.0 || val != EMPTY_VALUE) val gt; 0.0) { if(indice gt;=0) { anchors#91;index#93;.price = val; anchors#91;indice#93;.time = iTime(Simbolo(),Periodo(),i); } indice ; if(indice gt;=2) interruzione; } }/--- dichiara e crea un oggetto della classe fibo CCChartObjectFibo fibo; fibo.Create(0,/chartID myFibo,/nome oggetto grafico 0,/sottofinestra anchors#91;1#93;.time,/time 1 anchors#91;1#93;.prezzo,/prezzo 1 ancore#91;0#93;.tempo,/tempo 2 ancore#91;0#93;.prezzo/prezzo 2 );/--- impostazione di nuovi livelli perché vogliamo 76.4 e nessuna estensione, altrimenti questo passaggio non è necessario double level#91;7#93; = {0.000, 0.236, 0.382, 0.500, 0.618, 0.764, 1.000} ; fibo.LevelsCount(7); for(int i=0;ilt;ArraySize(livelli);i ) { fibo.LevelValue(i,livelli#91;i#93; fibo.LevelDescription(i,DoubleToStr(livelli#91;i#9 3;*100,1)); }/lascia l'oggetto sul grafico dopo che l'oggetto è stato distrutto fibo.Detach(); }/ ---------------------------------------------- ------

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Il sito di forexmad utilizza cookie
Il sito di forexmad utilizza cookie, alcuni dei quali già installati. Per avere maggiori informazioni sui nostri cookie ti preghiamo di cliccare qui. Ti preghiamo di cliccare sul bottone a destra per accettare i nostri cookie. Se continui a navigare sul sito di forexmad assumeremo che sei d'accordo ad utilizzarli.