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

[amibroker] Re: How to convert a string to non-string characters?!



PureBytes Links

Trading Reference Links

It isn't impossible, just akward. I would try to find another way. 

StrToNum will convert the number up to the first non-number, the  
character + in your case. That is why you get 3 instead of 12.
3 + 4 + 5 is not a number and strToNum is not smart enough to add the 
numbers. When it gets to the + it quits and returns 3.

To sum numbers in a string you have to parse the string to extract 
the numbers. This will extract the numbers from the string and sum 
them. The printf lines show what is being done along the way.

VarSetText("Condition1", "3 + 4 + 5");
 
aStr = VarGetText("Condition1");
a = aStr;
Offset = StrFind(aStr, "+") +1;
Len = StrLen(aStr);
b = StrMid(aStr, Offset, Len);
Offset = StrFind(b, "+") +1;
Len = StrLen(b);
d = StrMid(b, Offset, Len);

// this shows the output of the parser
// at this point a, b and d are strings, not numbers.
printf("a= " + a + ", b= " + b + ", d= " + d);

// strToNum returns the number up to first text character
x = StrToNum(a); // x = 3
y = StrToNum(b); // y = 4
z = StrToNum(d); // z = 5

// now you can sum the numbers
printf("\nTotal =" + NumToStr(x+y+z, 1)); 

Of course if you have an alphanumeric string, such as "Sum 3 plus 4 
and  then add 5.", the parsing it will get very difficult but it can 
be done.   

Barry

--- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@xxx> wrote:
>
> If it is just plain impossible to convert strings to actual values
> (other than plain numbers), perhaps my DLL plugin needs to spit 
work in
> a different way?
> 
> This is the type of thing I am trying to achieve - to cycle through
> thousands of conditions like:
> 
> Condition1    = MA(C, 12) > C5  AND MA(C,20)    < Close;
> Condition2    = EMA(L,4)  > C3  OR  MA(H,7)     > Close;
> .
> .
> .
> Condition2555 = MA(H, 50) < C12 AND  EMA(L, 12) < Close;
> 
> 
> Setting the left sides of the above expressions is easy, using 
dynamic
> variables.
> 
> But my DLL spits out the right sides of the above expressions, but 
only
> as strings. So instead of the DLL returning strings, how else could 
it
> interface with AmiBroker so that the dynamic assignments above are
> created in the AFL?
> 
> 
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> >
> > Or to take a more trivial example, the following prints "3" 
instead of
> > "12":
> >
> > VarSetText("Condition1", "3 + 4 + 5");
> >
> > Total = StrToNum (VarGetText("Condition1"));
> >
> > printf ("Sum %g", Total);
> >
> > How do I convert the above string so that Total is equal to the
> > expression itself, which is equal to 12?
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote:
> > >
> > > Yes, tried that. But since the values spit out by the function
> aren't
> > > just pure numbers, it does not seem to work.
> > >
> >
>



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

**** 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/