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

Re: [amibroker] Re: HOW TO PLOT PRICE, MACD, STOCHASTIC ON ONE CHART?



PureBytes Links

Trading Reference Links

You can place the whole strategy and all parameters at the top level,  
and just place the plot commands inside the If for each pane.  It  
would run slower though.  Personally, I would create two AFLs.  One  
that has just about everything in it for the main pane, and another  
that generically produces the different plots from static arrays and  
static variables.  After all, the whole point of the extra panes is  
just for the extra plots, so why not taylor them for that purpose only.

You can combine the various ideas to get exactly what you want.  Just  
plan carefully first so you don't end up with spaghetti code.

BR,
Dennis

On Oct 14, 2009, at 1:21 PM, bistrader wrote:

> Dennis,
>
> Thank you and others for helping me along.
>
> Tried a similar approach.  The afl would also have Buy and Sell  
> logic so it can be used to provide backtest to get at trades and  
> equity curve, and also to provide exploration to see buy and sell  
> signals.  Plus, the 3 charts or pans (Price, Macd Historgram and  
> Stochastic).  So, if I put, for example, the Macd Historgram code  
> within the 'if' statement for that pane, then I the afl will not be  
> able to determine the buys and sells, based on price, Mach and  
> Stochastic combined, for backtesting and explorations.  Correct??
>
> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@xxx> wrote:
>>
>> bistrader,
>>
>> If I were going to approach this problem of wanting to have the same
>> afl in each pane, with parameters shared by all, then the approach I
>> would use would be to structure the parameter code like below  
>> (tested):
>>
>> It does not matter what your chart ID is.  Just insert x many panes
>> buy double clicking on the formula.  Pull up the parameter window for
>> the price pane first and set it to Price, then do the same with the
>> others, selecting which data to plot.  Finally pull up the param
>> window of the price pane again and you can control all panes from  
>> that
>> one window.
>>
>> Best regards,
>> Dennis
>>
>> _SECTION_BEGIN( "Pane Function" );
>> IAM = ParamList( "Pane Function", "None|Price|MACD|MACDH" );
>> _SECTION_END();
>>
>> if ( IAM == "Price" ) { // price code here including all params
>>     _SECTION_BEGIN( "All Parameters" );
>>     StaticVarSet( "myControlParam1", ParamColor( "Color",
>> colorBlack ) );
>>     StaticVarSet( "myControlParam2", ParamStyle( "Style" ) );
>>     StaticVarSet( "myControlParam3", Param( "Fast Periods", 12, 1,
>> 100, 1 ) );
>>     StaticVarSet( "myControlParam4", Param( "Slow Periods", 26, 1,
>> 100, 1 ) );
>>     StaticVarSet( "myControlParam5", Param( "Signal", 9, 1, 100,  
>> 1 ) );
>>     _SECTION_END();
>>
>>     // generic param fetch block
>>     myControlParam1 = StaticVarGet( "myControlParam1" );
>>     myControlParam2 = StaticVarGet( "myControlParam2" );
>>     myControlParam3 = StaticVarGet( "myControlParam3" );
>>     myControlParam4 = StaticVarGet( "myControlParam4" );
>>     myControlParam5 = StaticVarGet( "myControlParam5" );
>>     // all the code to plot the price pane
>>     Plot( C, "Close", myControlParam1, styleNoTitle | myControlParam2
>> | GetPriceStyle() );
>>     Title = "Price + Params";
>> }
>>
>>
>> else if ( IAM == "MACDH" ) { // MACDcode here including all params
>>
>>     // generic param fetch block
>>     myControlParam1 = StaticVarGet( "myControlParam1" );
>>     myControlParam2 = StaticVarGet( "myControlParam2" );
>>     myControlParam3 = StaticVarGet( "myControlParam3" );
>>     myControlParam4 = StaticVarGet( "myControlParam4" );
>>     myControlParam5 = StaticVarGet( "myControlParam5" );
>>     // all the code to plot the MACD pane
>>     MD1 = MACD( myControlParam3, myControlParam4 );
>>     MDS = Signal( myControlParam3, myControlParam4,  
>> myControlParam5 );
>>     MDH = MDS - MD1;
>>     Plot( MDH, "MACD", myControlParam1, styleHistogram | styleNoTitle
>> | myControlParam2  );
>>     Plot( 0 , "MACD", colorBlack );
>>     Title = "MACD-Histogram";
>> }
>>
>> else if ( IAM == "MACD" ) { // Stoch code here including all params
>>
>>     // generic param fetch block
>>     myControlParam1 = StaticVarGet( "myControlParam1" );
>>     myControlParam2 = StaticVarGet( "myControlParam2" );
>>     myControlParam3 = StaticVarGet( "myControlParam3" );
>>     myControlParam4 = StaticVarGet( "myControlParam4" );
>>     myControlParam5 = StaticVarGet( "myControlParam5" );
>>    // all the code to plot the Stochpane
>>     MD1 = MACD( myControlParam3, myControlParam4 );
>>     Plot( MD1, "MACD", myControlParam1, styleNoTitle |
>> myControlParam2  );
>>     Plot( 0 , "MACD", colorBlack );
>>     Title = "MACD";
>> }
>>
>> else { Title = "Select Pane Function"; }
>>
>>
>> On Oct 13, 2009, at 12:19 PM, bistrader wrote:
>>
>>> One has to go to each chart to change the parameters for that chart.
>>>
>>> The afl is a system so all parameters are needed so that Buy and
>>> Sell can be defined.  I can, for example, change the Macd parameters
>>> via the top chart but these changes are not reflected in the middle
>>> Macd chart.  I have to go to the middle chart, change the Macd
>>> parameters and then see the revised Macd chart.
>>>
>>> I really can not put parameters within each 'if' as I need for the
>>> system buys and sells.  I guess I will have to live with this.
>>>
>>> Thanks for the help as understand another way of doing charts.
>>>
>>> --- In amibroker@xxxxxxxxxxxxxxx, Keith McCombs <kmccombs@> wrote:
>>>>
>>>> Bistrader --
>>>> I rarely use Param() --
>>>> However, I _believe_ that if the Param() statements are outside and
>>>> before the plot() statements that they will effect the three charts
>>>> equally.  But if this isn't so, you might explicitly try declaring
>>>> the
>>>> arrays that you are setting equal to Param() as Global.  Again, I
>>>> am not
>>>> sure.  You will have to try it.
>>>>
>>>> I also _believe_ that, whatever Param() statements you put inside  
>>>> the
>>>> if(GetChartID()==chartID + 1){ }, will effect that pane only.
>>>> -- Keith
>>>>
>>>> bistrader wrote:
>>>>>
>>>>>
>>>>> Got it and thanks. I will do it now. I am hoping that I can right
>>>>> click on first chart, change parameters and see all 3 charts
>>>>> change as
>>>>> I move parameter bars around.
>>>>>
>>>>> --- In amibroker@xxxxxxxxxxxxxxx <mailto:amibroker
>>>>> %40yahoogroups.com>,
>>>>> Keith McCombs <kmccombs@> wrote:
>>>>>>
>>>>>> Bistrader --
>>>>>> Yes you insert link 3 times, once for each chart. You want to do
>>>>>> them
>>>>>> consecutively, before doing any other charts for other  
>>>>>> strategies,
>>>>>> because they are numbered consecutively as they are entered.
>>>>>>
>>>>>> Oops, for the third chart it should be:
>>>>>> if(GetChartID()==chartID + 2){
>>>>>> instead of:
>>>>>> if(GetChartID()==chartID + 1){
>>>>>> That's what I get for using cut and paste.
>>>>>>
>>>>>> BTW, I embedded an image in my first post. It is not displayed,
>>>>>> if you
>>>>>> view the posts on the Yahoo groups web site. However, if you view
>>>>>> posts
>>>>>> in your own email, it is displayed.
>>>>>> -- Keith
>>>>>>
>>>>>> bistrader wrote:
>>>>>>>
>>>>>>>
>>>>>>> I will give it a go. Do I insert link the same afl 3 times? Once
>>>>>>> to
>>>>>>> get xxxx and display price, a second time for Macd and finally  
>>>>>>> for
>>>>>>> stochastic?
>>>>>>>
>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx
>>>>> <mailto:amibroker%40yahoogroups.com>
>>>>> <mailto:amibroker%40yahoogroups.com>,
>>>>>>> Keith McCombs <kmccombs@> wrote:
>>>>>>>>
>>>>>>>> bistrader --
>>>>>>>> Looks like you might be trying to take to large a bite out of
>>>>>>>> that
>>>>>>>> sandwich all at once.
>>>>>>>>
>>>>>>>> Can you do the following to your satisfaction?
>>>>>>>> 1. Plot the price chart with the EMA. Leave the shapes for  
>>>>>>>> later.
>>>>>>>> 2. Plot the MACD histogram on the same chart. Again, shapes for
>>>>> later.
>>>>>>>> 3. Plot the Stochastic on the same chart. Again, shapes for
>>>>>>>> later.
>>>>>>>>
>>>>>>>> I gave up trying to do the above long ago. Instead, I have  
>>>>>>>> three
>>>>>>>> separate charts, displayed horizontally. I use one .afl, with  
>>>>>>>> the
>>>>>>>> following construct:
>>>>>>>>
>>>>>>>> ////---- code -----/////
>>>>>>>> chartID = xxxx; // get xxxx using 'insert' indicator, not  
>>>>>>>> 'Apply'
>>>>>>>> indicator.
>>>>>>>> // do as many inserts has you want charts, in your case 3.
>>>>>>>> if(GetChartID()==chartID){
>>>>>>>> _SECTION_BEGIN("Price");
>>>>>>>> ; // plot price and emas here with shapes if desired
>>>>>>>> _SECTION_END();
>>>>>>>> }
>>>>>>>> if(GetChartID()==chartID + 1){
>>>>>>>> _SECTION_BEGIN("MACD");
>>>>>>>> ; // plot MACD here with shapes if desired
>>>>>>>> _SECTION_END();
>>>>>>>> }
>>>>>>>> if(GetChartID()==chartID + 1){
>>>>>>>> _SECTION_BEGIN("Stoch");
>>>>>>>> ; // plot Stoch here with shapes if desired
>>>>>>>> _SECTION_END();
>>>>>>>> }
>>>>>>>> ////---- end code -----/////
>>>>>>>>
>>>>>>>> Once you've have that working you can move the size and reorder
>>>>>>>> the
>>>>>>>> charts by using on screen manual manipulation. Scale, display
>>>>>>>> dates,
>>>>>>>> etc. independently.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> bistrader wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I am having problems with Plot statements in one afl that I
>>>>> want to
>>>>>>>>> plot Price (with EMAs) at the top, Macd histogram in the
>>>>> middle and
>>>>>>>>> stochastic at the bottom. Each of the 3 has PlotShapes as  
>>>>>>>>> well.
>>>>>>>>>
>>>>>>>>> Here is what I have.
>>>>>>>>> 1. I use the following for price with EMAs and with plotshape
>>>>> arrows
>>>>>>>>> at top. This works fine:
>>>>>>>>> Plot(Close, "Close",colorBlack,styleThick);
>>>>>>>>> Plot(ema, "EMA",colorRed,styleThick);
>>>>>>>>> OffsetTradeArrow = -25;
>>>>>>>>> PlotShapes(ema_buy*shapeUpArrow, colorGreen, 0, Fund,
>>>>>>> OffsetTradeArrow);
>>>>>>>>> PlotShapes(ema_sell*shapeDownArrow, colorRed, 0, Fund,
>>>>>>> OffsetTradeArrow);
>>>>>>>>>
>>>>>>>>> 2. Then, I move on to Macd histogram where I am having
>>>>> problems with
>>>>>>>>> Min and Max values to start with and then with how to overlay
>>>>>>>>> its
>>>>>>>>> PlotShapes:
>>>>>>>>>
>>>>>>>
>>>>> Plot(MACD_Histo,"MACD_Histo",colorBlack,styleHistogram|
>>>>> styleOwnScale,min?,max?);
>>>>>>>>> OffsetTradeArrow = -25;
>>>>>>>>> PlotShapes(macd_buy*shapeUpArrow, colorGreen, 0, MACD_Histo,
>>>>>>>>> OffsetTradeArrow);
>>>>>>>>> PlotShapes(macd_sell*shapeDownArrow, colorRed, 0, MACD_Histo,
>>>>>>>>> OffsetTradeArrow);
>>>>>>>>>
>>>>>>>>> I play around (a lot) using an rsi example posted here but not
>>>>> making
>>>>>>>>> any progress. I can get Macd_Histo times 100 (Macd_Histo*100)
>>>>> to plot
>>>>>>>>> with min at -100 and max at 100/20*100 or 500, but have no
>>>>> idea why I
>>>>>>>>> had to use -100 for min value. The 100/20*100 is from the rsi
>>>>> example
>>>>>>>>> posted here. And, I can not figure out how to get PlotShapes
>>>>> for macd
>>>>>>>>> to be over this Macd_Hist plot.
>>>>>>>>>
>>>>>>>>> 3. Then, I move onto Stochastic and can only get this to plot
>>>>> over
>>>>>>> the
>>>>>>>>> Macd_histo and not below it. So, can not figure out how to do
>>>>>>>>> min
>>>>>>>>> value, max value and then plotshapes over this.
>>>>>>>>> Plot(StochDSlow," Slow
>>>>>>> %D",colorRed,styleThick|styleOwnScale,min?,max?);
>>>>>>>>>
>>>>>>>>> OffsetTradeArrow = -25;
>>>>>>>>> PlotShapes(stoch_buy*shapeUpArrow, colorGreen, 0, StochDSlow,
>>>>>>>>> OffsetTradeArrow);
>>>>>>>>> PlotShapes(stoch_sell*shapeDownArrow, colorRed, 0, StochDSlow,
>>>>>>>>> OffsetTradeArrow);
>>>>>>>>>
>>>>>>>>> Help appreciated. Examples too. Thanks.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>
>
>
>
>
> ------------------------------------
>
> **** IMPORTANT PLEASE READ ****
> This group is for the discussion between users only.
> This is *NOT* technical support channel.
>
> TO GET TECHNICAL SUPPORT send an e-mail directly to
> SUPPORT {at} amibroker.com
>
> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
> http://www.amibroker.com/feedback/
> (submissions sent via other channels won't be considered)
>
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
>
> Yahoo! Groups Links
>
>
>



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

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

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

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/