Buongiorno,
in relazione ad un altro argomento.. Vorrei calcolare la media mobile a n periodi dei volumi ma solo con riferimento a delle specifiche barre orarie, esempio: media mobile degli ultimi 20 periodi ma solo sulla barra della prima ora di negoziazione. Che tipo di codice possono usare per un indicatore o un sistema di trading? Grazie mille
Quando devi porre nuove domande non correlate ad altre già fatte, anche se simili, inizia una nuova discussione. Grazie 🙂
Adesso ho iniziato io questa nuova discussione.
Puoi usare l’indicatore TRSMA che puoi trovare a questo link https://www.prorealcode.com/prorealtime-indicators/time-range-moving-averages-simple-exponential-weighted-trsma-trema-trwma/.
Comuque te lo riporto qui con la modifca per il VOLUME (anziché CLOSE) e con gli orari tra le 9 e le 10 (dalle 090000 alle 100000):
// TRSMA
//
// Time Range Simple Moving Average
//
DEFPARAM CalculateOnLastBars = 2000
Periods = 20
StartTime = 090000
EndTime = 100000
//
i = 0
TRSMA = 0
FOR j = 0 TO 3000
IF opentime[j] >= StartTime AND opentime[j] <= EndTime THEN
TRSMA = TRSMA + volume[j]//close[j]
i = i + 1
IF i = Periods THEN
BREAK
ENDIF
ENDIF
NEXT
TRSMA = (TRSMA / Periods)
IF TRSMA = 0 THEN
TRSMA = volume//close
ENDIF
Return TRSMA AS "TRSMA"
Buongiorno, grazie per la pronta risposta. Non trovo corrispondenza però tra i valori dell’indicatore e i dati che posso elaborare su excel
| data |
Volumi |
MM20 excel |
Indicatore |
| 15/01/2025 |
4312 |
|
|
| 16/01/2025 |
7730 |
|
|
| 17/01/2025 |
5772 |
|
|
| 20/01/2025 |
3436 |
|
|
| 21/01/2025 |
3102 |
4870 |
|
| 22/01/2025 |
5952 |
5051 |
|
| 23/01/2025 |
3884 |
4884 |
|
| 24/01/2025 |
3658 |
4731 |
|
| 27/01/2025 |
7408 |
5028 |
|
| 28/01/2025 |
4946 |
5020 |
|
| 29/01/2025 |
3791 |
4908 |
|
| 30/01/2025 |
3744 |
4811 |
|
| 31/01/2025 |
3614 |
4719 |
|
| 03/02/2025 |
9195 |
5039 |
|
| 04/02/2025 |
6913 |
5164 |
|
| 05/02/2025 |
4516 |
5123 |
|
| 06/02/2025 |
5568 |
5149 |
|
| 07/02/2025 |
5606 |
5175 |
|
| 10/02/2025 |
4466 |
5138 |
|
| 11/02/2025 |
5672 |
5164 |
4050 |
| 12/02/2025 |
5179 |
5208 |
4136 |
| 13/02/2025 |
8737 |
5258 |
4434 |
| 14/02/2025 |
6601 |
5299 |
4610 |
Nella tabella ho riportato: 1) colonna 1 volumi della prima ora del dax 2) colonna 2 i volumi della media con 20 valori (mettendo anche l’ultimo) 3) colonna 3 i valori dell’indicatore. Mi aspetterei che l’indicatore desse un un valore uguale o molto simile a quello calcolato su excel. Cosa non quadra? Come faccio ad avere quei valori che calcolo con excel? Inoltre, come faccio ad usare questo dato in un trading system (funzione call forse). Esempio se i volumi della prima ora superano il valore calcolato dall’indicatore compra ecc. Potresti farmi un esempio semplice di codice.
P.S. Si hai ragione dovevo iniziare un nuovo topic, grazie per l’indicazione
Qual’è la prima ora del Dax?
La prima ora (rilevante) intendevo quella dei tuoi codici ossia dalle 9 alle 10. Sono i volumi dalle 9 alle 10 confrontati con i valori dell’indicatore così come mi appare inserendo il codice nella piattaforma
Verificherò appena possibile.
Ad esempio ho messo questo semplice indicatore che mi riporta effettivamente i volumi necessari. Il problema è che vorrei solo una barra per ogni giorno anziché tutte le 21 uguali per tutte le ore di trading. In questo modo calcolando una media mobile a n periodi il calcolo sarebbe corretto, ma non so fare uscire una sola. Non so se ci si può arrivare da questa strada come spunto.
TimeFrame (hourly, UpdateOnClose)
IF TIME=100000 THEN
VOL=volume
endif
RETURN VOL
Ho trovato alcuni errori logici nel codice (c’erano anche degli errori dei dati nel tuo file eXcel, come da foto allegata). Questa è la versione aggiornata:
// TRSMA sul Volume
//
// Time Range Simple Moving Average
//
DEFPARAM CalculateOnLastBars = 2000
Periods = 20
StartTime = 090000
EndTime = 100000
Periods = max(2,min(999,Periods))
StartTime = max(0,min(240000,StartTime))
EndTime = max(0,min(240000,EndTime))
//
i = 0
TRSMA = 0
FOR j = 0 TO 2000
IF opentime[j] >= StartTime AND opentime[j] < EndTime THEN
TRSMA = TRSMA + volume[j]
i = i + 1
IF i = Periods THEN
BREAK
ENDIF
ENDIF
NEXT
TRSMA = (TRSMA / Periods)
IF TRSMA = 0 THEN
TRSMA = volume
ENDIF
Return TRSMA AS "TRSMA"
Ok grazie funziona. Ultime due cose:
- come faccio ad adattarlo a time frame diversi? Ad esempio sui volumi delle barre a 15 minuti? Ad esempio mettendo startime=091500 e endtime=093000 il grafico diventa solo una scaletta. Non capisco quali altri parametri devo modificare e in che modo
- come faccio ad usare il parametro in un sistema di trading? Per esempio per dire un semplice sistema: se il volume dalle 9 alle 10 o dalle 15 alle 16 supera il trsma in quell’ora allora compra o vendi? Grazie in anticipo
E’ una scaletta perché dopo le 093000 non cambia più fino al giorno dopo.
Non è possibile fare altrimenti.