[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Using the Equity Curve to control trading logic



PureBytes Links

Trading Reference Links

Interesting example Howard - thanks for sharing.

I'll admit I don't understand why this would work as a piece of code -
how can you have Amibroker compute a buy and sell for a system and
then run it again in the same piece of code - my understanding was
that you had to use AddToComposite to achieve this.

Two small follow-up questions:
- Is Equity an array?  I'm assuming it is - so if I wanted to,
instead, compute daily returns I could calculate this via
Ref(eSystem1,-1)?
- Second - and this is really basic but I've never understood how to
do it so pardon the stupid question.  When you've got a plot command
within a backtest, how do you have the plots show up?

Thanks, as always, for your contributions to this forum Howard!

Best,

Damian

--- In amibroker@xxxxxxxxxxxxxxx, "Howard Bandy" <howardbandy@xxx> wrote:
>
> Greetings all --
> 
> I have received a couple of inquiries about using the equity curve to
> control the logic of a trading system.  Pasted into this posting is a
> trading system that includes two examples.  There are a lot of other
> ways the equity curve can be used.  
> 
> Thanks,
> Howard
> 
> 
> //	EquityCurveLogicSwitcher.afl
> //
> //	Howard Bandy
> //	February 2009
> //
> //	In response to an inquiry from the forums --
> //	
> //	This is an example of using the daily equity
> //	to control the logic of a trading system.
> //
> //	Code two trading systems -- System 1 and System 2
> //	For this example, they are the reverse of each other.
> //	
> //	Compute a moving average of daily equity of System 1.
> //	Refer to either today's value, or yesterday's,
> //	depending on when you want to measure and when you 
> //	want to act and are able to act.
> //	When the moving average of the equity curve of System 1 is
> //	higher than it was the previous day, trade System 1.
> //	When the moving average is lower, trade System 2.
> //
> //	An alternative is to use only System 1.
> //	Take signals in the original direction
> //	when the equity curve is rising, 
> //	take signals in the opposite
> //	direction when the equity curve is falling.
> //
> //	==========================================================
> //	Disclaimer
> //
> //	This is only an EXAMPLE, it is NOT A FINISHED TRADING SYSTEM.
> //	There are a lot of subtleties to consider when coding
> //	and potentially trading this.
> //
> //	For example:
> //	When do you enter and exit trades
> //	When do you calcaulate the original equity curve
> //	When do you measure the slope of the original equity curve
> //	Making certain that a signal to go Short causes a Long position
to exit
> //	And so forth
> //	
> //
> //	I have probably forgotten to do something important,
> //	and this code is probably incorrect in exactly the way that 
> //	will cause you problems.
> //	==========================================================
> //	
> //	System 1 is a moving average crossover -- replace this
> //	with whatever you want to use.
> 
> //	Code the two trading systems.
> 
> MA1Len = Optimize("MA1Len",4,1,25,1);
> MA2Len = Optimize("MA2Len",5,1,25,1);
> 
> MA1 = MA(C,MA1Len);
> MA2 = MA(C,MA2Len);
> 
> System1Buy = Cross(MA1,MA2);
> System1Sell = Cross(MA2,MA1);
> 
> System2Buy = Cross(MA2,MA1);
> System2Sell = Cross(MA1,MA2);
> 
> //	Compute the equity curve resulting from trading System 1.
> 
> Buy = System1Buy;
> Sell = System1Sell;
> 
> eSystem1 = Equity();
> 
> EquitySmoothLen = 252;
> SmoothedEquity = EMA(eSystem1,EquitySmoothLen);
> SmoothedEquityRising = SmoothedEquity > Ref(SmoothedEquity,-1);
> 
> //	The two options -- 
> //	TRUE == trade two systems
> // 	FALSE == trade System 1 in the opposite  direction
> 
> LogicOption = False;
> 
> if (LogicOption)
> {
> //	Use the slope of the equity curve of System 1 to
> //	decide whether to trade System 1 or System 2.
> 
> Buy = IIf(SmoothedEquityRising,System1Buy,System2Buy);
> Sell = IIf(SmoothedEquityRising,System1Sell,System2Sell);
> }
> else
> {
> //	Use the slope of the equity curve of System 1 to
> //	decide whether or Buy or Short when the System1Buy signal appears
> 
> Buy = IIf(SmoothedEquityRising,System1Buy,0);
> Sell = IIf(SmoothedEquityRising,System1Sell,0);
> Short = IIf(NOT(SmoothedEquityRising),System1Buy,0);
> Cover = IIf(NOT(SmoothedEquityRising),System1Sell,0);
> Sell = Sell OR Short;
> Cover = Cover OR Buy;
> }
> 
> e = Equity();
> 
> //	Plot
> 
> Plot(C,"C",colorBlack,styleCandle);
> Plot(MA1,"MA1",colorRed,styleLine);
> Plot(MA2,"MA2",colorBlue,styleLine);
> 
>
Plot(SmoothedEquity,"SmoothedEquity",colorRed,styleLine|styleLeftAxisScale);
> Plot(eSystem1,"eSystem1",colorBlue,styleLine|styleLeftAxisScale);
> Plot(e,"eUsingSwitch",colorGreen,styleLine|styleLeftAxisScale);
> 
> //	The End
> // ----------------------------------------------
>



------------------------------------

**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

*********************
TO GET TECHNICAL 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/