Bonjour a tous,
Etant informaticien de formation, j'ai écris ce petit algo qui donne de bonne performance mais trop de faux signaux. Sur le DAX en UT 5M
Condition d'entrée en position pour un achat - et inversement pour une vente :
1/ Croisement de la Tenkan et Kijun a la hausse
2/ Dans les 4 bougies suivants le croisement, il faut que les prix clôture au dessus du nuage.
J' ai rajoute des filtres sur le RSI et un money managment pour ne pas dépasser un certain montant par trade
Le SL est place sur la borne oppose du nuage
Le TP est pris des que la Tenkan croise la Kijun dans le sens inverse
Résultat des courses, belle courbe de gain mais bcp de faux signaux.
J'ai pas mal d'expérience dans la programmation donc si vous avez une idée comment filtrer mieux, dites le moi je le coderai (même si le filtre vous parait compliquer).
Remarque importante : dans l'optique ou nous arrivons ensemble a faire un algo rentable, merci de ne pas le diffuser ni le vendre...
Voici le code, et le backtest en PJ :
// Conditions pour ouvrir une position acheteuse// Définition des paramètres du code
DEFPARAM CumulateOrders = false // Cumul des positions désactivé
DEFPARAM Preloadbars = 1000
REINV = 0
LEVIER = 1
IF REINV = 0 THEN
n = levier
ELSIF REINV = 1 THEN
capital = 1500 + strategyprofit
n = (capital / 1500)*levier
IF n < 1 THEN
n=1
ENDIF
//n = round(n)
ENDIF
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 080000
timeEnterBefore = time >= noEntryBeforeTime
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 200000
timeEnterAfter = time < noEntryAfterTime
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
LongOK = 1
ShortOK = 1
//CALCUL ISHIMOKU 5M
Tenkansen = (highest[9](high)+lowest[9](low))/2
Kijunsen = (highest[26](high)+lowest[26](low))/2
SSpanA = (Tenkansen[26]+Kijunsen[26])/2
SSpanB = (highest[52](high[26])+lowest[52](low[26]))/2
signalAchat = Tenkansen crosses over Kijunsen
annulationSignalAchat = Tenkansen crosses under Kijunsen
signalVente = Tenkansen crosses under Kijunsen
annulationSignalVente = Tenkansen crosses over Kijunsen
//stockage du numero de la bougie qui porte le signal d'achat
if (signalAchat) and (buyBarNumber = 0) then
buyBarNumber = barindex
endif
//stockage du numero de la bougie qui porte le signal de vente
if (signalVente) and (sellBarNumber = 0) then
sellBarNumber = barindex
endif
//invalidation du signal après la 4eme bougie
if((barindex - buyBarNumber)>=4) OR annulationSignalAchat then
buyBarNumber = 0
endif
//invalidation du signal après la 4eme bougie
if((barindex - sellBarNumber)>=4) OR annulationSignalVente then
sellBarNumber = 0
endif
StoplossAchat = close - SSpanB
StoplossVente = SSpanA - close
ca1 = close > SSpanA ANd SSpanA >SSpanB AND RSI[14] < 70
ca2 = abs(StoplossAchat) < 90 AND abs(StoplossAchat) > 20
cv1 = close < SSpanA ANd SSpanA <SSpanB AND RSI[14] < 41
cv2 = abs(StoplossVente) < 60 AND abs(StoplossVente) > 20
//********************
//GESTION ACHAT
//********************
if(not onmarket and buyBarNumber <> 0 and timeEnterBefore and timeEnterAfter and not daysForbiddenEntry and ca1 and ca2 and longok) then
buy n contracts at market
set stop ploss StoplossAchat
endif
beLongLevel = 60
beStopLevelLong = 1
IF LONGONMARKET THEN
IF newSL=0 AND close-tradeprice(1)>=beLongLevel*pipsize THEN
newSL = tradeprice(1)+beStopLevelLong*pipsize
ENDIF
ENDIF
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF newSL>0 THEN
SELL AT newSL STOP
ENDIF
//********************
//GESTION Vente
//********************
if(not onmarket and sellBarNumber <> 0 and timeEnterBefore and timeEnterAfter and not daysForbiddenEntry and cv1 and cv2 and shortok) then
sellshort n contracts at market
set stop ploss StoplossVente
endif
beShortLevel = 60
beStopLevelShort = 1
IF SHORTONMARKET THEN
IF newSL=0 AND tradeprice(1)-close>=beShortLevel*pipsize THEN
newSL = tradeprice(1)-beStopLevelShort*pipsize
ENDIF
ENDIF
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF newSL>0 THEN
EXITSHORT AT newSL STOP
ENDIF
IF ONMARKET THEN
IF annulationSignalAchat THEN
sell at market
ENDIF
IF annulationSignalVente THEN
exitshort at market
ENDIF
IF dayofweek = 5 AND time >= 225900 THEN
exitshort at market
sell at market
ENDIF
ENDIF
Attention, ce code n'est en aucun cas à utiliser sur un compte réel. Maiqq uniquement sur un compte demo !!!!!
Dernière édition par
oliver87 le 13 Oct 2020, 02:36, édité 1 fois.