Rick's right, the IF() can't check and array for true or false... It can only 
check a number (i.e. a boolean)...

So, if you have an array, somehow you have to get it to be a number...

If you look in the AmiBroker function definitions it tells you whether you a 
function returns an array or a number...

So StrToNum( NumToString( Buy)) simply gives us the 'number' of the array.... 
as does LastValue()...

TJ provided a bunch of functions for exactly this purpose.

LastValue() would simply give you the current status of BUY... it won't look 
into the future I don't think... but I would have to check by actually playing 
around with the code... which I can't do because I'm not at home right now...

--- In [email protected], "Ton Sieverding" <ton.sieverd...@...> wrote:
>
> That's interesting code, Rick. Can you explain me why this works ?
> 
> 1. First I assume BuySignal to be BUY. Therefore being an array. So IF should 
> not work. Should be IIF. But even when I put there BUY to be sure it's an 
> array, it does work. Why ?
> 
> 2. What's the difference between StrToNum(NumtoStr(BUY)) and BUY ? Should 
> give me the same result. But is does not. Without this trick I cannot use IF. 
> What's going on here ????
> 
> Regards, Ton.
> 
> 
>   ----- Original Message ----- 
>   From: Rick Osborn 
>   To: [email protected] 
>   Sent: Saturday, June 12, 2010 10:52 PM
>   Subject: Re: [amibroker] impenetrable AFL
> 
> 
>     
> 
>   Yuki
> 
>   I have the following code which changes the background gradient color 
> depending on whether a buy or sell signal is given.
> 
>   if(StrToNum(NumToStr(BuySignal))) 
>   bgColor = ColorRGB(0,66, 2); 
>   else 
>   bgColor = ColorRGB(66,2, 0); 
>   SetChartBkGradientFill( colorBlack, bgColor); 
> 
> 
>   Perhaps you can change this to meet your needs
> 
> 
>   Best Regards
>   Rick Osborn
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------------
>   From: Yuki Taga <yukit...@...>
>   To: [email protected]
>   Sent: Sat, June 12, 2010 1:24:58 AM
>   Subject: [amibroker] impenetrable AFL
> 
>     
>   Impenetrable! (At least to me.)
> 
>   xcolor = IIf(TSI >= SigLine, SetChartBkGradientFill( ParamColor("BgTop", 
> ColorRGB( 172,172,172 )),
>   ParamColor("BgBottom", ColorRGB( 172,172,172 ))), SetChartBkGradientFill( 
> ParamColor("BgTop", ColorRGB(140,140,140)),
>   ParamColor("BgBottom", ColorRGB(140,140,140))));
> 
>   SetChartBkColor(SelectedValue(xcolor));
> 
>   I tried that line above as
>   SetChartBkGradientFill(SelectedValue(xcolor)); but that produced a
>   syntax error.
> 
>   I think you can see what I'm trying to do here. The idea is simple:
>   change the background gradient depending on a true/false result. The
>   gradients in this example are not the gradients I would actually use
>   (in fact they are not gradients at all, as your intelligent eyes will
>   quickly have seen). They are just test code to see if I can even
>   make it work. I cannot.
> 
>   For one thing, the gradient does not change no matter the selected
>   value. It's static. For another thing, the margin background goes
>   to black, a hideous (although somewhat foreseen) result.
> 
>   Okay, what am I doing wrong, and where did I miss this in the docs?
>   And what, if anything, can I do about this margin result? The only
>   way I can change the *entire* background color is by not using a
>   gradient??? (Using SetChartBkColor) How sad that would be! I can
>   make that work, at least. But not with a gradient.
> 
>   Anything is possible in Amibroker, right?
> 
>   Wrong?
> 
>   Thanks,
> 
>   Yuki
>


Reply via email to