Indicatore KSTX - Aiuto con un semplice problema di codice!

 

Publi

Indicatore KSTX - Aiuto con un semplice problema di codice!

 

Publi

Risultati da 1 a 4 di 4

Discussione: Indicatore KSTX - Aiuto con un semplice problema di codice!

  1. #1
    2 Allegato/i Ciao ragazzi.

    Ho creato un indior da KST Indior, che consiste nella sottrazione di KST meno il suo EMA a 9 periodi.
    Il codice è molto semplice, ma siccome non ho idea di programmazione, ho dovuto farlo guardando altri codici interni.
    Alla fine ho realizzato l'interno come desideravo, ma c'è un problema con il tracciato in tempo reale/forward, come vedrai negli screenshot seguenti.


    https://www.forexmad.com/trading-sys...-scalpers.html

    Se il grafico viene aggiornato, l'interno funziona correttamente;


    https://www.forexmad.com/trading-sys...s-control.html

    Ho controllato il codice un sacco di volte ma non ho idea di cosa potrebbe essere. Qualcuno può darmi un aiuto in merito??? Grazie mille

    Ecco il codice;
    Codice inserito define vers 1.0 #property indior_separate_window #property indior_buffers 3 #property indior_color1 FireBrick #property indior_color2 Green/#property indior_width1 3/#property indior_width2 3/----/extern color color1 = FireBrick;/colore esterno color2 = Bianco; extern int X1 = 10; extern int X2 = 15; extern int X3 = 20; extern int X4 = 30; esterno int AVG1 = 5; esterno int AVG2 = 10; esterno int AVG3 = 15; esterno int AVG4 = 20; doppio esterno W1 = -1; doppio esterno W2 = -2; doppio esterno W3 = -3; doppio esterno W4 = -4; extern int periodo = 15;/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ double KSTXBufUp#91;#93;; double KSTXBufDown#91;#93;; doppio ROC1Buf#91;#93;; doppio ROC2Buf#91;#93;; doppio ROC3Buf#91;#93;; doppio ROC4Buf#91;#93;; doppio ROC1MABuf#91;#93;; doppio ROC2MABuf#91;#93;; doppio ROC3MABuf#91;#93;; doppio ROC4MABuf#91;#93;; doppio KSTCBuf#91;#93;; doppio KSTAvgBuf#91;#93;; doppio KSTXBuf#91;#93;; stringa nome_breve;/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void init() { IndiorBuffers(3);/SetIndexDrawBegin(0,1); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(0, KSTXBufUp); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(1, KSTXBufDown);/SetIndexStyle(2,DRAW_LINE);/SetIndexBuffer(2, KSTCBuf);/SetIndexBuffer(3, KSTAvgBuf);/SetIndexBuffer(4, KSTBuffer);/SetIndexLabel(0, KST);/SetIndexDrawBegin(0, MathMax(MathMax(X1, X2), MathMax(X3, X4))); ArraySetAsSeries(KSTCBuf, vero); ArraySetAsSeries(KSTAvgBuf, vero); ArraySetAsSeries(KSTXBuf, vero); ArraySetAsSeries(ROC1Buf, vero); ArraySetAsSeries(ROC2Buf, vero); ArraySetAsSeries(ROC3Buf, vero); ArraySetAsSeries(ROC4Buf, vero); ArraySetAsSeries(ROC1MABuf, vero); ArraySetAsSeries(ROC2MABuf, vero); ArraySetAsSeries(ROC3MABuf, vero); ArraySetAsSeries(ROC4MABuf, vero); nome_breve = KSTX; IndiorShortName(nome_breve); } void deinit() { } void start() { int size = ArraySize(ROC1Buf); if (size lt; Bars) { size = Bars; ArrayResize(ROC1Buf, dimensione); ArrayResize(ROC2Buf, dimensione); ArrayResize(ROC3Buf, dimensione); ArrayResize(ROC4Buf, dimensione); ArrayResize(ROC1MABuf, dimensione); ArrayResize(ROC2MABuf, dimensione); ArrayResize(ROC3MABuf, dimensione); ArrayResize(ROC4MABuf, dimensione); ArrayResize(KSTXBuf, dimensione); ArrayResize(KSTAvgBuf, dimensione); ArrayResize(KSTCBuf, dimensione); } int counted_bars = IndiorCounted(); int limit = Bar - counted_bars; if (barre_contate gt; 0) limit ; for(int i=0; ilt;limit; i ) { if (i X1 gt;= Bars) continue; if (i X2 gt;= Bar) continua; if (i X3 gt;= Bar) continua; if (i X4 gt;= Bar) continua; ROC1Buf#91;i#93; = (1.0 - Chiudi#91;i#93;/Chiudi#91;i X1#93;) * 100.0; ROC2Buf#91;i#93; = (1.0 - Chiudi#91;i#93;/Chiudi#91;i X2#93;) * 100.0; ROC3Buf#91;i#93; = (1,0 -Chiudi#91;i#93;/Chiudi#91;i X3#93;) * 100.0; ROC4Buf#91;io#93; = (1.0 - Chiudi#91;i#93;/Chiudi#91;i X4#93;) * 100.0; } for(i=0; ilt;limite; i ) { ROC1MABuf#91;i#93; = iMAOnArray(ROC1Buf, 0, AVG1, 0, MODE_EMA, i); ROC2MABuf#91;i#93; = iMAOnArray(ROC2Buf, 0, AVG2, 0, MODE_EMA, i); ROC3MABuf#91;i#93; = iMAOnArray(ROC3Buf, 0, AVG3, 0, MODE_EMA, i); ROC4MABuf#91;i#93; = iMAOnArray(ROC4Buf, 0, AVG4, 0, MODE_EMA, i); } for(i=0; ilt;limite; i ) { KSTCBuf#91;i#93; = ROC1MABuf#91;i#93; * W1 ROC2MABuf#91;i#93; * W2 ROC3MABuf#91;i#93; * W3 ROC4MABuf#91;i#93; * W4; } for(i=0; ilt;limite; i ) { KSTAvgBuf#91;i#93; = iMAOnArray(KSTCBuf, 0, periodo, 0, MODE_EMA, i); } for(i=0; ilt;limite; i ) { KSTXBuf#91;i#93; = KSTCBuf#91;i#93; - KSTAvgBuf#91;i#93;;/KSTXBuf#91;io#93; = KSTAvgBuf#91;i#93;; if (KSTXBuf#91;i#93;gt;KSTXBuf#91;i-1#93;) { KSTXBufUp#91;i#93; = KSTXBuf#91;i#93;; KSTXBufDown#91;i#93; = EMPTY_VALUE; if (KSTXBuf#91;i-1#93;lt;KSTXBuf#91;i-2#93;) KSTXBufUp#91;i-1#93;=KSTXBuf#91;i-1#93;; } if (KSTXBuf#91;i#93;lt;KSTXBuf#91;i-1#93;) { KSTXBufDown#91;i#93; = KSTXBuf#91;i#93;; KSTXBufUp#91;i#93; = EMPTY_VALUE; if (KSTXBuf#91;i-1#93;gt;KSTXBuf#91;i-2#93;) KSTXBufDown#91;i-1#93;=KSTXBuf#91;i-1#93;; } } }

  2. #2

  3. #3
    Non hai mai detto quale sia effettivamente il problema, presumo la vernice mancante .... Ho controllato la tua fonte, ti rendi conto che nella parte finale del codice se KSTXBuf è uguale all'ultimo valore, nessuno dei due buffer di output otterrà un valore e quindi vernice mancante? probabilmente è lì che sta il tuo problema. Inoltre, non hai bisogno di così tanti loop separati for(i=0; ilt;limit; i ) ce ne sono almeno due di cui puoi sbarazzarti e rendere l'indior più veloce. Se non hai bisogno di calcoli tick, puoi modificarlo in modo che calcoli solo su una nuova barra. Perché stai ridimensionando gli array su ogni segno di spunta e non nella sezione init? saluti

  4. #4

    Citazione Originariamente Scritto da ;
    Non hai mai detto quale sia effettivamente il problema, presumo la vernice mancante .... Ho controllato la tua fonte, ti rendi conto che nella parte finale del codice se KSTXBuf è uguale all'ultimo valore, nessuno dei due buffer di output otterrà un valore e quindi vernice mancante? probabilmente è lì che sta il tuo problema. Inoltre, non hai bisogno di così tanti loop separati for(i=0; ilt;limit; i ) ce ne sono almeno due di cui puoi sbarazzarti e rendere l'indior più veloce. Se non hai bisogno di calcoli tick, puoi modificarlo in modo che calcoli solo su una nuova barra. Perché stai ridimensionando...
    Il problema principale è il ridimensionamento, gli array non devono essere serie quando vengono ridimensionati e quindi creati array di serie dopo il ridimensionamento. . . controlla il link che ho postato.

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.