supposons que l'on ait choisi de trader en automatique une stratégie dont le résultat est
intéressant sur plusieurs futures en daily court terme.
Sachant que les conditions de signaux ne sont pas connues à l'avance (liées à l'Open of next
bar) je suppose que l'on va activer les stratégies sur tous les supports à la fois.
On suppose d'autre part que la stratégie n'a d'intérêt que si on rentre sur un seul support à
la fois.Donc si un signal est exécuté ,les autres signaux n'ont plus lieu d'être car le capital
est alors insuffisant et ils doivent être éliminés.
Comment résoudre ce problème?
Existe-t-il une fonction qui rentrerait dans le code de la stratégie du style:
If capital du compte>CAPITAL MINIMUM
and
if ...code stratégie...
le probleme de TradeStation est sa limitation a travailler par strategie. La plupart des mots cles permettent de savoir combien de positions tu as d'engages dans la strategie mais pas dans toutes les strategies de ts tes graphes.
Une des solutions est d'utiliser les variables globales et de mettre a jour la variable globale des que tu entres en position dans une strategie. Avant de rentrer en position tu verifies toujours que cette variable est nulle (ou inferieure a ton max autorise) avant de rentrer en position
salut marc
ma question se raproche de celle de marto, à savoir si l'on a envie de trader par exemple 30 systemes sur un meme support comment peut on procéder sachant que l'on ne va tout de meme pas ouvrir 30 comptes differents.
Tradestation permet d'associer plusieurs stratégie sur un meme graphe, donc si j'ai bien compris si j'applique les 30 systemes sur le meme graphe sans paralléliser j'obtiendrai en quelque sorte un seul systeme qui est la compression des 30 autres.cette solution n'est elle appliquable qu'en backtest ou est elle possible aussi en trading réel.
sinon il reste comme tu la mentionné et si je ne me trompe pas la solution des variables globales qui vont vérifier par exemple si l'un des systemes passe long si je n'est pas déja un trade long sur le marché auquel cas mon trade ne pasera pas.
malheureusement je n'arrive pas à obtenir d'info sur la maniere de coder les variables globale.Ca serait bien si tu pouvais nous donner un exemple de la démarche à suivre au niveau du code.J'essayerai de poster demain les codes de 2 systemes simple et on essayera de le faire si tu le veux bien.
Tradestation permet d'associer plusieurs stratégie sur un meme graphe, donc si j'ai bien compris si j'applique les 30 systemes sur le meme graphe sans paralléliser j'obtiendrai en quelque sorte un seul systeme qui est la compression des 30 autres.cette solution n'est elle appliquable qu'en backtest ou est elle possible aussi en trading réel.
marc = En theorie tout a fait. Par contre il faut s'assurer de ne pas utiliser le martketPosition a mauvais escient. Vois documentation sur incidence du marketPosition sur du multi strategie.
PAPY02 a écrit:
sinon il reste comme tu la mentionné et si je ne me trompe pas la solution des variables globales qui vont vérifier par exemple si l'un des systemes passe long si je n'est pas déja un trade long sur le marché auquel cas mon trade ne pasera pas.
malheureusement je n'arrive pas à obtenir d'info sur la maniere de coder les variables globale.Ca serait bien si tu pouvais nous donner un exemple de la démarche à suivre au niveau du code.J'essayerai de poster demain les codes de 2 systemes simple et on essayera de le faire si tu le veux bien.
merci pour ton attention
Marc : Poste effectivement le code de 2 systemes simples et on pourra partir de la
salut marc
donc si la premiere solution peuT marcher, point besoin d'utiliser les DLL.
Par contre si lon veut employer,plusieurs systemes sur le meme support mais sur des times frame differents alors notre premiere solution ne marchera pas puisque l'on peut associer plusieurs stratégie à un seul chart seulement.
donc voici les 2 systemes:
1-
inputs:dm(12),length(0);
value1=dmiplus(dm)-dmiminus(dm);
if value1<0 then Buy Next Bar at h + length points stop;
if value1>0 then Sell Short Next Bar at l - length points stop;
if CurrentBar > 2 and MACDDiff crosses over 0 then
Buy next bar at market ;
if CurrentBar > 2 and MACDDiff crosses under 0 then
Sell Short next bar at market ;
salut marc,
la question est double, d'une part je voudrais savoir comment on pourrais procédé pour compressé plusieurs systemes en un seul.
supposons que les 2 codes appartienent à des systemes qui travaillent sur la meme unité de temps.on pourrais arranger le code pour que ca donne en quelque sorte un seul systeme:
inputs:dm(12),length(0)FastLength( 12 ), SlowLength( 26 ), MACDLengt ( 9 );
variables: MyMACD( 0 ), MACDAvg( 0 ), MACDDiff( 0 ) ;
value1=dmiplus(dm)-dmiminus(dm);
MyMACD = MACD( Close, FastLength, SlowLength ) ;
MACDAvg = XAverage( MyMACD, MACDLength ) ;
MACDDiff = MyMACD - MACDAvg ;
if CurrentBar > 2 and MACDDiff crosses over 0 then
Buy next bar at market ;
if CurrentBar > 2 and MACDDiff crosses under 0 then
Sell Short next bar at market ;
if value1<0 then Buy Next Bar at h + length points stop;
if value1>0 then Sell Short Next Bar at l - length points stop;
mais lorsque l'on a par exemple une dizaine de systemes differents qui travaillent sur la meme unité de temps il deviens tres difficile de bricoler le code pour faire en sorte d'avoir au final un seul systeme le but étant d'évité d'ouvrir 10 compte differents et faire en sorte que les résultats soient plus stable dans le temps.il faut donc passé par les DLL et la ca se complique (faut il avoir des connaissances dans un autre language que EL pour pouvoir utiliser les DLL)
ma question est quelle est la procédure au niveau du code pour pouvoir compiler les 2 systemes en un seul avec les DLL?
pour la deuxieme question, supposons maintenant que les 2 systemes travaillent sur des unités de temps differentes, on ne pourra donc plus arranger le code, il faudra donc trouver une autre solution, les DLL peuvent elles résoudrent ce probleme.comment peut on alors tricher? merci pour ton aide marc
Salut Papy02, Marto et les autres. Reponse question de Papy02
Meme timeframe
tu peux mettre les 2 codes dans 2 strategies differentes et associer les 2 strats au meme graphe. Ca marchera avec les limitations suivantes
-> MarketPosition : marketPosition s'applique aux positions actives sur la valeur du graphe et non pas a la strategie dans lequel le mot est utilise. Donc si ta premmiere strategie est passe en position et que dans le deuxieme tu as une instruction du genre
if marketPosition = 0 then BUY
... alors ca ne rentrera jamais. MarketPosition n'est pas egal a StrategyPosition (mot qui n'existe pas). Si tu utilises des ordres Market tu peux facilemtn contourner le probleme en utilisant des variables locales (a la strategie) et non pas marketPosition. Par exemple
Strat 1
vars: enPosition(false);
if cdtsAchat and enPosition=false then begin
Buy next bar at market;
enPosition=true;
end;
Dans ce cas c'est facile. Par contre c'est dur quand il s'agit d'ordres a seuil de declenchement car tu ne sais pas si ton ordre a etet execute ou non.
-> Stops : L'autre contrainte est que les stops preprogrammes de TradeStation influenceront les 2 strategies puisqu'une fois encore ils sont relatifs a la position en cours. Donc si tes 2 strategies sont en position, le stop le plus contraignant des 2 influencera l'autre. Pour contourner ce probleme, vous pouvez utiliser des sorties classiques qui sont lies aux entrees en denommant l'un et l'autre. Exemple :
Strat 1
Buy ("achatStrat1") next bar at ...
Sell from entry("achatStrat1") at ... (cette sortie ne sort que s'il exite un achatStrat1
C'etait un bref apercu en reponse a la question 1. Pour les 2 timeframe et dll, reponses a venir ...
Meme timeframe
tu peux mettre les 2 codes dans 2 strategies differentes et associer les 2 strats au meme graphe. Ca marchera avec les limitations suivantes
-> MarketPosition : marketPosition s'applique aux positions actives sur la valeur du graphe et non pas a la strategie dans lequel le mot est utilise. Donc si ta premmiere strategie est passe en position et que dans le deuxieme tu as une instruction du genre
if marketPosition = 0 then BUY ... alors ca ne rentrera jamais.
oui tu as raison je n'y avait pas pensé
Strat 1
vars: enPosition(false);
if cdtsAchat and enPosition=false then begin
Buy next bar at market;
enPosition=true;
end;
mais es ce qu'il faut que j'utilise ce type de variable dans les 2 strat ou es ce que son utilisation dans l'une des deux strat suffit, sachant qu'une des deux comportera alors un "if marketPosition = 0 then BUY" et que l'autre comportera la variable "enPosition",mais que cela n'influencera pas l'entrée de cette derniere
Dans ce cas c'est facile. Par contre c'est dur quand il s'agit d'ordres a seuil de declenchement car tu ne sais pas si ton ordre a etet execute ou non.
la je ne comprend pas trop, car si par exemple l'ordre de vente a seuil de déclenchement n'est pas exécuté on est toujours en position et il n'ya pas d'influence sur les strat -> Stops : L'autre contrainte est que les stops preprogrammes de TradeStation influenceront les 2 strategies puisqu'une fois encore ils sont relatifs a la position en cours. Donc si tes 2 strategies sont en position, le stop le plus contraignant des 2 influencera l'autre. Pour contourner ce probleme, vous pouvez utiliser des sorties classiques qui sont lies aux entrees en denommant l'un et l'autre.
oui c'est vrai dans le cas ou les deux strat sont en pos, mais si l'on décide de pas pyramider les 2 strat, il n'y aura toujours qu'une strat en pos et c'est son stop qui sera utilisé. est ce que je me trompe?
C'etait un bref apercu en reponse a la question 1. Pour les 2 timeframe et dll, reponses a venir ...
on attend avec impatience