Ciao Roberto, è possibile creare una condizione che esprima semplicemente il valore di profit factor? Vorrei che un TS abbia come requisito un profit factor delle ultime 20 operazioni chiuse maggiore di 2.
Penso che bisogna separare le operazioni chiuse positive, positionPerf(x)>0 da quelle negative positionPerf(x)<0, e sapere con strategyProfit chiaramente il guadagno/perdita di queste operazioni. Poi “forse” usare un doppio Summation per conoscere i profitti di quelle positive delle ultime venti e di quelle negative, poi dividere il risultato di questi due Summation per ottenere il proft factor.
Questa l’idea generica che mi è venuta in mente (probabilmente conoscerai un modo molto più semplice). Riesci a scrivermi la condizione? Grazie
Qualcosa di simile, ma usando i vettori (array) sarà più semplice.
Questo è il codice, alla fine le variabili PROFITTO e PERDITA conterranno il numero di operazioni in profitto ed in perdita. Tu potrai utilizzarli come vuoi:
ONCE MaxOperazioni = 20
If BarIndex = 0 Then
For i = 1 to MaxOperazioni
$Risultato[i] = 0
Next
Endif
If StrategyProfit <> StrategyProfit[1] Then
Profitto = 0
Perdita = 0
For i = 1 to MaxOperazioni - 1
$Risultato[i] = $Risultato[i+1]
If $Risultato[i] > 0 then
Profitto = Profitto + 1
Elsif $Risultato[i] < 0 then
Perdita = Perdita + 1
Endif
Next
$Risultato[MaxOperazioni] = StrategyProfit - StrategyProfit[1]
If $Risultato[MaxOperazioni] > 0 then
Profitto = Profitto + 1
Elsif $Risultato[MaxOperazioni] < 0 then
Perdita = Perdita + 1
Endif
Endif
Ciao Roberto, ho provato a scrivere la condizione del ProfitFactor con le due variabile che hai indicato, aggiungendo la condizione alle altre di entrata (vd sotto), ma il TS non gira (non fa operazioni). Sai quale può essere il motivo?
cProfitFactor=(Profitto/Perdita)>=2
Evidentemente non è >= 2.
Hai provato ad usare GRAPH per vedere i valori di PROFITTO e PERDITA (e poi verificarne la correttezza con le operazioni fatte) ?
Ciao Roberto, non gira proprio il TS, non posso vedere con i graph i valori di profitto e perdita. Lo hai provato su un tuo TS se gira?
Non l’ho provato. ma tu devi verificare se registra valori corretti senza mettere la condizione del fattore.
Una volta verificato che va bene, la questioine è solo del fattore.
Plottando il TS con solo i graph di profitto (verde) e perdita(rosso), senza inserire la condizione sopra riportata funziona (vd immagine).
Potresti riscrivermi quindi meglio la condizione? (che poi non è altro che il rapporto di profitto/perdita che deve esser maggiore di un certo livello, non capisco perchè scritta come sopra non fa girare per niente il TS). GRAZIE
La tua condizione è corretta, se anche il numero di operazioni in Perdita e Profitto corrispondono, c’è poco da fare, significa che il rapporto è < 2.
Hai verificato, con GRAPH, che i numeri riportati siano corretti? Quante perdite c’erano e quanti profitti?
Manualmente erano>= 2 oppure inferiori?
Dipende dalle condizionidel tuo TS, questo funziona:
DEFPARAM CumulateOrders = FALSE
ONCE MaxOperazioni = 20
If BarIndex = 0 Then
For i = 1 to MaxOperazioni
$Risultato[i] = 0
Next
Endif
If StrategyProfit <> StrategyProfit[1] Then
Profitto = 0
Perdita = 0
For i = 1 to MaxOperazioni - 1
$Risultato[i] = $Risultato[i+1]
If $Risultato[i] > 0 then
Profitto = Profitto + 1
Elsif $Risultato[i] < 0 then
Perdita = Perdita + 1
Endif
Next
$Risultato[MaxOperazioni] = StrategyProfit - StrategyProfit[1]
If $Risultato[MaxOperazioni] > 0 then
Profitto = Profitto + 1
Elsif $Risultato[MaxOperazioni] < 0 then
Perdita = Perdita + 1
Endif
Endif
IF close crosses over average[200] and not LongOnMarket Then
BUY at Market
elsIF close crosses under average[200] and not ShortOnMarket Then
sellshort at Market
endif
set target pprofit 100
set stop ploss 500
//
GRAPH Perdita coloured(255,0,0,255)
GRAPH Profitto coloured(0,128,0,200)
graph (Profitto/Perdita) >= 2 coloured(0,0,255,255)
Ho capito quak’è il problema.
Quando parte il rapporto non può essere che 0, quindi < 2 e non apre operazioni.
Modifica la condizione come segue;
Once cProfitFactor = 1
If (Profitto + Perdita) > 20 Then
cProfitFactor=(Profitto/Perdita)>=2
Endif
Però funziona solo all’inizio e solo se nelle prime 20 operazioni ce ne sono almeno 2/3 in profitto.
In ogni caso se arriva a < 2 si blocca e non permette al TS di recuperare,
Secondo me è proprio la logica della condizione che non può essere applicata, oppure potresti calcolare una media di quel rapporto e andare avanti solo se non scende sotto un certo livello, ma 1.2-1.4 non di più.
Infatti, gira ma ho visto che si bloccava. Provo a fare delle prove con una media. Si potrebbe comunque utilizzare un filtro di performance più semplice del profit factor tipo la media del profitto delle ultime n operazioni.
Si, certo.
Il problema è non bloccarlo del tutto, ad esempio 10 o 20 o N barre, ma poi permettergli di ricominciare.