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

Re: [amibroker] Re: Code help please... Optimize with CMAE



PureBytes Links

Trading Reference Links

Nice :-)

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "bruce1r" <brucer@xxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Monday, July 07, 2008 5:51 PM
Subject: [amibroker] Re: Code help please... Optimize with CMAE


> Dennis -
> 
> I don't post here much, but was about to post something else and saw
> this.  Sometimes I can't resist a challenge.  It looks like you want
> to experiment with CMAE as a general purpose function optimizer. 
> First, I concur with others - the best way is to write a DLL.  But, if
> you just want to play ...
> 
> Warning, this is a hack - and hack is not being used in the good way
> here.  But it will allow you to play.
> 
> 1. Setup AA to current symbol and set the Optimization target to
> "objective" in AA Settings / Walk-Forward
> 
> 2. Optimize the following code.  It is set for CMAE, but you might
> also find the commented out SPSO interesting.  I've also done my best
> to re-express your objective function to what I think you meant. 
> Check the comments.
> _____
> 
> //REMEMBER - Set the Optimization target to "objective" in AA Settings
> / Walk-Forward
> 
> //OptimizerSetEngine( "spso" );
> //OptimizerSetOption( "Runs", 2 );
> //OptimizerSetOption( "MaxEval", 1000 );
> 
> OptimizerSetEngine("cmae");
> 
> X = Optimize( "X", 1, 1, 100, 0.1 );
> Y = Optimize( "Y", 1, 1, 100, 0.1 );
> 
> Buy = Sell = Short = Cover = 0;
> 
> SetOption("UseCustomBacktestProc", True );
> 
> if ( Status( "action" ) == actionPortfolio )
> {
> bo = GetBacktesterObject( );
> bo.Backtest( );
> //  The original goal appeared to be to minimize the error of 100 - X*Y, 
> //  AND to minimize the difference between X and Y.  In other words, a 
> //  result of X=10 and Y=10.
> //  Note that this must be expressed as an objective to be maximized.
> Objective = - abs( 100 - X * Y ) - abs( X - Y );
> bo.AddCustomMetric( "objective", Objective );
> }
> _____
> 
> It should be obvious how to setup any parameters and an objective. 
> Hack doesn't seem strong enough, but it was an interesting diversion.
> 
> -- Bruce
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> wrote:
>>
>> Hello,
>> 
>> In that case just look at the CMAE docs (the read me is inside "cmaes")
>> If this is too complicated, you may need to use SciLab for example
>> www.scilab.org
>> 
>> 
>> Best regards,
>> Tomasz Janeczko
>> amibroker.com
>>   ----- Original Message ----- 
>>   From: Dennis Brown 
>>   To: amibroker@xxxxxxxxxxxxxxx 
>>   Sent: Monday, July 07, 2008 4:46 PM
>>   Subject: Re: [amibroker] Code help please... Optimize with CMAE
>> 
>> 
>>   Thank you both for continuing to provide help.
>> 
>> 
>>   I really do not need to solve an exhaustive search for two
> variables with a simplistic objective.  I really need to solve
> problems that have many variables and a very complex objective formula
> that is not suitable for an exhaustive search.
>> 
>> 
>>   I only provided this simplest of all cases so the the problem
> would not get in the way of my question of how to connect this simple
> case to the CMAE engine.
>> 
>> 
>>   If that is too complicated to address on this list, then I will
> have to look elsewhere for help.
>> 
>> 
>>   Again, thank you for your responses,
>> 
>> 
>>   Dennis
>> 
>> 
>>   On Jul 7, 2008, at 9:19 AM, Tomasz Janeczko wrote:
>> 
>> 
>>     Hello,
>> 
>>     Here is the simplest exhaustive search sample:
>> 
>>     function Objective( x, y ) 
>>     { 
>>       return sin(x) * cos(y); 
>>     } 
>> 
>>     xmin = 0; 
>>     xmax = 100; 
>>     xstep = 1; 
>>     xbest = Null; 
>>     ymin = 0; 
>>     ymax = 100; 
>>     ystep = 1; 
>>     ybest = Null; 
>> 
>> 
>>     best = -1e9; 
>> 
>>     for( x = xmin; x <= xmax; x += xstep ) 
>>     for( y = ymin; y <= ymax; y += ystep ) 
>>     { 
>>        f = Objective( x, y ); 
>> 
>>        if( f > best ) 
>>        { 
>>             best = f; 
>>             xbest = x; 
>>             ybest = y; 
>>        } 
>>     } 
>> 
>>     printf("Best f = %g, at x = %g, y = %g", best, xbest, ybest );
>> 
>>     Best regards,
>>     Tomasz Janeczko
>>     amibroker.com
>>       ----- Original Message -----
>>       From: Paul Ho
>>       To: amibroker@xxxxxxxxxxxxxxx
>>       Sent: Monday, July 07, 2008 2:29 PM
>>       Subject: RE: [amibroker] Code help please... Optimize with CMAE
>> 
>> 
>>       I think using an exhaustive search would be a way to start. 
> since you only have 2 parameters, you can also put a little bit of
> smart in there yourself.
>>       for example, if X*Y == 100 or close to that. there can be a
> constraint in place to restrict the range of  Y searched for a
> particular value of X, and vice versa,
>>       Cheers
>>       Paul.
>> 
>> 
>> 
>> ------------------------------------------------------------------------
>>         From: amibroker@xxxxxxxxxxxxxxx
> [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Dennis Brown
>>         Sent: Monday, 7 July 2008 10:17 PM
>>         To: amibroker@xxxxxxxxxxxxxxx
>>         Subject: Re: [amibroker] Code help please... Optimize with CMAE
>> 
>> 
>>         Tomasz and Paul,
>> 
>>         Thank you for responding.
>> 
>>         Yes, I also had looked at those sources, but being that I am
> able to 
>>         only stumble along with C++, it is Greek to me.
>> 
>>         I think I would be better off trying to understand how to
> modify the 
>>         AmiBroker plugin DLL to call back my AFL objective function.
>> 
>>         It is still Greek, but at least it is a simpler and
> meaningful Greek 
>>         phrase to start with.
>> 
>>         I would still welcome any specific advice or hints in areas
> that I am 
>>         likely to stumble over.
>> 
>>         Best regards,
>>         Dennis
>> 
>>         > On Jul 7, 2008, at 7:10 AM, Tomasz Janeczko wrote:
>>         >
>>         > Yes, these sources are actually included in what you
> already have on 
>>         > your hard disk
>>         > under ADK\CMAE\cmaes
>>         >
>>         > Best regards,
>>         > Tomasz Janeczko
>>         > amibroker.com
>>         >> ----- Original Message -----
>>         >> From: Paul Ho
>>         >> To: amibroker@xxxxxxxxxxxxxxx
>>         >> Sent: Monday, July 07, 2008 12:22 PM
>>         >> Subject: RE: [amibroker] Code help please... Optimize
> with CMAE
>>         >>
>>         >> Go to the guy's site where Tomasz download his source
> code from, 
>>         >> download his source code, and stare at that one instead,
> I think 
>>         >> its a lot closer to what you want.
> http://www.bionik.tu-berlin.de/user/niko/cmaes_c.tar.gz
>> 
>>         >>
>>         >>
>>         >> On Jul 7, 2008, at 4:05 AM, Tomasz Janeczko wrote:
>>         >>
>>         >> Dennis,
>>         >>
>>         >> The optimizer plugin architecture uses backtester. You
> can't go 
>>         >> without using backtester.
>>         >> Call to pfEvaluateFunc invokes full-blown backtest for given 
>>         >> parameter set.
>>         >>
>>         >> If you would like to optimize "general purpose" functions
> without 
>>         >> using backtester,
>>         >> you would need to take sources provided and write your
> own plugin 
>>         >> that won't
>>         >> use backtesting engine at all.
>>         >>
>>         >> Best regards,
>>         >> Tomasz Janeczko
>>         >> amibroker.com
>>         >> ----- Original Message -----
>>         >> From: "Dennis Brown" <see3d@xxx>
>>         >> To: <amibroker@xxxxxxxxxxxxxxx>
>>         >> Sent: Monday, July 07, 2008 3:30 AM
>>         >> Subject: [amibroker] Code help please... Optimize with CMAE
>>         >>
>>         >>
>>         >>> Hello,
>>         >>>
>>         >>> I have been staring at the CMAE DLL stuff for days and I
> really need
>>         >>> some help to figure out how to use it in a particular way.
>>         >>>
>>         >>> I would like to use the optimizer in a generic sense to
> do the
>>         >>> following from AFL without using the internal
> backtester, meaning 
>>         >>> only
>>         >>> AFL in indicator mode:
>>         >>>
>>         >>> Initialize 2 items:
>>         >>> item 1 is X and has a default,min,max,step,current,best
> values
>>         >>> 1,1,1000,1,1,1
>>         >>> item 2 is Y and has a default,min,max,step,current,best
> values
>>         >>> 1,1,1000,1,1,1
>>         >>>
>>         >>> The objective is to optimize X and Y so that X*Y==100
>>         >>>
>>         >>> objective function in AFL:
>>         >>> function Objective()
>>         >>> {
>>         >>> return 100 - X*Y;
>>         >>> }
>>         >>>
>>         >>> The steps I would need to take as I understand them are:
>>         >>>
>>         >>> 1. Initialize the X and Y OptimizeItems by calling
>>         >>> OptimizerInit( with bunch of arguments) --most arguments are
>>         >>> irrelevant to this test.
>>         >>>
>>         >>> 2. Start the optimizer engine by calling 
>>         >>> pfEvaluateFunc( pContext ) --
>>         >>> there really is no context that I understand for this test.
>>         >>>
>>         >>> 3. The DLL calls back for the objective AFL function
>>         >>>
>>         >>> 4. It runs step 3 a number of times to find the solution
> of X=Y=10
>>         >>>
>>         >>> 5. OptimizerFinalize(same bunch of arguments as step 1)
>>         >>>
>>         >>> Of course I would prefer that step 3 is AFL calling the
> optimizer 
>>         >>> DLL
>>         >>> instead (simple mode), but I did not think that is how
> the CMAE 
>>         >>> works.
>>         >>>
>>         >>> Anyway, if I could get this simple case to work, I am
> sure I could
>>         >>> figure out how do do much more complicated cases after
> that on my 
>>         >>> own.
>>         >>>
>>         >>> Of course if there is no way to use the existing DLL
> without 
>>         >>> changing
>>         >>> it, I would like to know that also. I should be able to
> make modest
>>         >>> changes to the DLL myself.
>>         >>>
>>         >>> Please any hints or AFL code is appreciated.
>>         >>>
>>         >>> Best regards,
>>         >>> Dennis
>>         >>>
>>
> 
> 
> 
> ------------------------------------
> 
> 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
> 
> 
> 

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

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/