Yuki, Ton, Let me make what is hopefully a constructive suggestion.
When in doubt, use AddColumn() for debug. It is your friend. In this case, you might do something like the following Explore - res = StrToNum( NumToStr( C ) ); Filter = BarIndex( ) >= BarCount - 10; AddColumn( C, "C", 8.2 ); AddColumn( res, "RES", 8.2 ); Plot( C, "C", colorred ); Title = "" + NumtoStr( C ); Here's what happens in the code above. NumtoStr(C) must result in a single string. So, in an Explore it takes the last Range value and converts it to a string. (An indicator is a little different.) Then, the StrtoNum just converts it back to a single scalar number. The easiest way to see this is to "print it out" via AddColumn() statements. The promotion that Rob alluded to is a little different. It is when a single scalar number of "promoted" to an array to carry out a calculation. Consider the following - fact = 1.1; array = Close * fact; The second statement multiples an array (Close) by a scalar number (fact). There are a couple of ways to do this internally, but the easiest way to visualize it is that fact is "promoted" to an array of numbers with a value of 1.1 , and then the two arrays are multiplied. Hope this helps. -- Bruce --- In [email protected], "Rob" <sidharth...@...> wrote: > > It doesn't give you the same array... it gives you a scalar. > (as Bruce mentioned it seems sometimes AFL can see an array has the same > value all the way through and treats it as a scalar). > > --- In [email protected], Yuki Taga <yukitaga@> wrote: > > > > That was exactly my take on it. Wonderful that I can use IF, but why > > is it possible? > > > > Tomasz ???? (The layman's interpretation, please.) ^_^ > > > > Yuki > > > > Monday, June 14, 2010, 5:11:34 PM, you wrote: > > > > TS> Rick changing a string to a number THAT'S COMING FROM AN ARRAY > > TS> and after that changing a number to a string again, should give > > TS> me the same array with the initial strings. But the fact that I > > TS> can use IF after the string manipulation shows me that I am no > > TS> longer having an array ... I still do not get this. Weird ... > > > > TS> Tomasz ???? > > > > TS> Regards, Ton. > > > > > > TS> ----- Original Message ----- > > TS> From: Rick Osborn > > TS> To: [email protected] > > TS> Sent: Sunday, June 13, 2010 5:33 PM > > TS> Subject: Re: [amibroker] impenetrable AFL > > > > > > TS> > > > > TS> First off let me repeat - this is not my original code. > > TS> I found it in someone's code for TD Sequential (with apologies > > TS> to the original coder - didn't keep your name) > > > > TS> The Buysignal is a Flip(Buy,Sell) type - or could be a true/false > > item. > > > > TS> Checking the help file the NunToStr says > > TS> FUNCTION It is used to convert numeric value of NUMBER or > > ARRAY to string. > > TS> Next the StrToNum function > > TS> FUNCTION It is used to convert numeric value of NUMBER or > > ARRAY to string. > > TS> So the combination of changing that value of the array from a > > TS> number to a string and then "that string" back to "a number" (not an > > array) > > > > TS> LastValue works the same but I still don't understand that function > > well enough. > > TS> From the help file > > TS> FUNCTION Returns last calculated value of the specified > > TS> ARRAY. The result of this function can be used in place of a > > TS> constant (NUMBER) in any function argument. > > TS> If ARRAY is undefined (e.g., only 100-days loaded and > > TS> you request the last value of a 200-day moving average) then the > > TS> lastvalue function returns zero. > > TS> Caveat: since this function fills an entire data array > > TS> with the last value of another array, it allows a formula to look into > > the future. > > TS> so if there are repeated events (buy signals and sell > > TS> signals), I'm not sure if lastvalue sees any but the last one. Plus I > > worry about the Caveat!! > > > > > > TS> Best Regards > > TS> Rick Osborn > > > > > > > > > > > > TS> > > ------------------------------------------------------------------------------ > > TS> From: Ton Sieverding <ton.sieverding@> > > TS> To: [email protected] > > TS> Sent: Sun, June 13, 2010 2:55:32 AM > > TS> Subject: Re: [amibroker] impenetrable AFL > > > > TS> > > TS>  > > > > TS> That's interesting code, Rick. Can you explain me why this works ? > > > > TS> 1. First I assume BuySignal to be BUY. Therefore being an > > TS> array. So IF should not work. Should be IIF. But even when I put > > TS> there BUY to be sure it's an array, it does work. Why ? > > > > TS> 2. What's the difference between StrToNum(NumtoStr( BUY)) and > > TS> BUY ? Should give me the same result. But is does not. Without > > TS> this trick I cannot use IF. What's going on here ???? > > > > TS> Regards, Ton. > > > > > > TS> ----- Original Message ----- > > TS> From: Rick Osborn > > TS> To: amibro...@yahoogrou ps.com > > TS> Sent: Saturday, June 12, 2010 10:52 PM > > TS> Subject: Re: [amibroker] impenetrable AFL > > > > > > TS> > > > > TS> Yuki > > > > TS> I have the following code which changes the background > > TS> gradient color depending on whether a buy or sell signal is given. > > > > TS> if(StrToNum(NumToStr(BuySignal)) ) > > TS> bgColor = ColorRGB(0,66, 2); > > TS> else > > TS> bgColor = ColorRGB(66,2, 0); > > TS> SetChartBkGradientF ill( colorBlack, bgColor); > > > > > > TS> Perhaps you can change this to meet your needs > > > > > > TS> Best Regards > > TS> Rick Osborn > > > > > > > > > > > > TS> > > ---------------------------------------------------------------------------- > > TS> From: Yuki Taga <yukit...@tkh. att.ne.jp> > > TS> To: amibro...@yahoogrou ps.com > > TS> Sent: Sat, June 12, 2010 1:24:58 AM > > TS> Subject: [amibroker] impenetrable AFL > > > > TS> > > TS> Impenetrable! (At least to me.) > > > > TS> xcolor = IIf(TSI >= SigLine, SetChartBkGradientF ill( > > TS> ParamColor(" BgTop", ColorRGB( 172,172,172 )), > > TS> ParamColor(" BgBottom" , ColorRGB( 172,172,172 ))), > > TS> SetChartBkGradientF ill( ParamColor(" BgTop", ColorRGB(140, 140,140)) , > > TS> ParamColor(" BgBottom" , ColorRGB(140, 140,140)) )); > > > > TS> SetChartBkColor( SelectedValue( xcolor)); > > > > TS> I tried that line above as > > TS> SetChartBkGradientF ill(SelectedValu e(xcolor) ); but that produced > > a > > TS> syntax error. > > > > TS> I think you can see what I'm trying to do here. The idea is simple: > > TS> change the background gradient depending on a true/false result. The > > TS> gradients in this example are not the gradients I would actually use > > TS> (in fact they are not gradients at all, as your intelligent eyes > > will > > TS> quickly have seen). They are just test code to see if I can even > > TS> make it work. I cannot. > > > > TS> For one thing, the gradient does not change no matter the selected > > TS> value. It's static. For another thing, the margin background goes > > TS> to black, a hideous (although somewhat foreseen) result. > > > > TS> Okay, what am I doing wrong, and where did I miss this in the docs? > > TS> And what, if anything, can I do about this margin result? The only > > TS> way I can change the *entire* background color is by not using a > > TS> gradient??? (Using SetChartBkColor) How sad that would be! I can > > TS> make that work, at least. But not with a gradient. > > > > TS> Anything is possible in Amibroker, right? > > > > TS> Wrong? > > > > TS> Thanks, > > > > TS> Yuki > > > > > > > > > > > > TS> > > >
