HI all,
I'm struggling a little with another thing I'm trying to program. I was hoping anyone would be kind enough to help out.
I've attached a plot of 2 series.
Blue is an ATR value (for which the code is also attached). Note we are NOT using a conditional routine. However, we do get the full series for all bars.
Black is an ADR value (code also attached). In this case we are using a conditional routine: IsFinalBar(). However, we only get the last bar's value.
I'm pretty sure I should be able to generate a full series (for all bar's) while still using a conditional routine for efficiency. How should this be implemented?
Best,
Question regarding efficiency
Question regarding efficiency
You do not have the required permissions to view the files attached to this post.
Re: Question regarding efficiency
Futurestation nano has been crashing regularly and I'm pretty sure it's because of this piece of code... I just can't figure out what to change exactly. Would love some help to sort this out
Code: Select all
Express TMS_Position_Calculator
Vars
Input $Equity(1,100000,2500), $Risk(0.1, 3.0 , 1.0 , 0.1, 1), $Multiple(0.5,5.0,1.0,0.1,1);
Numeric risk, equity, ir, sl, pos export "Proposed Position Size";
Numeric ATR5, ATR20, ATR50, ATR100, AVGATR;
Numeric ADR1, ADR2, ADR3, ADR4, AVGADR;
Series Range, ADR24, ADR100, ADR200, ADR500, ADRAVG export "ADR(AVG) (pips);%.00f";
Series ATRAVG export "ATR(AVG) (pips);%.00f";
Series Multiple, Stoploss;
Calculation
/// Range Series for ADR
If IsNewDay() then
begin
Range = (Prevdayhigh() - Prevdaylow());
end
else
range = range[1];
/// General settings + IR calculation
if IsFirstBar() then
begin
SetExpertsMode();
Calculateateverytick(false);
risk = $Risk / 100;
equity = $Equity;
ir = equity * risk;
end
/// Calculate ATR
ATR100 = Round(Atr(100)/100*close/(TickSize()*10),0);
ATR50 = Round(Atr(50)/100*close/(10*TickSize()),0);
ATR20 = Round(Atr(20)/100*close/(10*TickSize()),0);
ATR5 = Round(Atr(5)/100*close/(10*TickSize()),0);
AVGATR = Round(((ATR5*4)+(ATR20*3)+(ATR50*2)+(ATR100))/10,0);
ATRAVG = AVGATR;
If IsFinalBar() then
begin
/// Calculate Position Size based on ATR and Multiple
sl = $Multiple*ATRAVG*10*TickValue();
If IsNonZero(sl) then
begin
pos = floor((ir / sl));
end
end
If IsFinalBar() then
begin
/// Calculate ADR
MovingAverage(range, adr24, 24);
MovingAverage(range, adr100, 100);
MovingAverage(range, adr200, 200);
MovingAverage(range, adr500, 500);
adr1 = adr24/Ticksize()/10;
adr2 = adr100/Ticksize()/10;
adr3 = adr200/Ticksize()/10;
adr4 = adr500/Ticksize()/10;
AVGADR = ((adr1*4)+(adr2*3)+(adr3*2)+(adr4))/10;
ADRAVG = AVGADR;
end
If IsFinalBar() then
begin
Calculateateverytick(true);
SetDefaultOrderSize(pos);
end
Multiple = $Multiple;
Stoploss = ATRAVG;
Interpretation
begin
end
Re: Question regarding efficiency
Bonsoir,
Je réponds en Français, je m'en excuse
Si j'ai bien compris le problème :
A mon avis
Series ATRAVG export "ATR(AVG) (pips);%.00f";
Cette instruction ( appel d'un fichier texte externe) ne peut être utilisée que pour un programme de stop ;
Le nom du programme doit alors commencer par "Express stop"
Il ne faut pas vouloir calculer dans un même programme le nombre de lots à trader et positionner un stop, il faut créer 2 programmes différents
1 programme calcul nombre de lots à trader
1 programme positionnement du stop
Ai je bien compris le problème ?
J'ai développé un programme Express similaire qui calcule le nombre de lots à trader en fonction de la volatilité (ATR)
Il fonctionne en tout automatique sans aucun problème
Cordialement
Bernard
Je réponds en Français, je m'en excuse
Si j'ai bien compris le problème :
A mon avis
Series ATRAVG export "ATR(AVG) (pips);%.00f";
Cette instruction ( appel d'un fichier texte externe) ne peut être utilisée que pour un programme de stop ;
Le nom du programme doit alors commencer par "Express stop"
Il ne faut pas vouloir calculer dans un même programme le nombre de lots à trader et positionner un stop, il faut créer 2 programmes différents
1 programme calcul nombre de lots à trader
1 programme positionnement du stop
Ai je bien compris le problème ?
J'ai développé un programme Express similaire qui calcule le nombre de lots à trader en fonction de la volatilité (ATR)
Il fonctionne en tout automatique sans aucun problème
Cordialement
Bernard
Re: Question regarding efficiency
Bernard,
Merci pour votre réponse.
Vous avez bien compris. Je suis en train de développer un programme pour calculer le 'Position Size' based on equity / risk parameters + ATR(10) value & Multiple parameter. Les fonctions de ADR sont supplémentaire et ca complique le programme sans raison. D'ailleurs j'ai écrit un pour le ADR tout seule et un pour le Position. J'utilise cette series ATRAVG en effet dans un stop programme pour S/L et aussi pour Profit Target's.
Mon vrai problème à ce moment est avec le code du programme Position. Le fonction de 'SetDefaultOrderSize()' introduit des problèmes dans mon FutureStation Nano et ça arrète a fonctionner en appliquer le programme. Alors, j'utilise le code suivante et je change le Default Order Size manuellement.
Pour rendre cela automatique, il devrait introduire
(eventuellement) CalculateAtEveryTick(true);
SetExpertsMode();
SetDefaultOrderSize(pos);
Quand je fait ça, mon FutureStation arrêt. Donc, maintenant je le fait manuellement mais j'aimerais bien finaliser.
Je vous remercie pour votre réponse et pour votre intérese de nouveau.
Salutation,
Merci pour votre réponse.
Vous avez bien compris. Je suis en train de développer un programme pour calculer le 'Position Size' based on equity / risk parameters + ATR(10) value & Multiple parameter. Les fonctions de ADR sont supplémentaire et ca complique le programme sans raison. D'ailleurs j'ai écrit un pour le ADR tout seule et un pour le Position. J'utilise cette series ATRAVG en effet dans un stop programme pour S/L et aussi pour Profit Target's.
Mon vrai problème à ce moment est avec le code du programme Position. Le fonction de 'SetDefaultOrderSize()' introduit des problèmes dans mon FutureStation Nano et ça arrète a fonctionner en appliquer le programme. Alors, j'utilise le code suivante et je change le Default Order Size manuellement.
Code: Select all
Express Position
Vars
numeric equity, risk, sl, pos export "Proposed PositionSize";
series multiple, ir, atr10 export "ATR(10) (Pips); %.00f";
input $Equity(1,10000,5000), $Risk(1.0,3.0,1.0,0.1,1), $Multiple(0.5,2.5,1.5,0.1,1);
Calculation
if Isfirstbar() then
begin
calculateateverytick(false);
equity = $equity;
risk = $risk;
ir = equity*(risk/100);
multiple = $multiple;
end
else
begin
ir = ir[1];
multiple = multiple[1];
end
if Isbarcompleted() then
begin
atr10 = round(atr(10)/100*close/Ticksize()/10,0);
end
else
atr10 = atr10[1];
if IsFinalBar() then
begin
CalculateAtEveryTick(true);
sl = ($multiple*atr10*10*tickvalue());
if isnonzero(sl) then begin
pos = floor(ir/sl);end
end
interpretation
begin
end
Pour rendre cela automatique, il devrait introduire
(eventuellement) CalculateAtEveryTick(true);
SetExpertsMode();
SetDefaultOrderSize(pos);
Quand je fait ça, mon FutureStation arrêt. Donc, maintenant je le fait manuellement mais j'aimerais bien finaliser.
Je vous remercie pour votre réponse et pour votre intérese de nouveau.
Salutation,
Re: Question regarding efficiency
Je ferais un essai en ne mettant pas l'instruction de calcul sur chaque tick
Supprimer CalculateAtEveryTick(true);
Une image de ce que j'obtiens :
Volume d'ordre à 4 donné par indicateur Express
Supprimer CalculateAtEveryTick(true);
Une image de ce que j'obtiens :
Volume d'ordre à 4 donné par indicateur Express
You do not have the required permissions to view the files attached to this post.
Re: Question regarding efficiency
A quoi servent ces données ?
pos export "Proposed PositionSize";
et
atr10 export "ATR(10) (Pips); %.00f";
Je n'utilise pas ces instructions c'est la seule différence que je voie entre nos deux programmes
Ce ne serait pas cela qui "plante" la plateforme ?
J'arrête pour le moment, bonne nuit
pos export "Proposed PositionSize";
et
atr10 export "ATR(10) (Pips); %.00f";
Je n'utilise pas ces instructions c'est la seule différence que je voie entre nos deux programmes
Ce ne serait pas cela qui "plante" la plateforme ?
J'arrête pour le moment, bonne nuit
Re: Question regarding efficiency
Malheureusement, sans l'instruction de calculateateverytick(true), ça ne marche pas toujours.
Est-ce que vous avez les même problème avec ce pièce de code quand vous l'introduire dans Express et appuie sur 'appliquer'?
L'instruction de "export" est pour visualiser les donnés de Position & ATR(10) dans le section d'info au droit. Ainsi j'ai plus de place pour le reste.
Finalement, je suis vraiment intéressé en votre indicateurs. Est-ce que les lignes blue sont d'un indicateur de vous ou d'un "built-in"? Comment peut on arrèter un ligne au "End of Day" et commencer un de nouveau pour le jour prochaine? Pour moi, il connecte tous les lignes. En plus, comment est-ce que c'est possible d'avoir des lignes en droit du finale bar?
Merci!
Est-ce que vous avez les même problème avec ce pièce de code quand vous l'introduire dans Express et appuie sur 'appliquer'?
L'instruction de "export" est pour visualiser les donnés de Position & ATR(10) dans le section d'info au droit. Ainsi j'ai plus de place pour le reste.
Finalement, je suis vraiment intéressé en votre indicateurs. Est-ce que les lignes blue sont d'un indicateur de vous ou d'un "built-in"? Comment peut on arrèter un ligne au "End of Day" et commencer un de nouveau pour le jour prochaine? Pour moi, il connecte tous les lignes. En plus, comment est-ce que c'est possible d'avoir des lignes en droit du finale bar?
Merci!
Re: Question regarding efficiency
Bonjour,
Merci par la commande export, je ne connaissais pas, je n'ai rien vu à ce sujet dans la documentation
Aucun problème avec le mode expert et SetDefaultOrderSize(NbContrats);
mais je n'utilise surtout pas le calcul à chaque tick
Tous mes indicateurs sont soit standards natifs de la plateforme soit des programmes Express personnels
l'indicateur en bleu est "pivot points" standard
pour la ligne au finale bar je pense que vous faites allusion a la représentation du nombre de contrats en histogramme avec l'expression d'affichage " plotBars(a,a,NbContrats,b);"
Si vous le souhaitez je peux vous envoyer mon indicateur en MP
Merci par la commande export, je ne connaissais pas, je n'ai rien vu à ce sujet dans la documentation
Aucun problème avec le mode expert et SetDefaultOrderSize(NbContrats);
mais je n'utilise surtout pas le calcul à chaque tick
Tous mes indicateurs sont soit standards natifs de la plateforme soit des programmes Express personnels
l'indicateur en bleu est "pivot points" standard
pour la ligne au finale bar je pense que vous faites allusion a la représentation du nombre de contrats en histogramme avec l'expression d'affichage " plotBars(a,a,NbContrats,b);"
Si vous le souhaitez je peux vous envoyer mon indicateur en MP