ProRealCode - Trading & Coding with ProRealTime™
Bonjour la communauté,
j’ai un petit soucis avec une de mes stratégies…
En effet, j’essaie de coder cette strat sur 3 unités de temps (15, 5 et 1 minute) dont une partie du code ci-dessous, et le problème que j’ai, c’est que le bot prend des positions alors qu’il ne devrait pas avec ces conditions:
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute, updateonclose)
Time15aa = Close > Pivot
Time15ab = Close > MMA100
Time15ac = Close > MMA300
Time15ad = Close > MMA600
Time15ae = Close > MMA1000
buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute, updateonclose)
Time5aa = Close > Pivot
Time5ab = Close > MMA100
Time5ac = Close > MMA300
Time5ad = Close > MMA600
Time5ae = Close > MMA1000
buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
//declare the strategy on the 1 minutes Default
timeframe(1 minute, Default)
Time1aa = Close > Pivot
Time1ab = Close > MMA100
Time1ac = Close > MMA300
Time1ad = Close > MMA600
Time1ae = Close > MMA1000
Time1af = z < 38.2
buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
buy 0.3 share at market
endif
j’ai peut être mal écrit le code, mais le fait est que le bot ne devrait pas acheter de positions sous le pivot, or c’est ce qu’il fait
Merci pour votre aide.
As-tu commencé par GRAPH ta variable pivot ? Celle calculé dans ton code ? Cela te permettra de comprendre pourquoi une condition stricte telle que “Close > Pivot” n’est pas respecté ! 🙂
GRAPHONPRICE pivot
Bonjour Nicolas,
Oui effectivement, j’ai bien grapher le pivot et les 4 moyennes, tout ce superpose au pivot et aux moyennes sur le graphique le problème ne vient pas de ce coté. (uniquement en unité de temps 1 min….je n’est pas la possibilité de contrôler dans les autres timeframes car prorealtime ne me laisse pas faire.
Je sais pas trop pourquoi j’ai ça…j’ai essayé de coder avec plusieurs syntaxes, mais j’ai le même problème (achat sous pivot….et également sous les moyennes alors que le prix devrait être au dessus pour remplir mes conditions)
Trop de conditions? trop de timeframe?
merci pour le retour
Tu as bien compris qu’avec Updateonclose, les valeurs sont celles du Close précédent et non durant la bougie du timeframe le plus petit ?
Possible d’avoir une copie d’écran d’une mauvaise prise de position ?
Oui Nicolas,
j’ai bien compris que updateonclose la position se prend à la fermeture de la bougie précédente…(mais sur l’unité de temps sur laquelle je prend position non?) les conditions dans les unités de temps 15 et 5 min ne me servent qu’à confirmer la tendance….
Ci joint deux cas ou une position acheteuse est prise sous le pivot et sous les moyennes…..!!!
Je ne vois qu’une seule unité de temps sur ton graphique.
Si je reprends ton code, tu vérifies si le Close en M15 est au dessus du pivot (et les MM), idem pour M5 et idem pour M1.
Pour mémoire, l’ordre que tu pointes dans ta 1ère copie d’écran est à 8h41, donc tu utilises la bougie de 8h30 en M15 et celle de 8h40 en M5 (puisque updateonclose).
Mais en effet, la bougie M1 est bien dessous le pivot. Je n’ai pas d’explication, mais je vois que tu utilises l’optimisation, quelles sont les variables optimisées ? J’aimerai bien reproduire pour t’aider davantage, mais sans le code complet … dur ! 😉
Nicolas,
voici le code sur lequel je travail pour l’instant:
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//DEFPARAM FLATBEFORE = 091500
//DEFPARAM FLATAFTER = 154500
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
//Indicateurs de tendance
Pivot = (DHigh(1) + DLow(1) + DClose(1) + DOpen(0))/4
MMA100 = (ExponentialAverage[100](close))
MMA300 = (ExponentialAverage[300](close))
MMA600 = (ExponentialAverage[600](close))
MMA1000 = (ExponentialAverage[1000](close))
//Indicateurs de prise de positions
Ind = RSI[7](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute, updateonclose)
Time15aa = Close > MMA100
Time15ab = Close > MMA300
Time15ac = Close > MMA600
Time15ad = Close > MMA1000
Time15ae = z < 38.2
buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute, updateonclose)
Time5aa = Close > MMA100
Time5ab = Close > MMA300
Time5ac = Close > MMA600
Time5ad = Close > MMA1000
Time5ae = z < 38.2
buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
//declare the strategy on the 1 minutes Default
timeframe(1 minute, Default)
Time1aa = Close > Pivot
Time1ab = Close > MMA100
Time1ac = Close > MMA300
Time1ad = Close > MMA600
Time1ae = Close > MMA1000
Time1af = z < 38.2
buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
buy 0.3 share at market
endif
//Position Vendeuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute, updateonclose)
Time15va = Close < MMA100
Time15vb = Close < MMA300
Time15vc = Close < MMA600
Time15vd = Close < MMA1000
Time15ve = z > 61.8
sellconditionVA = (Time15va and Time15vb and Time15vc and Time15vd and Time15ve)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute, updateonclose)
Time5va = Close < MMA100
Time5vb = Close < MMA300
Time5vc = Close < MMA600
Time5vd = Close < MMA1000
Time5ve = z > 61.8
sellconditionVB = (Time5va and Time5vb and Time5vc and Time5vd and Time5ve)
//declare the strategy on the 1 minutes Default
timeframe(1 minute, Default)
Time1va = Close < Pivot
Time1vb = Close < MMA100
Time1vc = Close < MMA300
Time1vd = Close < MMA600
Time1ve = Close < MMA1000
Time1vf = z > 61.8
sellconditionVC = (Time1va and Time1vb and Time1vc and Time1vd and Time1ve and Time1vf)
if (sellconditionVA and sellconditionVB and sellconditionVC) and not daysForbiddenEntry then
sellshort 0.3 share at market
endif
//************************************************************************
//Stop Loss & Trailing function
SET STOP LOSS 27
trailingstart = 27 //trailing will start @trailinstart points profit
trailingstep = 9 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL = 0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL = 0 AND close-tradeprice(1)>trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL > 0 AND close-newSL>trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL = 0 AND tradeprice(1)-close>trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL > 0 AND newSL-close>trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL > 0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//Graphonprice pivot
//Graphonprice MMA100
//Graphonprice MMA300
//Graphonprice MMA600
//Graphonprice MMA1000
à part l’inverse fisher RSI dont j’ai pris le code sur le PDF Proorder….il n’y à pas d’optimisation
je te rejoins à toute fin utile le graph sur lequel on voit bien une prise de position à l’achat sous le pivot en UT 1 min
Merci pour ton aide
Slt Nicolas,
si ça peut aider, voici un prtscr avec les trois unité de temps, ou l’on voit une prise de position vente à 10h20 plus ou moins (graph envoyé pas papa).
UT 1 conditions OK (Sous pivot et sous les moyennes)
UT2 pas OK (sous pivot mais dans les moyennes)
UT3 pas OK (sous pivot mais dans les moyennes)
c’est comme si le code pour les UT 15 et 5 min n’était pas prit en compte…
à te lire
A la lecture de ton code, tout paraît logique. Si tu lances ton système en M1, ce qui est normal puisque c’est le TF le plus petit utilisé, alors tes 4 moyennes mobiles déclarés en tête de code, sous aucune instruction TIMEFRAME seront calculés en TF 1-minute, et donc ces variables seront toutes les mêmes pour tous les TF que tu utilises.
Bonjour Nicolas,
comment dois-je alors faire pour que les conditions soient remplies pour chaque timeframe:
Comme la position du pivot est la même peut importe l’UT c’est pas un problème.
j’ai essayé plusieurs écritures du code mais je n’arrive pas à remplir les condition dans chaque UT je ne trouve pas la solution….j’ai également essayé ci-dessous qui me donne de meilleurs résultat mais sans remplir les conditions de chacune des UT .
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
BuyConditionA = (Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
BuyConditionB = (Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000)
//declare the strategy on the 1 minutes Default
timeframe(1 minute)
BuyConditionC = (Close > Pivot and Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000 and (MyRSI < 38.2))
if (buyconditionA and buyconditionB and buyconditionC) and not daysForbiddenEntry then
buy 0.2 share at market
endif
//Position Vendeuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
SellConditionA = (Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
SellConditionB = (Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000)
//declare the strategy on the 1 minutes Default
timeframe(1 minute)
SellConditionC = (Close < Pivot and Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000 and (MyRSI > 61.8))
if (SellConditionA and SellConditionB and SellConditionC) and not daysForbiddenEntry then
sellshort 0.2 share at market
endif
ou encore ceci:
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
Time15aa = Close > MMA100
Time15ab = Close > MMA300
Time15ac = Close > MMA600
Time15ad = Close > MMA1000
Time15ae = MyRSI < 38.2
buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
Time5aa = Close > MMA100
Time5ab = Close > MMA300
Time5ac = Close > MMA600
Time5ad = Close > MMA1000
Time5ae = MyRSI < 38.2
buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
//declare the strategy on the 1 minutes Default
timeframe(1 minute, Default)
Time1aa = Close > Pivot
Time1ab = Close > MMA100
Time1ac = Close > MMA300
Time1ad = Close > MMA600
Time1ae = Close > MMA1000
Time1af = MyRSI < 38.2
buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
buy 0.2 share at market
endif
//Position Vendeuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
Time15va = Close < MMA100
Time15vb = Close < MMA300
Time15vc = Close < MMA600
Time15vd = Close < MMA1000
Time15ve = MyRSI > 61.8
sellconditionVA = (Time15va and Time15vb and Time15vc and Time15vd and Time15ve)
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
Time5va = Close < MMA100
Time5vb = Close < MMA300
Time5vc = Close < MMA600
Time5vd = Close < MMA1000
Time5ve = MyRSI > 61.8
sellconditionVB = (Time5va and Time5vb and Time5vc and Time5vd and Time5ve)
//declare the strategy on the 1 minutes Default
timeframe(1 minute, Default)
Time1va = Close < Pivot
Time1vb = Close < MMA100
Time1vc = Close < MMA300
Time1vd = Close < MMA600
Time1ve = Close < MMA1000
Time1vf = MyRSI > 61.8
sellconditionVC = (Time1va and Time1vb and Time1vc and Time1vd and Time1ve and Time1vf)
if (sellconditionVA and sellconditionVB and sellconditionVC) and not daysForbiddenEntry then
sellshort 0.2 share at market
endif
et dans chaque cas, pas moyen d’obtenir que les conditions soient remplies pour chaque UT…
Un peu d’aide sur la bonne syntaxe serait la bienvenue. MERCI DE TON AIDE
Slts
Pour chaque indicateur, il suffit de créer une variable (avec un nom différent) dans chaque UT, puisque ce sont des valeurs différentes calculés avec des données différentes.
On est bien d’accord, une MM 100 périodes en 1-minute, ce n’est pas une MM 100 périodes en 5-minutes et c’est pourtant ce que tu as fait en ne la calculant qu’une seule fois dans un seul TF (le plus petit, donc le M1 en l’occurrence).
as tu un exemple, que je comprenne bien?
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
BuyConditionA = (Close > MMA100) and (Close > MMA300) and (Close > MMA600)
if BuyConditionA then
xA = BuyConditionA
endif
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
BuyConditionB = (Close > MMA100) and (Close > MMA300) and (Close > MMA600)
if BuyConditionB then
yA = BuyConditionB
endif
//declare the strategy on the 1 minutes Default
timeframe(1 minute)
BuyConditionC = (Close > MMA100) and (Close > MMA300) and (Close > MMA600)
if BuyConditionC then
zA = BuyConditionC
if (xA and yA and zA) and (Close > Pivot) and (MyRSI < 38.2) and not daysForbiddenEntry then
buy n share at market
endif
endif
//Position Vendeuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute)
SellConditionA = (Close < MMA100) and (Close < MMA300) and (Close < MMA600)
if SellConditionA Then
xV = SellConditionA
Endif
//declare the strategy on the 5 minutes timeframe
timeframe(5 minute)
SellConditionB = (Close < MMA100) and (Close < MMA300) and (Close < MMA600)
if SellConditionB Then
yV = SellConditionB
Endif
//declare the strategy on the 1 minutes Default
timeframe(1 minute)
SellConditionC = (Close < Pivot) and (Close < MMA100) and (Close < MMA300) and (Close < MMA600)and (MyRSI > 61.8)
if SellConditionC Then
zV = SellConditionC
if (xV and yV and zV) and not daysForbiddenEntry then
sellshort n share at market
endif
endif
Comme ceci?
Non pas du tout. A aucun moment tu indiques à la plateforme de calculer une MM100 dans chaque UT.
Exemple pour le TF 15-minutes, tu dois faire la même chose dans chaque UT :
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//DEFPARAM FLATBEFORE = 091500
//DEFPARAM FLATAFTER = 154500
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
Pivot = (DHigh(1) + DLow(1) + DClose(1) + DOpen(0))/4
//Position acheteuse
//declare the strategy on the 15 minutes timeframe
timeframe(15 minute, updateonclose)
//Indicateurs de tendance
MMA10015 = (ExponentialAverage[100](close))
MMA30015 = (ExponentialAverage[300](close))
MMA60015 = (ExponentialAverage[600](close))
MMA100015 = (ExponentialAverage[1000](close))
//Indicateurs de prise de positions
Ind15 = RSI[7](Close)
x15 = 0.1 * (Ind15 - 50)
y15 = (EXP (2 * x15) - 1) / (EXP (2 * x15) + 1)
z15 = 50 * (y15 + 1)
Time15aa = Close > MMA10015
Time15ab = Close > MMA30015
Time15ac = Close > MMA60015
Time15ad = Close > MMA100015
Time15ae = z15 < 38.2
buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
Ok super Merci,
je vais faire une course et je me remet au code après ….je te reviens dans la soirée. 🙂
Problème multiframe sur 3 unités de temps
This topic contains 26 replies,
has 3 voices, and was last updated by wtangsiri
4 years, 6 months ago.
| Forum: | ProBuilder : Indicateurs & Outils Personnalisés |
| Language: | French |
| Started: | 05/20/2020 |
| Status: | Active |
| Attachments: | 11 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.