Mi immagino che sarebbe avere qualcosa a che fare con la ri-scrittura di un indicatore MA personalizzato che guarda a valori medi del indicatore che si desidera. In realtà dovrebbe essere solo un caso di sostituzione dei valori dei prezzi nell'indicatore MA corrente con valori iStochastic allora si può solo usare iCustom () per chiamare l'indicatore personalizzato. Credo. Heres il codice media mobile semplice da indicatore MA che viene fornito con MT4, dovrebbe essere solo un caso di sostituzione del Closepos con iStochastic (. pos) valori penso vuoto sma () doppio sum0 INT, posBars-ExtCountedBars-1 --- - accumulo iniziale, se (posltMAPeriod) posMAPeriod per (i1iltMAPeriodi, pos--) sumClosepos ---- ciclo di calcolo principale, mentre (posgt0) sumClosepos ExtMapBufferpossumMAPeriod sum-CloseposMAPeriod-1 pos-- ---- a zero bar iniziali se (ExtCountedBarslt1) per (i1iltMAPeriodi) ExtMapBufferBars-I0 immagino che sarebbe avere qualcosa a che fare con la ri-scrittura di un indicatore mA personalizzato che guarda a valori medi del indicatore che si desidera. In realtà dovrebbe essere solo un caso di sostituzione dei valori dei prezzi nell'indicatore MA corrente con valori iStochastic allora si può solo usare iCustom () per chiamare l'indicatore personalizzato. Credo. Heres il codice media mobile semplice da indicatore MA che viene fornito con MT4, dovrebbe essere solo un caso di sostituzione del Closepos con iStochastic (. pos) valori penso vuoto sma () doppio sum0 INT, posBars-ExtCountedBars-1 --- - accumulo iniziale, se (posltMAPeriod) posMAPeriod per (i1iltMAPeriodi, pos--) sumClosepos ---- ciclo di calcolo principale, mentre (posgt0) sumClosepos ExtMapBufferpossumMAPeriod sum-CloseposMAPeriod-1 pos-- ---- a zero bar iniziali se (ExtCountedBarslt1) per (i1iltMAPeriodi) ExtMapBufferBars-I0 Grazie per il vostro aiuto, mrwobbles, ma mi didnt aiutano ancora. Immaginate semplicemente Vorrei calcolare la media mobile di periodi x sui volumi, hai il codice per questo Ive fatto un semplice MA del volume, se si guarda al l'indicatore di medie mobili che viene fornito con MT4 si può vedere cosa Ive fatto . Il suo abbastanza semplice. Il problema con lo stocastico MA è che stocastico restituiscono valori positivi e negativi in modo che le somme arent accurate. Creation di indicatori personalizzati Durante la creazione di una strategia di trading uno sviluppatore spesso si trova di fronte alla necessità di disegnare graficamente in una finestra di sicurezza una certa dipendenza calcolata da un utente ( programmatore). A questo scopo MQL4 offre la possibilità di creare indicatori personalizzati. Custom Indicator è un programma applicativo codificato in MQL4 è fondamentalmente destinato grafica visualizzazione delle dipendenze preliminarmente calcolati. Indicatore personalizzato Struttura necessità di buffer I principali principali indicatori personalizzati sottostanti sta passando i valori di array indicatore ad un terminale del cliente (per disegnare linee indicatore) tramite i buffer di scambio. Buffer è un'area di memoria che contiene valori numerici di un array dell'indicatore. standard di MQL4 implica la possibilità di elaborare fino a otto linee di indicatore utilizzando un indicatore personalizzato. Una serie indicatore e un buffer vengono portati in corrispondenza di ogni linea di indicazione. Ciascun buffer ha il proprio indice. L'indice del primo buffer è 0, il secondo - 1, e così via, l'ultima ha l'indice 7. Fig. 115 mostra come le informazioni da un indicatore personalizzato è passato attraverso i buffer ad un terminale del cliente per disegnare linee indicatore. Figura. 115. I valori passaggio di array indicatore tramite un buffer a un terminale del cliente. L'ordine generale di costruzione di linee di indicatore è il seguente: 1. I calcoli sono condotte in un indicatore personalizzato come risultato valori numerici vengono assegnati agli elementi indicatore matrice. 2. I valori di elementi di un array indicatori vengono inviati a un terminale del cliente tramite buffer. 3. Sulla base di array valore ricevuto dai buffer un terminale cliente linee indicatore display. Componenti di un indicatore personalizzato Consente di analizzare un semplice indicatore personalizzato che mostra due linee - una linea è costruito sulla base di prezzi del bar massimi, la seconda utilizza i prezzi minimi. Esempio di un semplice indicatore personalizzato userindicator. mq4 Consente di analizzare in dettaglio le parti degli indicatori. In ogni programma applicativo scritto in MQL4 è possibile indicare parametri di configurazione che forniscono il programma corretto servizio da un terminale del cliente. In questo esempio la parte di programma della testa (vedi Struttura del programma) contiene diverse linee con immobili direttive. La prima direttiva indica in quale finestra di terminale del cliente deve disegnare le linee indicatore: In MQL4 ci sono due varianti di disegnare linee indicatori: nella finestra di sicurezza principale e in una finestra separata. Finestra principale è la finestra che contiene una tabella di sicurezza. In questo esempio, il parametro indicatorchartwindow nella directory proprietà indica che un terminale del cliente dovrebbe disegnare linee indicatore nella finestra principale. La riga seguente mostra il numero di buffer utilizzati dell'indicatore: Nell'esempio analizzato sono disegnati due linee dell'indicatore. Un buffer viene assegnato a ogni buffer, quindi il numero totale di buffer è due. Le righe successive descrivono i colori delle linee degli indicatori. Parametri indicatorcolor1 e indicatorcolor2 definiscono impostazione del colore per i buffer corrispondenti - in questo caso per i buffer con gli indici 0 (blu) e 1 (rosso). Si noti che le cifre in nomi di parametro indicatorcolor1 e indicatorcolor2 non sono tampone indici. Questi dati sono parti di nomi di costanti che sono impostati secondo buffer. Per ogni colore costante può essere impostato a discrezione dell'utente. Nella riga successiva indicatore array sono dichiarati: l'indicatore è destinato per il disegno di due linee di indicatore, quindi abbiamo bisogno di dichiarare due array una dimensione globale, uno per ogni linea. Nomi di array indicatori sono fino a utente. In questo caso i nomi di matrice Buf0 e BUF1 sono utilizzati, in altri casi altri nomi possono essere utilizzati, per esempio, Linea 1, Alfa, integrale ecc E 'necessario dichiarare gli array a livello globale, perché i valori elementi di un array devono essere conservate tra le chiamate della speciale funzione start (). L'indicatore personalizzato descritto è costruito sulla base di due funzioni speciali - init () e start (). La funzione init () contiene la parte di codice utilizzato sul programma solo una volta (vedi Funzioni speciali). Un'azione molto importante è eseguita nella riga: Con la funzione SetIndexBuffer () un buffer necessaria (in questo caso con l'indice 0) viene messo in corrispondenza di una matrice (in questo caso Buf0). Significa per costruire la prima linea dell'indicatore un terminale client accetterà dati contenuti nella matrice Buf0 utilizzando il buffer zero per esso. Inoltre lo stile della linea è definito: per il buffer zero (0) un terminale client deve utilizzare i seguenti stili di disegno: linea semplice (DrawLine), linea continua (STYLESOLID), la larghezza della linea 2. Le prossime due righe contengono le impostazioni per la seconda linea : Così, secondo il codice della funzione speciale init () entrambe le linee indicatori saranno disegnati nella finestra di sicurezza principale. Il primo sarà una linea blu solida con la larghezza 2, il secondo è una linea tratteggiata rossa (STYLEDOT) di larghezza usuale. Linee indicatore può essere tratte da altri stili così (vedi Stili di Indicatore Lines). Calcolo dei valori di indicatore Array elementi (prestare attenzione) valori degli elementi indicatori array vengono calcolati nella speciale funzione start (). Per comprendere correttamente i contenuti di start () attenzione codice pagare per l'ordine delle barre di indicizzazione. Gli array sezione descrive in dettaglio il metodo di indicizzazione array-timeseries. Secondo questo metodo bar indicizzazione parte da zero. La barra di zero è una barra di corrente ancora informe. L'indice bar più vicino è 1. Quelli successivo è 2 e così via. Come nuove barre vengono visualizzati in una finestra di sicurezza, gli indici di barre già formate (storia) vengono modificate. Il nuovo (corrente, appena formato, più a destra) Barra ottiene l'indice zero, quello a sinistra di lui (che ha appena completamente formato) Ottiene l'indice 1 e valori degli indici di tutte le barre di storia sono aumentati anche per uno. Il metodo descritto di barre di indicizzazione è l'unica possibile per il sistema di trading MetaTrader tutto on-line, e viene preso in considerazione al momento di elaborare linee utilizzando entrambi gli indicatori tecnici e personalizzati. Si è detto in precedenza che linee indicatrici sono costruiti sulla base delle informazioni numeriche contenute in array indicatore. Un array indicatore contiene informazioni sui punti su cui le coordinate di una linea indicatore viene disegnata. E la coordinata Y di ogni punto è il valore di un elemento indicatore di array. e coordinata X è il valore di un indice dell'indicatore elemento dell'array. Nell'esempio analizzato la prima riga indicatore è disegnato con valori massimi di barre. Fig, 116 mostra questa linea indicatore (di colore blu) in una finestra di sicurezza, è costruito sulla base dell'indicatore matrice Buf0. Figura. 116. corrispondenza di coordinate di una linea indicatore valori di un array dell'indicatore. valore di indice di un array indicatore è da un terminale del cliente in corrispondenza con un indice di bar - questi valori di indice sono uguali. Si deve inoltre tenere presente che il processo di costruzione di linee dell'indicatore continua in tempo reale in condizioni quando in una finestra di sicurezza nuove barre compaiono di volta in volta. E tutte le barre di storia sono spostati verso sinistra. Per avere la linea dell'indicatore disegnata correttamente (ogni punto riga sopra la barra) deve anche essere spostata insieme con barre. Quindi non c'è bisogno (necessità tecnica) di ri-index una matrice indicatore. La differenza fondamentale di una matrice indicatore da una matrice abituale è la seguente: Al momento in cui viene creata una nuova barra, valori di indice di elementi dell'array indicatori vengono modificate automaticamente dal terminale del cliente, ossia - il valore di ciascun indice indicatore matrice è maggiorato uno e la dimensione della matrice indicatore è aumentata di un elemento (con un indice zero). Ad esempio, la barra di zero in Fig. 116 (lasso di tempo H1) ha il tempo di apertura 06:00. Alle 7:00 apparirà una nuova barra nella finestra di sicurezza. Il bar aperto alle 6:00 otterrà automaticamente l'indice 1. Per avere la linea dell'indicatore disegnato correttamente su questa barra, terminale del cliente cambierà l'indice dell'elemento indicatore di matrice corrispondente alla barra aperta alle 6:00. Nella tabella di fig. 116 questo elemento è scritto nella prima riga. Insieme a che gli indici di tutti gli elementi di un array sarà aumentato dal terminale del cliente di uno. Un indice dell'elemento dell'array corrispondente alla barra aperto alle 6:00 otterrà il valore 1 (prima che fosse uguale a 0). L'array spia diventerà più grande di un elemento. L'indice di un nuovo elemento aggiunto sarà uguale a 0, il valore di questo elemento sarà un nuovo valore che riflette la coordinata della linea dell'indicatore su una barra zero. Questo valore viene calcolato nella speciale funzione start () su ogni tick. I calcoli della speciale funzione start () dovrebbero essere condotte in modo tale che non sono state effettuate azioni extra. Prima l'indicatore è collegato a un grafico, non riflette alcuna linee indicatrici (perché i valori di array indicatori non sono ancora definiti). Ecco perché al primo avvio della Start funzione speciale () valori indicatore array deve essere calcolato per tutti i bar, su cui deve essere disegnata la linea di indicazione. Nell'esempio analizzato questi sono tutti Bar presenti su un grafico (i calcoli iniziali possono essere condotte non per tutte le barre disponibili, ma per qualche ultima parte della storia è descritto in ulteriori esempi). Ar tutte le ulteriori avviamenti speciale funzione start () non è necessario calcolare i valori di indicatore array per tutte le barre di nuovo. Questi valori sono già calcolati e sono contenuti nella matrice dell'indicatore. È necessario calcolare il valore corrente della linea dell'indicatore solo su ogni nuovo tick della barra zero. Per l'applicazione della tecnologia descritta è molto utile funzione standard in MQL4 - IndicatorCounted (). Funzione IndicatorCounted () Questa funzione restituisce il numero di barre, che non sono stati modificati dopo l'ultima chiamata spia. Se l'indicatore non è mai stato collegato a un grafico, all'esecuzione primo avvio () il valore di Countedbars sarà pari a zero: Significa matrice indicatore non contiene alcun elemento con precedente valore predefinito, ecco perché l'intera matrice indicatore deve essere calcolato dall'inizio alla fine. L'array indicatore è calcolato dal bar più antico a quello zero. Indice dei più antichi bar, a partire dal quale calcoli devono essere avviati, è calcolata come segue: Supponiamo al momento di attaccare l'indicatore ci sono 300 bar in una finestra di mappa. Questo è il valore delle barre variabili predefinite. Come definito in precedenza, Countedbars è uguale a 0. Quindi, come risultato si ottiene che i indice della prima barra contati (l'ultima volta, a partire dal quale i calcoli dovrebbero essere condotte) è pari a 299. Tutti i valori degli elementi dell'array sono Indicatore calcolato nel ciclo while (): mentre i è compreso tra la prima barra contati (299) a quella attuale (0) inclusivamente, valori degli elementi dell'array indicatori sono calcolati per entrambe le linee indicatrici. Nota, valori mancanti di elementi di un array indicatori sono calcolati durante uno (il primo) avvio della speciale funzione start (). Durante i calcoli il terminale del cliente ricorda elementi, per cui sono stati calcolati i valori. L'ultima iterazione while () viene eseguita quando i è uguale a 0, cioè valori di array indicatori sono calcolati per il bar zero. Quando il ciclo è finito, l'inizio funzione speciale () termina la sua esecuzione e il controllo viene passato al terminale del cliente. Il terminale client a sua volta elabora tutti (in questo caso due) indicatore linee in accordo con i valori calcolati di elementi dell'array. Al successivo avvio tick () sarà avviato dal terminale del cliente di nuovo. Ulteriori azioni dipenderanno dalla situazione (ci sarà continuare ad analizzare l'esempio per 300 bar). Variante 1. Un nuovo tick arriva durante la formazione della corrente barra di zero (la situazione più comune). Figura. 117 mostra due zecche ricevuti dal terminale nei momenti di tempo t 1 e t 2. La situazione analizzata sarà lo stesso per entrambe le zecche. Consente di tracciare l'esecuzione di start () che è stato lanciato al momento t 2. Durante l'esecuzione della funzione start () verrà eseguita la seguente riga: IndicatorCounted () restituirà il valore 299, vale a dire dopo l'ultima partenza () chiamata 299 barre precedenti non sono state modificate. Come i valore di indice risultato sarà uguale a 0 (300-299-1): Significa nel ciclo successivo mentre () verranno calcolati i valori degli elementi dell'array con l'indice zero. In altre parole, viene calcolata la nuova posizione di una linea indicatore sulla barra zero. Quando il ciclo è terminato, start () si fermerà l'esecuzione e passerà il controllo al terminale del cliente. Variante 2. Un nuovo tick è il primo tick di una barra zero (accade di volta in volta). In questo caso il fatto di comparsa di una nuova barra è importante. Prima che il controllo viene passato alla speciale funzione start (), terminale del cliente attirerà ancora una volta tutte le barre presenti nella finestra di sicurezza e ri-index tutti indicatore matrici dichiarate (set in corrispondenza con buffer). Inoltre, terminale del cliente si ricorda che ci sono già 301 bar, e non 300 in una finestra cartografica. Figura. 118 contiene situazione in cui l'ultimo tick della barra precedente (al momento t 2) la funzione start () è stato avviato ed eseguito con successo. Ecco perché, anche se ora il primo bar (con indice 1) ha terminato al momento t 2 è stato calcolato dall'indicatore, funzione IndicatorCounted () restituirà valore che era sulla barra precedente. cioè 299: Nel prossimo indice righe i sarà calcolato, in questo caso per la prima tick di una nuova barra sarà uguale a 1 (301-299-1): Significa calcolo dei valori dell'indicatore di matrice a ciclo while () alla comparsa di una nuova barra sarà eseguita sia per l'ultima barra e per la nuova barra zero. Un po 'prima durante il re-indicizzazione di array indicatore del terminale del cliente aumentato le dimensioni di questi array. I valori di elementi di un array con zero indici non sono stati definiti prima che i calcoli nel ciclo. Durante calcoli nel ciclo questi elementi ottenere alcuni valori. Quando i calcoli in partenza () sono finiti, il controllo viene restituito al terminale del cliente. Dopo che il terminale del cliente sarà disegnare linee indicatore sulla barra a zero in base ai valori appena calcolati di elementi di un array con zero indici. Variante 3. Un nuovo segno di spunta è il primo segno di spunta di una nuova barra a zero, ma il penultimo segno di spunta non viene elaborato (caso raro). Figura. 119 mostra la situazione in cui è stata lanciata start () al primo segno di spunta di un nuovo bar al momento t 5. tempo precedente di questa funzione è stata avviata nel momento t 2. Tick che è venuto al terminale al momento t 3 (freccia rossa ) non è stato elaborato dall'indicatore. Questo perché start () tempo di esecuzione t 2 - t 4 è maggiore dell'intervallo tra zecche t 2 - t 3. Questo fatto viene rilevato dal terminale del cliente durante l'esecuzione di start () lanciato al momento t 5. Durante i calcoli della linea: IndicatorCounted () restituirà il valore 299 (). Questo valore è vero - dal momento dell'ultima chiamata indicatore di 299 bar non sono state modificate dopo (ora già) 301. Questo è il motivo per cui l'indice calcolato della prima (a sinistra) bar, dal quale devono essere avviati i calcoli dei valori degli elementi dell'array, sarà uguale a 1 (301-299-1): significa durante mentre esecuzione () verranno eseguite due iterazioni. Durante i primi uno valori degli elementi di un array con l'indice i 1 sarà calcolato, cioè Buf01 e Buf11. Non, dai calcoli momento cominciano, bar e gli array indicatori sono già re-indicizzati dal terminale del cliente (perché un nuovo bar ha iniziato, tra gli avviamenti di speciale funzione start ()). Ecco perché calcoli per elementi di array con indice 1 saranno calcolate sulla base della matrice-timeseries (massima e valori minimi di un prezzo bar) anche con l'indice 1: Durante la seconda iterazione while () valori per gli elementi con lo zero indici, ossia per la barra di zero, viene calcolato sulla base degli ultimi valori noti di array-timeseries. Utilizzando la tecnologia descritta per il calcolo degli indicatori personalizzati permette, in primo luogo, per garantire il calcolo dei valori di tutti gli elementi indicatore matrice indipendentemente dalla natura specifica della storia tick, e in secondo luogo, per condurre i calcoli solo per le barre innumerevoli, ovvero utilizzare le risorse economicamente calcolo . Non, un bar è considerata incalcolabile se il calcolo dei valori degli elementi di un indicatore array almeno per un ultimo tick della barra non viene eseguita. A partire l'indicatore userindicator. mq4 personalizzato in una finestra cartografica si vedrà due linee - una linea blu di spessore costruito su massimi da bar e una linea rossa tratteggiata costruito sui suoi minimi (Fig 120.). Va notato, che si può costruito un indicatore personalizzato, indicatori di linee che coinciderebbe con le linee di un indicatore tecnica analoga. Esso può essere fatto facilmente se come formule di calcolo del indicatore personalizzato, vengono utilizzate le stesse formule nell'indicatore tecnica. Per illustrare questo permette di migliorare il codice di programma analizzato nell'esempio precedente. Lasciate che l'indicatore di disegnare linee su valori medi di massimi e minimi di diversi ultime battute. E 'facile da condurre i calcoli necessari: abbiamo semplicemente bisogno di trovare i valori medi di elementi array-timeseries. Ad esempio, il valore di un array indicatore con l'indice 3 (ossia linea indicatrice coordinate per il terzo bar) sulla base degli ultimi cinque massimi è calcolata come segue: Buf03 (High3 High4 High5 High6 High7) 5 calcoli analoghe possono essere eseguite Affinché un indicatore linee costruite su minimi. Esempio di un semplice indicatore personalizzato averagevalue. mq4. linee indicatrici sono costruite su valori medi minimi e massimi di N barre. In questo esempio vi è un AverBars esterni variabili. Usando questa variabile un utente può indicare il numero di barre, di cui si calcola un valore medio. In start () questo valore viene utilizzato per il calcolo di un valore medio. Nel loop per la somma dei valori massimi e minimi viene calcolato per il numero di barre corrispondenti al valore delle AverBars variabili. Nei prossimi due valori righe di programma di elementi di matrice indicatori sono calcolati per le linee di indicatore corrispondente ai valori minimi e massimi. Il metodo di calcolo della media utilizzato qui viene applicata anche per i calcoli del indicatore tecnico Moving Average. Se attribuiamo l'indicatore personalizzato analizzato averagevalue. mq4 e l'indicatore tecnico Moving Average, vedremo tre linee indicatori. Se lo stesso periodo di calcolo della media è impostato per entrambi gli indicatori, linea della media mobile coinciderà con una delle linee di indicatore personalizzato (per questi parametri scopo descritto in Fig. 121 deve essere specificato nelle impostazioni degli indicatori tecnici). Figura. 121. linee coincidenti di un indicatore tecnico e un indicatore personalizzato (linea rossa). Così, utilizzando indicatore tecnico che un utente può costruire il riflesso di eventuali regolarità necessarie lavoro pratico. Personalizzati Indicatore opzioni di disegno Indicatore Lines in separata di Windows MQL4 offre un grande servizio per la costruzione di indicatori personalizzati che rende li utilizzano molto conveniente. In particolare, le linee degli indicatori possono essere disegnati in una finestra separata. Questo è utile quando i valori assoluti della linea di ampiezza indicatore è sostanzialmente più piccolo (o più) rispetto ai prezzi di sicurezza. Ad esempio, se ci interessa la differenza tra i valori medi di massimi e minimi della barra in un certo intervallo storico, seconda tempi questo valore sarà pari a circa da 0 a 50 punti (ad esempio per M15). Non è difficile costruire una linea di indicatori, ma in una finestra di sicurezza di questa linea sarà disegnata nel range 0 - 50 punti di un prezzo del titolo, cioè sostanzialmente inferiore del grafico riflette su schermo. È molto scomodo. Per disegnare linee dell'indicatore in una finestra separata (che si trova nella parte inferiore di una finestra di sicurezza), nella struttura direttiva (al programma di inizio) parametro indicatorseparatewindow deve essere specificato: Nel momento in cui un tale indicatore è collegato a una finestra di sicurezza , terminale del cliente crea una finestra separata sotto una tabella, nella quale saranno disegnate le linee indicatore calcolato nell'indicatore. A seconda delle impostazioni di colore e tipi di linee indicatori che saranno estratti in questo o quello stile. Limitare Storia Calcolo Spesso linee indicatrici contengono informazioni utili solo nella storia più recente. La parte delle linee di indicatori costruiti su vecchi bar (per esempio, 1 mese di età minuto lasso di tempo) può difficilmente essere considerato utile per prendere decisioni commerciali. Inoltre, se ci sono un sacco di bar in una finestra cartografica, il tempo investito nel calcolo e disegno di linee indicatore è irragionevolmente grande. Questo può essere critico nel debugging del programma, quando un programma è spesso compilato e quindi avviato. Ecco perché è necessario condurre calcoli non per tutta la storia, ma per la parte limitata della più recente storia bar. Per questo scopo una storia variabile esterna viene utilizzato nel seguente programma. Valore di questa variabile viene preso in considerazione nel calcolo dell'indice del primo (a sinistra) bar, a partire dal quale gli elementi di matrici indicatori devono essere calcolati. Ulteriori calcoli a ciclo while () sarà condotta per il numero di barre storia recente non più grandi di valore cronologico. Si noti, il metodo analizzato di limitare una storia di calcolo riguarda solo la parte di calcoli che si svolge nella prima partenza della speciale funzione start (). Inoltre, quando compaiono nuovi bar, nuove parti di linee indicatori saranno aggiunti nella parte destra, mentre l'immagine nella parte sinistra sarà conservata. Così la lunghezza della linea indicatore sarà aumentata durante tutto il tempo di funzionamento dell'indicatore. valore comune del parametro Storia è considerato circa 5000 bar. Esempio di un semplice indicatore personalizzato separatewindow. mq4. linee indicatrici sono disegnati in una finestra separata. Calcolo simili di una linea indicatore viene eseguita in indicatore tecnico AverageTrue Range. Figura. 122 mostra una linea indicatrice costruito dalla indicatore personalizzato separatewindow. mq4 in una finestra separata e una linea indicatore costruito da ATR in un'altra finestra. In questo caso le linee sono completamente identici, poiché periodo di calcolo della media è la stessa per entrambi gli indicatori - 5. Se questo parametro viene modificato in qualsiasi degli indicatori, la linea indicatore corrispondente cambierà. Figura. 122. tracciando una linea indicatore personalizzato in una finestra separata. linee identiche di un indicatore tecnico (ATR) e di un indicatore personalizzato (separatewindow. mq4). E 'anche evidente che la linea indicatore personalizzato è costruito non per l'intera larghezza dello schermo, ma per 50 ultime barre come specificato nella Storia variabile esterna. Se un commerciante ha bisogno di usare più grande intervallo di storia, il valore della variabile esterna può essere facilmente modificato tramite la finestra delle impostazioni indicatore personalizzato. Figura. 123 mostra una finestra di sicurezza, in cui l'indicatore della linea ci trascinati in un altro stile - come istogramma. Per ottenere un tale risultato di una riga è stata modificata nel codice del programma separatewindow. mq4 - altri stili di linea sono indicate: le altre parti di codice sono invariati. Figura. 123. Disegno indicatore personalizzato linea in una finestra separata (istogramma). Somiglianza di disegni di un indicatore tecnico (ATR) e di un indicatore personalizzato (separatewindow. mq4). Spostando Indicatore linee verticale e orizzontale in alcuni casi è necessario spostare una linea indicatrice. Esso può essere fatto facilmente MQL4 mezzi. Analizziamo un esempio, in cui la posizione delle linee indicatori in una finestra di sicurezza sono calcolate in accordo con i valori specificati da un utente. Esempio di un indicatore personalizzato displacement. mq4. Spostando linee indicatrici orizzontalmente e verticalmente. Per le linee di regolazione spostano in un grafico, ci sono due variabili esterne - LeftRight per lo spostamento orizzontale di tutte le linee e UpDown per spostare due linee tratteggiate verticali. L'algoritmo utilizzato per calcolare i valori di corrispondenti elementi array si basa su regole molto semplici: per spostare una linea orizzontale, assegnare il valore calcolato a un elemento array, l'indice che è superiore di LeftRight (per lo spostamento verso destra e meno per spostamento a destra) rispetto all'indice di una barra, per cui vengono effettuati i calcoli per lo spostamento di una linea verticale, UpDownPoint va aggiunto (per lo spostamento verso l'alto o penalizzato per spostare verso il basso) per ciascun valore di un array indicatore caratterizza posizione della linea iniziale Nella analizzato esempio indici sono calcolate in linea: Qui i è l'indice di una barra, per cui viene calcolato, k è un indice di un elemento indicatore array. Red indicatore di linea visualizzata dal terminale del cliente sulla base dell'indicatore di matrice Riga0 è spostato verso sinistra di 5 bar (in base alle impostazioni personalizzate, vedi fig. 124) dalla linea iniziale. In questo caso la linea iniziale è una media mobile con il periodo di media uguale a 5 la formula di calcolo MA è (HighiLowi) 2. In questo esempio la posizione della linea rossa è la base per il calcolo dei valori di matrice indicatori per altre due linee, cioè la loro posizione sulla carta. Le linee tratteggiate vengono calcolate in questo modo: l'uso di indice k per gli elementi di tutti gli array indicatore permette di eseguire calcoli per elementi di array Riga1, Riga2 sulla stessa barra come quello usato per il calcolo dei valori del corrispondente matrice di base Riga0. Come risultato linee tratteggiate sono spostati rispetto alla linea rossa per il valore specificato nella finestra impostazioni dell'indicatore, in questo caso di 30 punti (Fig. 124). Figura. 124. linea dell'indicatore rossa viene spostata a sinistra di 5 bar. linee tratteggiate indicatore si spostano rispetto alla linea rossa di 30 punti. Limitazioni di indicatori personalizzati Ci sono alcune limitazioni in MQL4 che dovrebbero essere presi in considerazione nella programmazione di indicatori personalizzati. C'è un gruppo di funzioni che possono essere utilizzati solo in indicatori personalizzati e non può essere utilizzato in Expert Advisor e gli script: IndicatorBuffers (), IndicatorCounted (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ( ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). D'altra parte, funzioni commerciali non possono essere usati come indicatori: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () e OrderModify (). Questo perché gli indicatori operano nel flusso di interfaccia (da non confondersi con Expert Advisors e script che operano nel proprio flusso). Questo è anche il motivo per algoritmi basati su loop non possono essere utilizzati in indicatori personalizzati. Inizio di un indicatore personalizzato contenente un ciclo infinito (in termini di tempo di esecuzione effettiva) può causare terminale del cliente riagganciare con ulteriore necessità di riavviare un computer. Le caratteristiche comparativi generali di Expert Advisors, gli script e gli indicatori sono contenuti nella tabella 2 combinati uso di programmi 'stato detto in precedenza che secondo MQL4 funzioni regole commerciali non può essere utilizzato in indicatori personalizzati, è per questo che per il trading automatico Expert Advisor o script dovrebbe essere usato. Tuttavia, la tecnologia per il risparmio della risorsa utilizzati per il calcolo degli indicatori (vedi Creazione di indicatori personalizzati) è ampiamente utilizzato per la creazione di programmi di trading. Nella maggior parte dei casi in indicatori personalizzati si può efficacemente calcolare i valori degli elementi indicatori di matrice necessari per la formazione di criteri commerciali e di formazione delle decisioni di trading in Expert Advisors. I calcoli eseguiti in indicatori personalizzati tecnicamente possono essere realizzati anche in Expert Advisor, ma questo può portare alla duplicazione di calcoli in diversi programmi applicativi e di spreco irragionevole delle risorse, e in alcuni casi (in cui vengono effettuati i calcoli ad alta intensità di risorse a lungo) - a una decisione commercio fatto tardi. Nei casi in cui è necessario utilizzare i risultati del calcolo di indicatori personalizzati in un consulente esperto o uno script, la funzione iCustom () può essere utilizzato. iCustom funzione () Calcolo della data indicatore personalizzato. L'indicatore personalizzato deve essere compilato (file. ex4) e si trova in Terminalcatalogueexpertsindicators directory. nome del simbolo di un titolo, sui dati di cui è da calcolare un indicatore - simbolo. NULL indica il simbolo corrente. lasso di tempo - periodo. Può essere uno dei periodi del grafico. 0 indica il periodo del grafico corrente. Nome - nome del indicatore personalizzato. . - Elenco dei parametri (se necessario). parametri passati devono corrispondere con l'ordine di dichiarare e il tipo di variabili esterne di un indicatore personalizzato. Modalità - Indice di una linea dell'indicatore. Può essere da - a 7 e deve corrispondere al indice utilizzato da una delle funzioni SetIndexBar. spostare - Indice del valore ottenuto da un buffer indicatore (spostare indietro rispetto ad una barra di corrente di un numero specificato di bar). Consente di considerare come iCustom () può essere utilizzato in pratica. Cerchiamo di risolvere il seguente problema: Problema 30. Una strategia di trading si basa sui dati di indicatore personalizzato rocseparate. mq4. Se la linea ROC nell'arco di tempo corrente (arancione) attraversa una linea levigata tasso medio (rosso di spessore) al di sotto di un certo livello dal basso verso l'alto, questo è un criterio rilevante per acquistare (aperta Compra e vicino Sell). Se ci sono le condizioni contrarie, considerare questo un criterio pertinente da vendere. Scrivere un codice che implementa questa strategia. Il principio di costruzione dell'indicatore personalizzato rocseparate. mq4 è descritto in dettaglio nella sezione personalizzata Indicatore ROC (Prezzo Rate of Change). Figura. 131 illustra due punti, in cui la linea ROC nell'arco di tempo corrente (M15) attraversa il tasso levigata della linea di cambiamento. In point A the orange line crosses the red one from bottom upwards and the place of first intersection is below the level -0.001. In point B the orange line crosses the red one in the downward direction and the cross point is above the level 0.001. The fact of this crossing must be detected in the Expert Advisor and be considered as a signal to buy (point A - close Sell and open Buy) or to sell (point B - close Buy and open Sell). Fig. 131. Crossing of custom indicator lines is considered as a trading criterion. When solving such problems a ready Expert Advisor can be used, changing the order of calculation trading criteria in it. In this case we can take as a basis the Expert Advisor tradingexpert. mq4 described in the section Simple Expert Advisor. The EA shared. mq4 calculating trading criteria on the basis of a custom indicator will look loke this: Let us analyze what amendments were made in the source code (tradingexpert. mq4 ). The main part of the Expert Advisor used as basic has not changed. Changes have been made in two blocks - block 1-2- and block 5-6. In the block 5-6 trading criteria are calculated. In the described EA a trading strategy is based on two trading criteria - criterion to open Buy and criterion to open Sell. The strategy used in the Expert Advisor allows the presence of only one opened market order, pending orders are not allowed. The strategy also presupposes closing an opposite order when a criterion for opening triggers for example, if criterion to open a Buy order is relevant, it means that a Sell order must be closed. For using in the EA shared. mq4 results of calculations performed in the custom indicator rocseparate. mq4, function iCustom() must be executed: In this case formal parameters specified in iCustom() call denote the following: NULL - calculations in the indicator are performed based on data of the current security in this case the EA is attached to EURUSD window, so data of EURUSD will be used (see Fig. 131 ) 0 - in calculations data of the current timeframe are used in this case the current timeframe is M15, so data corresponding to M15 will be used quotrocseparatequot - name of a custom indicator, in which calculations will be made. H, P,B, A - list of adjustable parameters. In this case the custom indicator rocseparate. mq4 has adjustable parameters (block 2-3 of rocseparate. mq4 code). For a user to be able to set up values of these parameters from the EA, they are specified in the list of passed parameters of the function iCustom(). In the Expert Advisor values of these parameters can differ from those specified in the indicator. In such a case during calculations in the indicator exactly these passed values will be used. These parameters denote the following: H - number of bars in calculation history P - period of calculation MA B - number of bars for rate calculation A - number of bars for smoothing. (the meaning of these parameters is explained in details in the section Custom Indicator ROC (Price Rate of Change) . 1 ( 5 ) - index line of the indicator. In the custom indicator rocseparate. mq4 6 indicator arrays are used. ROC line in the current timeframe (orange) is constructed on the basis of Line1 values, for which buffer with index 1 is used. Smoothed average rate line is based on values of Line5 array elements, index of the used buffer is 5. 0 - index of value obtained from an indicator buffer (shift back relative to a current bar by the specified number of periods). In this case values of indicator lines on the zero bar are used, that is why index 0 is specified. For a user to be able to change the adjustable indicator parameters in the EA manually, external variables are specified in block 1a-1b (of the Expert Advisor ). In block 5-5a values of these parameters are assigned to other variables with shorter names - this is done for convenience of code presentation in block 5a-5b. Thus a user can specify in shared. mq4 parameters, with which calculations in the custom indicator rocseparate. mq4 will be conducted. After execution iCustom() function will return value corresponding to a specified element value of specified indicator array calculated in the indicator using specified values of adjustable parameters. During practical operation it is convenient to see in a security window lines of the indicator, array elements of which are used in the Expert Advisor (see Fig. 131 ). At the same time execution of iCustom() is not connected with the presence of the indicator in the security window, as well as with the values of its adjustable parameters. The execution of iCustom() does not require the attachment of a corresponding indicator to a security window. As well as the call of iCustom() from any application program does not result in the attachment of a corresponding indicator to a security window. Attachment of a technical indicator to a security window also does not lead to the call of iCustom in any application program. Trading criteria in the EA (block 5-6) are calculated on the basis of array element values obtained using iCustom() function. For example a criterion for opening Buy and closing Sell are calculated the following way: If the last known value of a smoothed average rate line (L5) is less than the specified level (value of the adjustable parameter Level 0.001) and the last known value of ROC line in the current timeframe (L1) is larger than the smoothed average rate line (L5), the criterion for opening a Buy order and closing a Sell order is considered relevant. For the confirmation of relevance of opposite criteria reflecting conditions are used. Trading criteria accepted in this example are used for educational purpose only and must not be considered as a guideline when trading on a real account. Moving Average The Moving Average Technical Indicator shows the mean instrument price value for a certain period of time. Quando si calcola la media mobile, una media di fuori del prezzo di uno strumento per questo periodo di tempo. Mentre le variazioni dei prezzi, la sua media sia aumenta in movimento, o diminuisce. Ci sono quattro diversi tipi di medie mobili: semplici (noto anche come aritmetica), esponenziale. Levigata e ponderata. Media mobile può essere calcolato per ogni insieme di dati sequenziali, tra cui l'apertura e prezzi di chiusura, prezzi alti e più bassi, il volume di scambio o altri indicatori. E 'spesso il caso quando si utilizzano doppi medie mobili. L'unica cosa in cui le medie mobili di diversi tipi divergono notevolmente gli uni dagli altri, è quando i coefficienti di peso, che sono assegnati gli ultimi dati, sono diversi. In caso stiamo parlando di semplice media mobile. tutti i prezzi del periodo di tempo in questione sono uguali in valore. Media mobile esponenziale e lineare ponderata media mobile attribuiscono più valore agli ultimi prezzi. Il modo più comune per interpretare la media mobile dei prezzi è quello di confrontare la sua dinamica per l'azione dei prezzi. Quando il prezzo di uno strumento sale al di sopra della sua media mobile, appare un segnale di acquisto, se il prezzo scende al di sotto della sua media mobile, quello che abbiamo è un segnale di vendita. Questo sistema di scambio, che si basa sulla media mobile, non è progettato per fornire ingresso nel mercato nel suo punto più basso, e la sua uscita a destra sulla visiera. Esso permette di agire secondo la seguente tendenza: acquistare subito dopo i prezzi raggiungono il fondo, e di vendere subito dopo i prezzi hanno raggiunto il loro picco. Le medie mobili possono essere applicate anche agli indicatori. È qui che l'interpretazione di indicatori medie mobili è simile all'interpretazione di prezzo medie mobili: se l'indicatore sale al di sopra della sua media mobile, il che significa che il movimento dell'indicatore ascendente è probabile che continui: Se l'indicatore scende al di sotto della sua media mobile, questo significa che è probabile che continuare ad andare verso il basso. Qui ci sono i tipi di medie mobili sul grafico: media mobile semplice (SMA) media mobile esponenziale (EMA) Lisciata Moving Average (SMMA) lineare ponderata media mobile (LWMA) È possibile verificare i segnali di commercio di questo indicatore con la creazione di un Expert Advisor in MQL5 Wizard. Calcolo media mobile semplice (SMA) semplice, in altre parole, aritmetica media mobile è calcolata sommando i prezzi di chiusura strumento su un certo numero di singoli periodi (ad esempio, 12 ore). Questo valore viene quindi diviso per il numero di tali periodi. SMA SUM (CLOSE (i), N) N SUM somma CLOSE (i) periodo corrente vicino prezzo numero N di periodi di calcolo. Media mobile esponenziale (EMA) media mobile esponenziale lisciato si calcola sommando di una certa quota del prezzo di chiusura corrente al valore precedente della media mobile. Con medie mobili esponenziale levigati, gli ultimi prezzi di chiusura sono di più valore. P-cento media mobile esponenziale sarà simile: EMA (CLOSE (i) P) (EMA (i - 1) (1 - P)) CLOSE (i) attuale periodo di stretta prezzo EMA (i - 1) valore della media mobile di un periodo precedente P la percentuale di utilizzare il valore del prezzo. Lisciato media mobile (SMMA) Il primo valore di questa media mobile lisciato è calcolato come media mobile semplice (SMA): SUM1 SUM (CLOSE (i), N) La seconda media mobile viene calcolato secondo questa formula: SMMA (i) (SMMA1 (N-1) CLOSE (i)) N Riuscendo medie mobili sono calcolate secondo la seguente formula: PREVSUM SMMA (i - 1) N SMMA (i) (PREVSUM - SMMA (i - 1) CLOSE (i)) N sUM somma SUM1 somma totale dei prezzi di chiusura per periodi N è contato dal precedente PREVSUM bar somma della barra precedente SMMA livellata (i-1) lisciato media della barra precedente SMMA (i) lo spostamento levigata media della barra corrente in movimento (tranne il primo) cLOSE (i) corrente periodo vicino smoothing prezzo N. Dopo l'aritmetica conversioni La formula può essere semplificata: SMMA (i) (SMMA (i - 1) (N - 1) CLOSE (i)) N lineare ponderata media mobile (LWMA) Nel caso di ponderata media mobile, i dati più recenti è di più valore di quanto più precoce di dati. Weighted moving average is calculated by multiplying each one of the closing prices within the considered series, by a certain weight coefficient: LWMA SUM (CLOSE (i) i, N) SUM (i, N) SUM sum CLOSE(i) current close price SUM (i, N) total sum of weight coefficients N smoothing period.
No comments:
Post a Comment