Question regarding efficiency

Post Reply
Tibovwh
Posts: 24
Joined: 27 Aug 2015 22:36

Question regarding efficiency

Post by Tibovwh »

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.
Schermafdruk 2015-09-09 01.24.47.png
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.
Schermafdruk 2015-09-09 01.25.47.png
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.
Schermafdruk 2015-09-09 01.26.12.png
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,
You do not have the required permissions to view the files attached to this post.
Tibovwh
Posts: 24
Joined: 27 Aug 2015 22:36

Re: Question regarding efficiency

Post by Tibovwh »

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
stargate
Posts: 21
Joined: 18 Dec 2013 15:42

Re: Question regarding efficiency

Post by stargate »

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
Tibovwh
Posts: 24
Joined: 27 Aug 2015 22:36

Re: Question regarding efficiency

Post by Tibovwh »

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.

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,
stargate
Posts: 21
Joined: 18 Dec 2013 15:42

Re: Question regarding efficiency

Post by stargate »

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
You do not have the required permissions to view the files attached to this post.
stargate
Posts: 21
Joined: 18 Dec 2013 15:42

Re: Question regarding efficiency

Post by stargate »

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
Tibovwh
Posts: 24
Joined: 27 Aug 2015 22:36

Re: Question regarding efficiency

Post by Tibovwh »

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!
stargate
Posts: 21
Joined: 18 Dec 2013 15:42

Re: Question regarding efficiency

Post by stargate »

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
Post Reply

Return to “WHS NANOTRADER - EXPRESS PROGRAMMING”