Salve a tutti, mi serve creare un codice che compra solo se il prezzo ha raggiunto il massimo degli ultimi 10 giorni peró se entro 5 giorni non lo raggiunge allora non compra
Se deve comprare quando ha raggiunto il prezzo, a cosa serve verificare che lo raggiunga entro 5 giorni?
Mi serve per una parte di un programma in cui si compra se: la media mobile veloce incrocia quella quella lenta a rialzo e se il prezzo è maggiore o uguale al prezzo maggiore degli ultimi 10 periodi, però se entro 5 giorni il prezzo non raggiunge il massimo allora non entro.
Spero di essere stato chiaro.
Hai grosso modo ripetuto, in modo leggermente diverso, quanto detto nel tuo primo post.
Ad ogni modo cerco di spiegarti quello che penso tu intendessi dire:
- cercare un incrocio rialzista tra medua veloce e lenta (io ho fatto un esenpio con due esponenziali, a 8 e 30) e, contemporaneamente,
- che la candela abbia fatto il nuovo MASSIMO delle ultime 10 candele
- supponendo che la CHIUSURA sia inferiore al MASSIMO di cui al punto precedente (altrimenti tutta la procedura non serve), entrare quando il prezzo supererà detto MASSIMO, purché avvenga entro 5 candele dall’incrocio
Nella foto ho evidenziato un rettangolo che va dall’incrocio alle 10 precedenti candele.
La freccia ARANCIO indica il prezzo di CHIUSURA e quella VERDE il MASSIMO di cui al punto 2. Quindi la strategia dovrebbe fare entrare LONG al superamento di detto massimo purché avvenga entro le 5 candele successive).
Ho capito bene?
Mi potreste aiutare a scrive il codice della scadenza entro i 5 giorni?
Ecco fatto, provala e fammi sapere:
DEFPARAM CumulateOrders = false
ONCE Condizione = 0
MediaVeloce = Average[8,1](close)
MediaLenta = Average[30,1](close)
IF OnMarket OR summation[5](Condizione[1]) THEN
Condizione = 0
ENDIF
IF Condizione = 0 AND Not OnMarket THEN
Incrocio = MediaVeloce CROSSES OVER MediaLenta
Massimo = (high = highest[10](high))
Prezzo = high
Condizione = Incrocio AND Massimo
ENDIF
IF Condizione AND not OnMarket THEN
BUY 1 CONTRACTS AT Prezzo STOP
ENDIF
Ho provato il programma e per vedere se funzionasse ho messo anche un modo per uscire dalle posizioni long ma non so perché entra ed esce a mercato in modo impreciso o non entra proprio; forse ho sbagliato a programmare. Il programma è il seguente
DEFPARAM CumulateOrders = false
ONCE Condizione = 0
MediaVeloce = Average[8,1](close)
MediaLenta = Average[30,1](close)
IF OnMarket OR summation[5](Condizione[1]) THEN
Condizione = 0
ENDIF
IF Condizione = 0 AND Not OnMarket THEN
Incrocio = MediaVeloce CROSSES OVER MediaLenta
Massimo = (high = highest[10](high))
Prezzo = high
Condizione = Incrocio AND Massimo
ENDIF
IF Condizione AND not OnMarket THEN
BUY 1 CONTRACTS AT Prezzo STOP
ENDIF
//
MediaVeloce = Average[8,1](close)
MediaLenta = Average[30,1](close)
c1= MediaVeloce[1]< MediaLenta[1]
IF c1 THEN
SELL AT MARKET
ENDIF
Ho messo l’immagine di dove dovrebbe entrare long ma non entra. In oltre non ho capito nel programma che hai scritto cosa vuol dire ONCE Condizione = 0 e
IF OnMarket OR summation[5](Condizione[1]) THEN
Condizione = 0
ENDIF
La prima entrata NON doveva esserci, in quanto entro le 5 barre il massimo non è stato raggiunto.
La seconda NON doveva esserci perché ha fatto il massimo, ma non in presenza d’incrocio.
Le tue modifiche vanno bene.
Salve volevo chiederti se è corretto questo programma fatto con MACD e sempre con la scadenza entro 5 giorni. Perché alcune volte entra a mercato ma non dopo i 5 giorni ( foto).
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
ONCE Condizione = 0
// Condizioni per entrare su posizioni long
indicator1 = MACD[12,26,9](close)
IF Condizione = 0 THEN
Massimo = (high = highest[10](high))
c1 = (indicator1 > 0)
Prezzo = high
Condizione = c1 AND Massimo
ENDIF
IF OnMarket OR summation[5](Condizione[1]) THEN
Condizione = 0
ENDIF
IF Condizione THEN
BUY 1 CONTRACTS AT Prezzo STOP
ENDIF
// Condizioni per uscire da posizioni long
indicator2 = MACD[12,26,9](close)
c2 = (indicator2 < 0)
IF c2 THEN
SELL AT MARKET
ENDIF
// Definizione dei parametri del codice
ONCE Condizione1 = 0
// Condizioni per entrare su posizioni long
indicator3 = MACD[12,26,9](close)
IF Condizione1 = 0 THEN
Minimo = (low = lowest[10](low))
c3 = (indicator3 < 0)
Prezzo1 = low
Condizione1 = c3 AND Minimo
ENDIF
IF OnMarket OR summation[5](Condizione1[1]) THEN
Condizione1 = 0
ENDIF
IF Condizione1 THEN
SELLSHORT 1 CONTRACTS AT Prezzo1 STOP
ENDIF
// Condizioni per uscire da posizioni long
indicator4 = MACD[12,26,9](close)
c4 = (indicator4 > 0)
IF c4 THEN
EXITSHORT AT MARKET
ENDIF