Bonjour
Ci-dessous un code qui prenait bcp de positions en UT15 sans utilisation de différents TimeFrame.
Avant de faire évoluer ce code pour gérer la gestion du BE ou de l’achat par exemple, j’ai voulu introduire la fonction TimeFrame et vérifier que le programme se comportait à l’identique.
Donc je lance la stratégie sur un graph de 5 minutes, traite les conditions d’entrée en position en TimeFrame 15 minutes (pour reproduire ce que le programme originel faisait) et gère l’entrée en l’achat et le suivi en UT 5.
Je constate que le programme ne prend que de 2 TRADE, alors qu’auparavant ils en prenait plus de 200 !!
J’ai bien pris en considération qu’en tournant en 5 minutes j’ai moins d’historique pour l’UT 15 minutes (je teste avec 100K d’unité à chaque fois), mais de là à n’avoir plus que 2 TRADE c’est très curieux…
Pour faire la comparaison il faut enlever les instructions TIMEFRAME sur un graph en 15 minutes.
Si vous avez une explication …
Code (désolé le bouton “insert code” n’est pas visible dans la toolbar !!
// UT = 15 minutes, NSQ 100
// A lancer en UT 5 de base (pour gestion du MULTI TIMEFRAME)
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
//DEFPARAM FLATBEFORE = 080000
////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
//DEFPARAM FLATAFTER = 223000
DEFPARAM Preloadbars = 1000
ONCE MEMSTOPPRICE = 0
ONCE MEMOSTOP = 0
If not Onmarket Then
step = 0
MemoIndex = 0
Endif
CapitalInitial = 50000 // Capital initial
CapitalReinvest = CapitalInitial+Strategyprofit
// nombre de contrat
TailleContrat = 1 // Nbr lot (minimum 0.5)
// réinvestissement des gains
ReinvestActif = 1 // activé ?
If ReinvestActif = 0 then
nblot = TailleContrat
endif
If ReinvestActif = 1 then
nblot = (CapitalReinvest/CapitalInitial)*TailleContrat
Endif
If nblot < 0.5 then
nblot = 0.5
Endif
nblot = 1
// ----------------------------------------------------------------------------------------------------------------------------
TimeFrame(15 minutes, updateonclose)
// parameters
Period = 10
FastPeriod = 2
SlowPeriod = 30
// ER = Efficient Ratio
Xadaptative = AdaptiveAverage[Period,FastPeriod,SlowPeriod](TypicalPrice) // Même résultat si close () !!
// Calcul de l'angle de la courbe Xadaptative
Periode = Period //Période de la MM
nbChandelier= Period // Nombre de chandeliers sur lesquels on évalue la pente
MM = Xadaptative
ADJASUROPPO = (MM-MM[nbchandelier]) / nbChandelier
ANGLE = (ATAN(ADJASUROPPO)) // Varie en positif ou en négatif
b1 = Typicalprice crosses over Xadaptative
b2 = 1
b3 = 1
b4 = 1
b5 = 1
b6 = 1
b7 = 1
Btotal = b1 and b2 and b3 and b4 and b5 and b6 and b7 and Not OnMarket
TimeFrame(default)
IF btotal THEN
BUY nblot CONTRACT AT MARKET
Set Target pprofit 0
SET STOP LOSS 35 // Temporaire
MEMSTOPPRICE = Typicalprice-35
Endif
// Ajustement du STOPLOSS une fois le prix d'ouverture de la bougie d'ordre connue
IF Longonmarket and BarIndex = TradeIndex(1) and step = 0 then
MEMOSTOP = Tradeprice(1)-MEMSTOPPRICE // STOPLOSS en Nbr de point
SET STOP LOSS MEMOSTOP
graph MEMOSTOP
BuyN1 = Tradeprice(1)
MemBE = BuyN1+8
step = 1
MemoBar = BarIndex
Endif
If Longonmarket and step = 1 Then
If Memobar+1 < Barindex and Typicalprice > MemBe Then // AU moins une bougie d'éloignement
SELL AT MemBE STOP
step = 2
EndIf
EndIf
If Longonmarket and step = 2 Then // Rafraîchissement de la vente stop BE
SELL AT MemBE STOP
step = 2
Endif
//TP1 = 80% valeur du STOPLOSS
If Longonmarket and step = 2 then
If Close crosses under Xadaptative Then
Sell 0.5 Contracts at Market
MemoIndex = Barindex
MemBE = MemBE + Round((Close-MemBe)/2)
step = 3
Endif
Endif
// Ajustement du BE en STOP suiveur typé "cale" pour verrouiller niveau de gain si rechute vers BE initiale
If Longonmarket and step = 3 then
SELL AT MemBE STOP
Endif
//// TP2
If LongonMarket and step = 3 and Close crosses under average[30,1](close) Then
// Solde le restant de la postion
Sell at market
step = 0
Endif