PureBytes Links
Trading Reference Links
|
Thanks Fred,
Yes, it is time for me to learn this technique.
I have had a nibble at one or two script examples placed elsewhere so
now I will do it properly.
brian_z
--- In amibroker@xxxxxxxxxxxxxxx, Fred Tonetti <ftonetti@xxx> wrote:
>
> Brian,
>
>
>
> See the post I put up that has a small system, indicator and
script .
>
>
>
> What I'm saying is that you can NOT run AA from an AFL per se .
>
>
>
> As a result you can not set AA specific things in an AFL i.e. date
ranges
> etc nor "push" AA buttons .
>
>
>
> The way around ( the circumference isn't that big ) this is to
write a
> script to CONTROL AA and to manipulate the resulting data in this
case the
> equity curve and/or trade list data in the script if that's what
you want to
> do.
>
>
>
> There is no reason why the script itself can't generate one or more
data
> streams in .CSV files that are then imported to AB by the same
script and
> have that data be used by one or more AFL's.
>
>
>
> _____
>
> From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]
On Behalf
> Of brian_z111
> Sent: Sunday, May 18, 2008 6:34 PM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Re: System Performance Indicators [was: Can
someone fix
> this OLE code?]
>
>
>
> Fred,
>
> Thanks for your tips.
>
> > These are all functions of the equity curve and/or the trade
> >list
> > resulting from an AA backtest or from a script that has run an AA
> >backtest
> >
>
> Yes, I am using a mirror on a stick to peer out of my bunker but if
I
> am showing my ignorance and just need to go and learn a bit more I
> would actually appreciate being spun around and pointed in the
right
> direction.
>
> Yes, I am flagging to people that we are painting the equity curve,
> and the system metrics, with a mystique that isn't warranted.
>
> If we can array reference the trade series ( as % and time in trade
> on a symbol by symbol basis), after running a backtest, then we
could
> do anything we want with metrics and moneymanagement, right there
in
> our indicators or explorations.
>
> I don't think we can do that right now.
> Am I wrong?
>
> I guess you are confirming that I can do it using script, or
> other 'advanced' programming techniques and that I could return it
as
> a text file (from there it is over to another program for analysis)?
>
> Thanks,
>
> brian_z
>
> --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com, Fred
> Tonetti <ftonetti@> wrote:
> >
> > . I'm sure I'll get in over my head and state things that are not
> exactly or
> > otherwise true and TJ will have to step on it ...
> >
> >
> >
> > . So I'll get my flame retardant suit on first .
> >
> >
> >
> > I believe the way to think about an AFL's relationship to AA is
> that an AFL
> > runs INSIDE AA, it does not CONTROL AA .
> >
> >
> >
> > Thus in response to your list .
> >
> >
> >
> > a) backtest a watchlist
> >
> >
> >
> > You backtest with AA or a script running an AA Function . NOT
with
> an AFL
> > i.e. you backtest an AFL in AA, you DON'T call AA from your AFL.
> >
> >
> >
> > b) set the bar range to backtest (no. bars or date range) etc
> >
> >
> >
> > The bar range is set in AA or can be set in a script running AA .
> Again for
> > the same reason
> >
> >
> > c) get all trades irrespective of available equity
> >
> >
> >
> > This is a function of which flavor of backtester you use
> >
> >
> > d) turn off money managment (optional to turn back on if needed)
> >
> >
> > e) for each symbol as an array return - all trades (as%) - time
in
> trade
> >
> >
> > f) reference the trade series for each symbol so that I can calc
> stdev, ave,
> > W/L, PayOff ratios etc.
> >
> >
> >
> > These are all functions of the equity curve and/or the trade
> list
> > resulting from an AA backtest or from a script that has run an AA
> backtest
> >
> >
> >
> >
> >
> > _____
> >
> > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com
> [mailto:amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com]
> On Behalf
> > Of brian_z111
> > Sent: Sunday, May 18, 2008 5:49 PM
> > To: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
ps.com
> > Subject: [amibroker] Re: System Performance Indicators [was: Can
> someone fix
> > this OLE code?]
> >
> >
> >
> > Tomasz,
> >
> > Thanks to you for your answer, and also the other contributors to
> > this discussion, which I find helpful.
> >
> > First I will get on my hobby horse.
> >
> > We have shot ourselves in the foot with our reluctance to move to
a
> > forum with better tools and support the UKB initiative because
the
> > discussion in this forum is inefficient (no whiteboard, no
> > categorization, no inline images) - it can be hard to understand
> what
> > the cutting edge thinkers are talking about without some pictures.
> >
> > Let's hope some stubborn minded fool comes along, works his
> backside
> > off to offer us an alternative and the majority vote with their
> feet
> > and actually use it.
> >
> > Re the current discussion:
> >
> > - now that I am an AB survivor I want different things than before
> > - I now view it as a backtesting engine fullstop (I can get stats
> > packs and do MoneyManagement elsewhere but I can't replace the BT
> > features)
> > - it is a good thing that AB can do anything, if I am good enough
> > (because it is a complete programming language and because it is
> open
> > to development)so thanks for that Tomasz.
> > If I work hard I can do things way beyond any other program that
I
> > know of.
> > - while some people struggle with the array concept I actually
find
> > it easier for me to think in those terms and it is embedded in my
> > mindview of how AB works SO I personally want more arrays and
less
> > COM/CBT
> > - one problem is that AB survivors have gone beyond the textbooks
> and
> > are cutting edge specialists (we find it hard to even talk to
each
> > other because our perspectives are totally unique). It would be
> very
> > hard for you to code into AB what each one of us wants.
> > - AB is not optimised for backtesting yet (it is not your fault
the
> > fact is that current practise is rooted in the past while your
best
> > students are pusning the boundaries, while not wanting to give
away
> > too much about what they are doing.
> > - 'we' need to push on with backtesting improvements
> > - for now (until I get off my butt and learn some more real
> > programming) I am a hardened array programmer and this is what I
> want
> > to do:
> >
> > a) backtest a watchlist
> > b) set the bar range to backtest (no. bars or date range) etc
> > c) get all trades irrespective of available equity
> > d) turn off money managment (optional to turn back on if needed)
> > e) for each symbol as an array return - all trades (as%)
> > - time in trade
> > f) reference the trade series for each symbol so that I can calc
> > stdev, ave, W/L, PayOff ratios etc.
> >
> > Do all this in AFL/arrays.
> >
> > Perhaps I could even save the results the way we save the
backtest
> > reports at the moment.
> >
> > In summary what I am after is a trade series matrix with a symbol
> > list as the row header and trade no. (time based) as the column
> > heading AND I want this to be persistent, at least for the life
of
> > the BT OR at least to export it to a spreadsheet as a matrix.
> >
> > Can I do this, all from AFL with a click of the BT button, at the
> > moment?
> >
> > Please note: I have tried to talk a little bit about system root
> > analysis in this forum but it gets lost without pictures and a
> > tutorial BUT with trade series% and time in trade, as arrays, we
> can
> > perform any metric/equity analysis we can think of and plot any
> combo
> > we want.
> >
> > The metrics are not actually scalar, they are only reported that
> way
> > in AB. They do have variance so it people are interested in that
> they
> > can get if from the trade series.
> >
> > Thanks,
> >
> > I appreciate you taking the time to consider our views on the BT
> > feature.
> >
> > brian_z
> >
> > --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com,
> > "Tomasz Janeczko" <groups@>
> > wrote:
> > >
> > > Hello,
> > >
> > > You are mixing two things:
> > > a) equity derived metrics (such as drawdown) - that represent
> > ARRAYS and that are available already
> > > b) other metrics (like trade profits, trade duration) that are
> > single SCALARS
> > >
> > > a)
> > > Any EQUITY-based indicator is already possible via Equity chart.
> > > Sample Equity chart contains:
> > > equity
> > > cash,
> > > drawdown (underwater equity)
> > > bars since last equity high.
> > >
> > > If you want to customize equity chart simply modify _Portfolio
> > Equity.afl file.
> > > Fred has done so and he is using for example Log(Equity) in his
> IO
> > together with some other metrics
> > > derived from Equity. It does not require any COM. Just take
> > portfolio equity usign Foreign("~~~EQUITY", "C")
> > >
> > > Below is the code that Fred is using in his IO for the
reference.
> > >
> > > Everybody can modify his/her Portfolio Equity formula to suit
> one's
> > need.
> > > The code is open and you are free to modify it.
> > >
> > > b)
> > >
> > > As to
> > > > That SYSTEM PERFORMANCE INDICATORS are not offered as
standard
> > (build in) indicators is simply a lack of imagination.
> > > > To plot the UPI, number of winning trades, trade profits,
trade
> > duration, or other system performance statistic
> > > > on a time scale simply makes a lot common sense. btw,
> > > > Applying these functions to price arrays can also give very
> > interesting results. Price and equity arrays are not that
different.
> > >
> > > These metrics are NUMBERS. Just single SCALARS. They do NOT
> change
> > over time. They are constant for single backtest.
> > > If you plot them you will get FLAT LINE.
> > >
> > > > Saying "If you really have to plot them" is like saying "if
you
> > really have to make money".
> > >
> > > > The lack of System Performance Indicators is simply a void in
> > technical analysis ready (LONG OVERDUE!) to
> > >
> > > > be filled. To have to use the CBT, export the data, import
the
> > data, etc. to create
> > >
> > > > System Performance Indicators is simply too much work; no one
> > will do it.
> > >
> > >
> > >
> > > The system performance metrics are single NUMBERS (scalars).
Just
> > like 23.4. This is a number that does not change. When plotted -
it
> > is FLAT LINE.
> > >
> > >
> > >
> > > They are not "overdue" because they simply are reported in
> BACKTEST
> > REPORT, as numbers.
> > >
> > > The same as in Tradestation, Wealth Lab, Trading Recipes, or
> > whatever.
> > >
> > >
> > >
> > > > Most of us are here to trade and not to > learn new
programming
> > languages;
> > >
> > > > OLE and CBT are advanced tools for programmers. imo, System
> > Performance Indicators should be as readily available as the RSI
()
> > and CMO().
> > >
> > >
> > > Again, you are missing the point. Backtest metrics are scalars,
> not
> > arrays like RSI/CMO.
> > > The metrics are available as single numbers AFTER backtest.
> > > If some metric is say 23.4 plotting it would result in flat
line
> > like
> > > Plot( 23.4, "Sample metric plot", colorRed );
> > >
> > > Best regards,
> > > Tomasz Janeczko
> > > amibroker.com
> > >
> > > /**** BELOW CODE IS A PART OF IO.zip (Intelligent Optimizer by
> Fred
> > Tonetti) archive from the AmiBroker Mailing List File section ***/
> > > /*** http://finance.
> > <http://finance.
> <http://finance.groups.yahoo.com/group/amibroker/files/IO.zip>
> groups.yahoo.com/group/amibroker/files/IO.zip>
> > groups.yahoo.com/group/amibroker/files/IO.zip
> > ****/
> > > /*** It shows example customization of built-in portfolio
equity
> > chart */
> > >
> > > #pragma nocache
> > >
> > > MaxGraph = 10;
> > > GraphZOrder = 1;
> > > GraphYSpace = 5;
> > >
> > > Arrows = ParamToggle("Arrows", "No|Yes", 1);
> > >
> > > BIR = IIf(Status("BarInRange") > 0, 1, 0);
> > >
> > > ISeq = Foreign("~~~EQUITY", "C", 1);
> > >
> > > CurEq = Foreign("~~IO~Equity", "C", 1);
> > > CurIOS = Foreign("~~IO~Equity", "V", 1);
> > > CurSig = Foreign("~~IO~Equity", "I", 1);
> > >
> > > CS128 = IIf(CurSig >= 128, 1, 0);
> > > CurSig = IIf(CS128 == 1, CurSig - 128, CurSig);
> > > CS64 = IIf(CurSig >= 64, 1, 0);
> > > CurSig = IIf(CS64 == 1, CurSig - 64, CurSig);
> > > CS32 = IIf(CurSig >= 32, 1, 0);
> > > CurSig = IIf(CS32 == 1, CurSig - 32, CurSig);
> > > CS16 = IIf(CurSig >= 16, 1, 0);
> > > CurSig = IIf(CS16 == 1, CurSig - 16, CurSig);
> > > CS8 = IIf(CurSig >= 8, 1, 0);
> > > CurSig = IIf(CS8 == 1, CurSig - 8, CurSig);
> > > CS4 = IIf(CurSig >= 4, 1, 0);
> > > CurSig = IIf(CS4 == 1, CurSig - 4, CurSig);
> > > CS2 = IIf(CurSig >= 2, 1, 0);
> > > CurSig = IIf(CS2 == 1, CurSig - 2, CurSig);
> > > CS1 = IIf(CurSig >= 1, 1, 0);
> > > CurSig = IIf(CS1 == 1, CurSig - 1, CurSig);
> > >
> > > BarEnt = IIf(CS1 == 1 OR CS4 == 1 OR CS16 == 1 OR CS64 == 1, 1,
> > 0);
> > > CurEnt = IIf(BarEnt != 0, CurEq, 0);
> > >
> > > LastIS = CurIOS == 0 AND Ref(CurIOS, 1) != 0;
> > > OtherOOS = CurIOS != Ref(CurIOS, 1);
> > >
> > > MaxEq = Highest(CurEq);
> > > FlatEq = IIf(BIR, BarsSince(MaxEq > Ref(MaxEq,-1)),0);
> > > MaxFlat = Highest(FlatEq);
> > > LMaxFlat = LastValue(MaxFlat) * (1 + GraphYSpace / 100);
> > > LogEq = log10(CurEq);
> > >
> > > CurDD = IIf(CurEq < MaxEq, 100 * (MaxEq - CurEq) / MaxEq, 0);
> > > RCurDD = round(CurDD * 100) / 100;
> > > MaxDD = Highest(CurDD);
> > > RMaxDD = round(MaxDD * 100) / 100;
> > > LMaxDD = LastValue(MaxDD) * (1 + GraphYSpace / 100);
> > > SqrDD = CurDD ^ 2;
> > > CumDD = Cum(SqrDD);
> > >
> > > MaxEnt = Highest(CurEnt);
> > > CurDDE = IIf(CurEq < MaxEnt, 100 * (MaxEnt - CurEq) / MaxEnt,
0);
> > > RCurDDE = round(CurDDE * 100) / 100;
> > > MaxDDE = Highest(CurDDE);
> > > RMaxDDE = round(MaxDDE * 100) / 100;
> > >
> > > FirstBar = LastValue(ValueWhen(Status("FirstBarInRange") > 0,
Cum
> > (1)));
> > > LastBar = LastValue(ValueWhen(Status("LastBarInRange") > 0, Cum
> > (1)));
> > > TotBars = LastValue(Cum(1));
> > > BarNo = ValueWhen(BIR > 0, Cum(1) - FirstBar + 1);
> > > NoBars = LastValue(BarNo);
> > >
> > > Dates = DateNum();
> > > Days = ValueWhen(BIR > 0, IIf(Dates != Ref(Dates,-1), 1, 0));
> > > TotDays = Cum(Days);
> > > BPD = round(BarNo / TotDays);
> > >
> > > BAHEq = ValueWhen(BIR > 0, Ref(CurEq, -(BarNo - 1)) * (C / Ref
> > (C, -(BarNo - 1))));
> > > BAHMaxEq = Highest(BAHEq);
> > > BAHFlatEq = IIf(BIR, BarsSince(BAHMaxEq > Ref(BAHMaxEq,-1)),0);
> > > BAHMaxFlat = Highest(BAHFlatEq);
> > > BAHLMaxFlat = LastValue(BAHMaxFlat) * (1 + GraphYSpace / 100);
> > >
> > > BAHCurDD = IIf(BAHEq < BAHMaxEq, 100 * (BAHMaxEq - BAHEq) /
> > BAHMaxEq, 0);
> > > BAHRCurDD = round(BAHCurDD * 100) / 100;
> > > BAHMaxDD = Highest(BAHCurDD);
> > > BAHRMaxDD = round(BAHMaxDD * 100) / 100;
> > > BAHLMaxDD = LastValue(BAHMaxDD) * (1 + GraphYSpace / 100);
> > > BAHSqrDD = BAHCurDD ^ 2;
> > > BAHCumDD = Cum(BAHSqrDD);
> > >
> > > LogBAHEq = log10(BAHEq);
> > >
> > > CAR = ValueWhen(BIR > 0, 100 * ((CurEq / Ref(CurEq, -(BarNo -
> > 1))) ^ (1 / (BarNo / BPD / 252)) -1));
> > > Ann = ValueWhen(BIR > 0, 100 * ((CurEq / Ref(CurEq, -(252 *
> > BPD)) - 1)));
> > > MAR = ValueWhen(BIR > 0, CAR / MaxDD);
> > > UI = ValueWhen(BIR > 0, sqrt(CumDD / BarNo));
> > > UPI = (CAR - 5.4) / UI;
> > >
> > > BAHCAR = ValueWhen(BIR > 0, 100 * ((BAHEq / Ref(BAHEq, -(BarNo -
> > 1))) ^ (1 / (BarNo / BPD / 252)) -1));
> > > BAHAnn = ValueWhen(BIR > 0, 100 * ((BAHEq / Ref(BAHEq, -(252 *
> > BPD)) - 1)));
> > > BAHMAR = ValueWhen(BIR > 0, BAHCAR / BAHMaxDD);
> > > BAHUI = ValueWhen(BIR > 0, sqrt(BAHCumDD / BarNo));
> > > BAHUPI = (BAHCAR - 5.4) / BAHUI;
> > >
> > > OSCAR1 = ValueWhen(CurIOS >= 1, 100 * ISEq / Highest(ValueWhen
> > (LastIS == 1, ISEq)));
> > > OSMaxEq1 = ValueWhen(CurIOS >= 1, Highest(ISEq));
> > > OSCurDD1 = IIf(CurIOS >= 1, 100 * (OSMaxEq1 - ISEq) / OSMaxEq1,
> 0);
> > > OSMaxDD1 = Highest(OSCurDD1);
> > > OSMAR1 = OSCAR1 / OSMaxDD1;
> > >
> > > OSCAR2 = ValueWhen(CurIOS >= 1, 100 * CurEq / Highest(ValueWhen
> > (LastIS == 1, CurEq)));
> > > OSMaxEq2 = ValueWhen(CurIOS >= 1, Highest(CurEq));
> > > OSCurDD2 = IIf(CurIOS >= 1, 100 * (OSMaxEq2 - CurEq) /
OSMaxEq2,
> 0);
> > > OSMaxDD2 = Highest(OSCurDD2);
> > > OSMAR2 = OSCAR2 / OSMaxDD2;
> > >
> > > WFEcar = 100 * OSCAR2 / OSCAR1;
> > > WFEmar = 100 * OSMAR2 / OSMAR1;
> > >
> > > b0 = LastValue(LinRegIntercept(Ref(LogEq, -(TotBars -
> > LastBar)), NoBars));
> > > m = LastValue(LinRegSlope(Ref(LogEq, -(TotBars - LastBar)),
> > NoBars));
> > > y = m * BarNo + b0;
> > >
> > > BarsCum = ValueWhen(BIR > 0, Cum(BarNo));
> > > AvgBar = LastValue(BarsCum) / NoBars;
> > > SRDevSQ = ValueWhen(BIR > 0, sqrt(Cum((BarNo - AvgBar) ^ 2)));
> > > ErrEq = LastValue(StdErr(Ref(logEq, -(TotBars - LastBar)),
> > NoBars));
> > > KRatio = ValueWhen(BIR > 0, m * SRDevSQ / ErrEq / sqrt(NoBars));
> > >
> > > Title1 = EncodeColor(ColorRGB(160,160,160)) + "LinReg= " +
> > EncodeColor(ColorRGB(128,128,255)) + WriteVal(10 ^ y, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "CurFlat=" +
> > EncodeColor(ColorRGB(255,223, 0)) + WriteVal(FlatEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "Ann=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(Ann, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDDE=" +
> > EncodeColor(ColorRGB(255,128, 0)) + WriteVal(MaxDDE, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "CDD=" +
> > EncodeColor(ColorRGB(255, 0, 0)) + WriteVal(CurDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "wfeCAR=" +
> > EncodeColor(ColorRGB(255,255, 0)) + WriteVal(WFECar, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "wfeMAR=" +
> > EncodeColor(ColorRGB(255,255, 0)) + WriteVal(WFEMAR, 3.2) + "% ";
> > >
> > > Title2 = "\n" +
> > > EncodeColor(ColorRGB(160,160,160)) + "Equity = " +
> > EncodeColor(ColorRGB(224,224,224)) + WriteVal(CurEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "MaxFlat=" +
> > EncodeColor(ColorRGB(255,223, 0)) + WriteVal(MaxFlat, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "CAR=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(CAR, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDD=" +
> > EncodeColor(ColorRGB(255, 0, 0)) + WriteVal(MaxDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MAR=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(MAR, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UI=" +
> > EncodeColor(ColorRGB(255, 0,255)) + WriteVal(UI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UPI=" +
> > EncodeColor(ColorRGB( 0,255, 0)) + WriteVal(UPI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "KR=" +
> > EncodeColor(ColorRGB(160,255,160)) + WriteVal(KRatio, 3.2) + " ";
> > >
> > > Title3 = "\n" +
> > > EncodeColor(ColorRGB(160,160,160)) + "B & H = " +
> > EncodeColor(ColorRGB(128,128,128)) + WriteVal(BAHEq, 3.0) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "MaxFlat=" +
> > EncodeColor(ColorRGB(208,176, 0)) + WriteVal(BAHMaxFlat, 3.0)
+ " "
> +
> > > EncodeColor(ColorRGB(160,160,160)) + "CAR=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHCAR, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MDD=" +
> > EncodeColor(ColorRGB(208, 0, 0)) + WriteVal(BAHMaxDD, 3.2) + "% "
> > +
> > > EncodeColor(ColorRGB(160,160,160)) + "MAR=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHMAR, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UI=" +
> > EncodeColor(ColorRGB(208, 0,208)) + WriteVal(BAHUI, 3.2) + " " +
> > > EncodeColor(ColorRGB(160,160,160)) + "UPI=" +
> > EncodeColor(ColorRGB( 0,192, 0)) + WriteVal(BAHUPI, 3.2);
> > >
> > > Title = Title1 + Title2 + Title3;
> > >
> > > Plot(IIf(BarNo > 0 AND BIR > 0, -RCurDD, -1e10), "CDD",
> > colorDarkRed, styleThick | styleOwnScale | styleArea, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR == 0, -RCurDD, -1e10), "CDD",
> > colorDarkRed, styleThick | styleOwnScale | styleLine, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, -RMaxDD, -1e10), "MDD",
> > colorDarkRed, styleThick | styleOwnScale, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR > 0, -RCurDDE, -1e10), "CDDE",
> > colorOrange, styleThick | styleOwnScale | styleArea, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0 AND BIR == 0, -RCurDDE, -1e10), "CDDE",
> > colorOrange, styleThick | styleOwnScale | styleLine, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, -RMaxDDE, -1e10), "MDDE",
> > colorOrange, styleThick | styleOwnScale, -LMaxDD,
> > LMaxDD);
> > > Plot(IIf(BarNo > 0, FlatEq, -1e10), "CF",
> > colorGold, styleThick | styleOwnScale | styleArea, -LMaxFlat,
> > LMaxFlat);
> > > Plot(IIf(BarNo > 0, MaxFlat, -1e10), "MF",
> > colorGold, styleThick | styleOwnScale, -LMaxFlat,
> > LMaxFlat);
> > >
> > > Plot(LastIS, "LastIS", colorLightGrey, styleHistogram |
> > styleThick | styleNoLabel | styleOwnScale);
> > > Plot(OtherOOS, "OtherOOS", colorLightGrey, styleHistogram
> > | styleNoLabel | styleOwnScale);
> > >
> > > Plot(IIf(BIR > 0, Y, -1e10), "L/R Eq", colorBlue,
> > styleThick | styleNoLabel);
> > > Plot(IIf(BIR > 0, LogBAHEq, -1e10), "BAH Eq", colorGrey50,
> > styleThick | styleNoLabel);
> > > Plot(IIf(BIR > 0, LogEq, -1e10), "Sys Eq", colorLightGrey,
> > styleThick | styleNoLabel);
> > >
> > > S1 = (CS1 == 1) * shapeUpArrow;
> > > S2 = (CS2 == 1) * shapeDownArrow;
> > > S4 = (CS4 == 1) * shapeDownArrow;
> > > S8 = (CS8 == 1) * shapeUpArrow;
> > > S16 = (CS16 == 1) * shapeUpArrow;
> > > S32 = (CS32 == 1) * shapeDownArrow;
> > > S64 = (CS64 == 1) * shapeDownArrow;
> > > S128 = (CS128 == 1) * shapeUpArrow;
> > >
> > > if (Arrows == True)
> > > {
> > > PlotShapes(IIf(BIR > 0, S2, -1e10), colorWhite, 0,
> > LogEq, -11);
> > > PlotShapes(IIf(BIR > 0, S8, -1e10), colorWhite, 0,
> > LogEq, -11);
> > >
> > > PlotShapes(IIf(BIR > 0, S1, -1e10), colorBrightGreen, 0,
> > logEq, IIf(CS8, -17, -11));
> > > PlotShapes(IIf(BIR > 0, S4, -1e10), colorRed, 0,
> > logEq, IIf(CS2, -17, -11));
> > >
> > > PlotShapes(IIf(BIR > 0, S32, -1e10), colorGrey50, 0,
> > LogEq, -11);
> > > PlotShapes(IIf(BIR > 0, S128, -1e10), colorGrey50, 0,
> > LogEq, -11);
> > >
> > > PlotShapes(IIf(BIR > 0, S16, -1e10), colorBlue, 0,
> > LogEq, IIf(CS128, -17, -11));
> > > PlotShapes(IIf(BIR > 0, S64, -1e10), 11, 0,
> > LogEq, IIf(CS32, -17, -11));
> > > }
> > > ----- Original Message -----
> > > From: Herman
> > > To: Tomasz Janeczko
> > > Sent: Monday, May 19, 2008 2:12 AM
> > > Subject: [amibroker] System Performance Indicators [was: Can
> > someone fix this OLE code?]
> > >
> > >
> > > Tomasz, I am neither a mathematician nor a professional
> > programmer and I really don't know how to convey this simple and
> > obvious idea any better. If this email doesn't get the idea
across
> > I'll let it be. If others understand what I am talking about they
> can
> > continue the discussion.
> > >
> > >
> > >
> > >
> > > Indicators to display system performance are an effective and
> > essential tool in the design and evaluation of trading systems.
> > Trading the equity is a simple example, plotting DrawDowns is
> > another.
> > >
> > >
> > >
> > >
> > > Traditional Indicators are based on PRICE; System Performance
> > Indicators are based on EQUITY.
> > >
> > >
> > >
> > >
> > > That SYSTEM PERFORMANCE INDICATORS are not offered as standard
> > (build in) indicators is simply a lack of imagination. To plot
the
> > UPI, number of winning trades, trade profits, trade duration, or
> > other system performance statistic on a time scale simply makes a
> lot
> > common sense. btw, Applying these functions to price arrays can
> also
> > give very interesting results. Price and equity arrays are not
that
> > different.
> > >
> > >
> > >
> > >
> > > Saying "If you really have to plot them" is like saying "if you
> > really have to make money". The lack of System Performance
> Indicators
> > is simply a void in technical analysis ready (LONG OVERDUE!) to
be
> > filled. To have to use the CBT, export the data, import the data,
> > etc. to create System Performance Indicators is simply too much
> work;
> > no one will do it. Most of us are here to trade and not to learn
> new
> > programming languages; OLE and CBT are advanced tools for
> > programmers. imo, System Performance Indicators should be as
> readily
> > available as the RSI() and CMO().
> > >
> > >
> > >
> > >
> > > best regards,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > Sunday, May 18, 2008, 4:17:49 AM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > Hello,
> > >
> > >
> > >
> > > 1. Even if it works it is completely not supported and may
> > to problems/crashes etc. It is like driving all the time on
reverse
> > gear.
> > >
> > > Reverse gear is not designed to be used for 10 hours drive.
> > >
> > >
> > >
> > > 2. I see no reason to "plot" single numbers like UPI,
> > number of trades in indicator. That would be just a bunch of flat
> > lines.
> > >
> > > Also indicator should be lightweight. The indicator code
> > should execute very quickly because indicators are refreshed very
> > often.
> > >
> > > You are (ab)using indicators for things not designed for
> > them. Indicator code is for indicators. Automatic analysis is for
> > backtesting. Indicators are not
> > >
> > > and should never be used that way.
> > >
> > >
> > >
> > > 3. If you really need to plot them
> > >
> > > - all stats are accessible from CUSTOM BACKTESTER, if you
> > want to "plot" them, use custom backtester,
> > >
> > > write them to TEXT File (using fopen/fputs/fclose) and from
> > the indicator you will be able to read them (using
> fopen/fgets/fclose)
> > >
> > >
> > >
> > > That's a proper way to do that.
> > >
> > >
> > >
> > > To repeat the same analogy - although you can drive on
> > reverse gear for 100 miles, your cars is not designed to be used
> that
> > way.
> > >
> > >
> > >
> > >
> > > Best regards,
> > >
> > > Tomasz Janeczko
> > >
> > > amibroker.com
> > >
> > > ----- Original Message -----
> > >
> > > From: Herman
> > >
> > > To: Tomasz Janeczko
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Sent: Saturday, May 17, 2008 2:28 PM
> > >
> > > Subject: Re: [amibroker] Can someone fix this OLE code?
> > >
> > >
> > >
> > >
> > > OK Tomasz, but the code produces a nice BT report each time
> > i click the Trigger. Seemingly flawless. Seems only a tweak would
> be
> > required to make it work robust.
> > >
> > >
> > >
> > >
> > > I am going through all this trouble just to be able to
> > access the Backtester stats from an indicator (I was going to
> extract
> > the last value from the report on bar-by-bar BTs!).
> > >
> > >
> > >
> > >
> > > System analysis in the time domain is frustrated/impossible
> > because basic AB users (non professional programmer) can't
retrieve
> > and plot the Backtester stats, like UPI, %Winners, Number of
> trades,
> > etc. Thus there is a big void wrt system analysis - see my
> suggestion
> > #1335 and support tag [#49377].
> > >
> > >
> > >
> > >
> > > I wish that formulas for these functions were made public
> > so that they can be used in indicators. This Would open up a
whole
> > new world to evaluate, analyze, and design trading systems. The
> > single numbers in the AA give very limited information. With all
> > respect, please do not mention the CBT... that solution is for
less
> > than 10% of users and I don't have enough days left to learn all
> that
> > stuff.
> > >
> > >
> > >
> > >
> > > best regards,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 8:10:10 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > But... the example in help
> > >
> > > a) works
> > >
> > > b) presents OUTSIDE ***JScript*** code
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.com/guide/objects.html>
r.com/guide/objects.html>
> > r.com/guide/objects.html
> > >
> > > c) does not contain
> > >
> > > AA.Analysis.RangeN (wrong line)
> > >
> > >
> > >
> > > Again I want to stress that out that Analysis COM
> > object must not be used form
> > >
> > > AFL level. The functionality is provided to control
> > Automatic Analysis from OUTSIDE
> > >
> > > of AmiBroker.
> > >
> > >
> > >
> > >
> > > Best regards,
> > >
> > > Tomasz Janeczko
> > >
> > > amibroker.com
> > >
> > > ----- Original Message -----
> > >
> > > From: Herman
> > >
> > > To: dingo
> > >
> > > Sent: Saturday, May 17, 2008 2:02 PM
> > >
> > > Subject: Re: [amibroker] Can someone fix this OLE
> > code?
> > >
> > >
> > >
> > >
> > > won't do. Actually 99% of this code was copied from
> > the AB help.
> > >
> > >
> > >
> > >
> > > h
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-Trading systems
> > visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:54:44 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > ON the clearfilters() take off the () and try it.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ----------------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:49 AM
> > >
> > > To: dingo
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Subject: Re: [amibroker] Can someone fix this
> > OLE code?
> > >
> > >
> > >
> > >
> > > it runs fine except for the WLN and BRS changes
> > i need.
> > >
> > >
> > >
> > >
> > > h
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-Trading
> > systems visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:46:35 PM, you wrote:
> > >
> > >
> > >
> > >
> > > >
> > > Maybe AB won't let you run a backtest
> > within an indicator - time to ask TJ.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ------------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:40 AM
> > >
> > > To: dingo
> > >
> > > Cc: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > >
> > > Subject: Re: [amibroker] Can someone fix
> > this OLE code?
> > >
> > >
> > >
> > >
> > > Hi d, I tried that initially but No go.
> > >
> > >
> > >
> > >
> > > thanks,
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > For tips on developing Real-Time Auto-
> > Trading systems visit:
> > >
> > > http://www.amibroke <http://www.amibroke
> <http://www.amibroker.org/userkb/> r.org/userkb/>
> r.org/userkb/
> > >
> > >
> > >
> > >
> > > Saturday, May 17, 2008, 7:35:20 PM, you
> > wrote:
> > >
> > >
> > >
> > >
> > > >
> > > On the lines that give the error
> > substitute a number constant for the variable and see if it
works.
> If
> > it does then it looks to me like it thinks the variables are
arrays.
> > >
> > >
> > >
> > > d
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ------------------------------------------------
> > >
> > > From: amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com
> > [mailto:amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com>
> ps.com] On
> > Behalf Of Herman
> > >
> > > Sent: Saturday, May 17, 2008 7:01 AM
> > >
> > > To: AmiBroker User Group
> > >
> > > Subject: [amibroker] Can someone
> > fix this OLE code?
> > >
> > >
> > >
> > >
> > > Can someone help me fix the code
> > below so that when triggered in an Indicator, it:
> > >
> > >
> > >
> > >
> > > 1) Backtest all tickers in
> > watchlist WLN?
> > >
> > > 2) Use range of BRS bars
> > >
> > > 3) Output ONLY the one line BT
> > Report?
> > >
> > >
> > >
> > >
> > > Many thanks!!!!
> > >
> > > herman
> > >
> > >
> > >
> > >
> > > if ( ParamTrigger( "Run Com
> > BT", "BT" ) )
> > >
> > > {
> > >
> > > WLN = 0; // the watchlist to
> > backtest
> > >
> > > BRS = 100; // Number bars to
> > test
> > >
> > > AB = CreateObject
> > ( "Broker.Application" );
> > >
> > > AA = AB.Analysis;
> > >
> > > AA.LoadFormula( "C:\\Program
> > Files\\AmiBroker\\Formulas\\Systems\\Example.afl" );
> > >
> > > AA.ClearFilters();
> > >
> > > AA.Filter( 0, "watchlist" ) =
> > WLN; // This gives syntax error...
> > >
> > > AA.ApplyTo = 1;
> > >
> > > AA.RangeMode = 1;
> > >
> > > AA.Analysis.RangeN =
> > BRS; // This gives syntax error...
> > >
> > > AA.Backtest();
> > >
> > > AA.Report( "" );
> > >
> > > }
> > >
> > >
> > >
> > >
> > > No virus found in this incoming
> > message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> > >
> > >
> > >
> > > No virus found in this incoming message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> > >
> > >
> > >
> > > No virus found in this incoming message.
> > >
> > > Checked by AVG.
> > >
> > > Version: 8.0.100 / Virus Database:
> > 269.23.16/1448 - Release Date: 5/16/2008 7:42 PM
> > >
> >
> >
> >
> >
> > _____
> >
> > I am using the free version of SPAMfighter for private users.
> > It has removed 455 spam emails to date.
> > Paying users do not have this message in their emails.
> > Try SPAMfighter <http://www.spamfigh
<http://www.spamfighter.com/len>
> ter.com/len> for free now!
> >
>
>
>
>
> _____
>
> I am using the free version of SPAMfighter for private users.
> It has removed 455 spam emails to date.
> Paying users do not have this message in their emails.
> Try SPAMfighter <http://www.spamfighter.com/len> for free now!
>
------------------------------------
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|