Bonjour,
J’ai trouvé cette stratégie qui semble intéressante, elle utilise des points pivots :
https://forexuseful.com/pivot-trading-for-profit-with-our-free-strategy/
On entre “buy limit” si le cours touche R2, stop loss à R3 et take profit à R1.
A l’inverse pour les shorts.
Voici le code :
Defparam cumulateorders = false
REINV = 0
IF REINV = 0 THEN
n = 2
ELSIF REINV = 1 THEN
capital = 10000 + strategyprofit
n = (capital / 10000)*2
ENDIF
IF dayofweek = 1 THEN
Ht = DHigh(2)
Bs = DLow(2)
C = DClose(2)
ENDIF
IF dayofweek >=2 and dayofweek < 6 THEN
Ht = DHigh(1)
Bs = DLow(1)
C = DClose(1)
ENDIF
Pivot = (Ht + Bs + C) / 3
Res3 = Pivot + ((Ht - Bs)*2)
Res2 = Pivot + Ht - Bs
Res1 = (2 * Pivot) - Bs
Sup1 = (2 * Pivot) - Ht
Sup2 = Pivot - (Ht - Bs)
Sup3 = Pivot - ((Ht - Bs)*2)
Ctime = time > 070000 and time < 180000
IF Ctime and close > Sup2 and close < Res2 THEN
buy n shares at Sup2 limit
sellshort n shares at Res2 limit
ENDIF
IF longonmarket THEN
//sl = Sup2 - Sup3
//tp = Sup1 - Sup2
//set stop loss sl
//set target profit tp
sell at Sup1 limit
sell at Sup3 stop
ENDIF
IF shortonmarket THEN
//sl = Res3 - Res2
//tp = Res2 - Res1
//set stop loss sl
//set target profit tp
exitshort at Res1 limit
exitshort at Res3 stop
ENDIF
IF time >= 200000 THEN
IF longonmarket THEN
sell at market
ENDIF
IF shortonmarket THEN
exitshort at market
ENDIF
ENDIF
J’ai juste rajouté une clôture des positions à 20 heures.
Ce que je ne comprends pas, c’est que j’ai un résultat complètement différent du backtest proposé, et pourtant je ne vois pas d’erreur dans mon code.
Quelqu’un aurait une idée ?
Si vous avez une bonne stratégie avec les points pivots, je suis prêt à la backtester si vous me la confiez.
Merci.
Bonjour
Je n’ai pas fait de recherche sur les strategies en points pivots.
Mais une idée serait peut de rajouter un filtre sur la tendance (moyenne mobile ou autre), du genre acheter un support S2 en tendance haussière et vendre une résistance R2 en tendance baissière.
Cordialement
Bonjour,
Est-ce que ne serait pas une histoire de fuseau horaire?
Etant donné que le forex cote en continu, les points pivots calculés sur les horaires US serait peut-être plus significatif.
Cordialement.
Bonjour,
voici une stratégie que je voudrais mettre en place sur le Dax en UT 1mn. Il s’agit de placer un ordre d’achat au croisement à la baisse de S3j et un ordre de vente sur la réintégration de S2j. Ce phénomène se produit souvent en cas de bonne volatilité. Exemple, il s’est produit le 28 avril vers 10h30. Cependant, ma stratégie ne prend pas la position sur le backtest. Je ne comprend pas pourquoi … Voici le code … et un graphique PRT.
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
Cours = close
Sup2J = (DHigh(1) + DLow(1) + DClose(1))/3-(DHigh(1)-DLow(1))
Sup3J = DHigh(1)+2*(((DHigh(1) + DLow(1) + DClose(1))/3)-DLow(1))
Ctime = time > 090000 and time < 172500
// Conditions pour ouvrir une position acheteuse
c1 = (Cours CROSSES UNDER Sup3J)
IF Ctime and c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
c2 = (Cours CROSSES OVER Sup2J)
If c2 THEN
SELL AT MARKET
ENDIF
SET STOP PLOSS 20
@drjeje
Sur quelle unité de temps as-tu réalisé tes backtests ?
Bonjour Nicolas,
J’ai essayé en UT1mn mais ça ne fonctionne pas sur les autres non plus. Je ne comprends pas car le calcul se fait avec des commandes de type Dopen, Dclose, …
Je vois peut-être 2 choses possibles, vérifier les pivots avec l’instruction graph pour voir si le calcul est correct. Sinon changer la taille de contrat à 2 minimum.
drjeje
Ce doit être un soucis de formule sur les points pivots. Avec le code suivant j’ai des passages d’ordres.
Sur le DAX, En 5 minutes pour remonter plus d’un an d’historique, J’ai 95 trades / 62% positifs / ratio 1,49
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
PP = (DHigh(1) + DLow(1) + DClose(1)) / 3
Sup2J = PP - DHigh(1) + DLow(1)
Sup3J = DLow(1) - 2 * (DHigh(1) - PP)
Ctime = time > 090000 and time < 170000
// Conditions pour ouvrir une position acheteuse
c1 = close CROSSES UNDER Sup3J
IF Ctime and c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
c2 = close CROSSES OVER Sup2J
If c2 THEN
SELL AT MARKET
ENDIF
SET STOP PLOSS 40
@ Noisette
Merci pour ta proposition.
En fait ton code ne joue pas comme le mien les ordres à seuil de déclenchement, mais au marché.
C’est peut être mieux ainsi, je vais tester.
Bonsoir,
En fait ce code était surtout pour drjeje qui disait que sont code ne passait pas d’ordre en backtest. Et j’ai l’impression que cela vient d’une erreur sur le calcul de ses points pivots.
Ensuite effectivement il serait intéressant de comparer les 2 stratégies (à seuil ou au marché).
Les ordres au marché devraient mieux fonctionner sur des petites UT mais le backtest remontera moins loin.