Very interesting -- please share it.
--- In [email protected], "netsdkforab" <netsdkfo...@...> wrote:
>
> Hi,
>
> I have been working on .Net SDK. A have sent a post before
>
> http://finance.groups.yahoo.com/group/amibroker/message/142119
>
> but I got only 3 replies.
>
> If anyone is interested please reply to me directly. (If there is not enough
> interest I will not make it available. I do it, bacause I do intraday
> autotrading.)
>
> Here are two sample code fragments. The first is an indicator class with
> three indicator panels. The third function demos how to pass AFL variables
> between .Net and AFL.
>
> The second code fragment starting with the [ABMethod] attribute is a real
> plug in function that is directly accessable from AFL. (But this is for more
> advanced developers.) There are three parameters (array, string and float)
> passed from AFL to the .Net function.
>
> Regards,
>
> NetSDKforAB
>
> using System;
> using System.Diagnostics;
> using AmiBroker;
> using AmiBroker.PlugIn;
> using YUtils;
>
> namespace SamplePlugIn
> {
> unsafe public class Samples : IndicatorBase
> {
> /// <summary>
> /// This function demos how to create a simple
> /// "average crossing" indicator in .Net.
> /// ATArray objects (Open, High, etc.) hold time series data.
> /// AFxxx classes have static members to execute AFL functions.
> /// </summary>
> public void Sample1()
> {
> // calculate typical price from bar price data
> ATArray MyTypicalPrice = (High + Low + 2 * Close) / 4;
>
> // calculate slow average of typical price
> ATArray SlowMa = AFAvg.Ma(MyTypicalPrice, 20);
>
> // plotting average typical price
> AFGraph.Plot(SlowMa, "Ma20", Color.Black, Style.Thick);
>
> // calculate fast average of close price
> ATArray FastEma = AFAvg.Ema(Close, 5);
>
> // plotting fast average close price with alternating color
> AFGraph.Plot(FastEma, "Ema5",
> AFTools.Iif(SlowMa < FastEma, (float)Color.DarkGreen,
> (float)Color.Brown),
> Style.Line);
>
> // calculate the difference of the two averages
> ATArray Diff = (FastEma - SlowMa) / SlowMa * 100;
>
> // plotting difference as a histogram
> AFGraph.Plot(Diff, "Diff", Color.Red, Style.Histogram |
> Style.OwnScale, -0.2f, 0.2f);
> }
>
> /// <summary>
> /// Demos how to do fast loops
> /// Because of compiled code and integer index arithmetric
> /// loops are 2-10 times faster than AFL script loops
> /// </summary>
> public void Sample2()
> {
> try
> {
> int maPeriod = 20;
> float tempSum;
>
> // declaration of result array
> ATArray MyMa;
>
> // allocation of memory for result array
> MyMa = new ATArray();
>
> // set null values to the beginning of the array
> for (int i = 0; i < maPeriod - 1 && i < MyMa.Length; i++)
> MyMa[i] = ATFloat.Null;
>
> // calculate the average for each bar
> for (int i = maPeriod - 1; i < MyMa.Length; i++)
> {
> // clear temporary result
> tempSum = 0.0f;
>
> // inner loop to sum bar data
> for (int j = 0; j < maPeriod; j++)
> tempSum = tempSum + Close[i - j];
>
> // saving calculated value to array
> MyMa[i] = tempSum / maPeriod;
> }
>
> // plot the calculated average
> AFGraph.Plot(MyMa, "MyMa", Color.Black, Style.Line);
> }
> catch (Exception e)
> {
> YException.Show("Error while executing indicator.", e);
> }
> }
>
> /// <summary>
> /// Reading and writing AFL global variables
> /// </summary>
> public void Sample3()
> {
> try
> {
> // defining AFL variable object
> ATAfl EmaPeriodAfl = new ATAfl("Period");
>
> // reading value from AFL variable
> // AFL variable MUST be initialized with a float value
> // uninitialized variable or other data types will cause
> exception
> float emaPeriod = EmaPeriodAfl.GetFloat();
>
> // do the calculation of the average
> ATArray MyEma = AFAvg.Ema(Close, emaPeriod);
>
> // plot the average
> AFGraph.Plot(MyEma, "MyEma", Color.Black, Style.Line);
>
> // defining AFL variable "MyEma" to store result
> ATAfl EmaAfl = new ATAfl("MyEma");
>
> // setting calculated array value to AFL variable
> // following AFL scripts can use this calculated array
> EmaAfl.Set(MyEma);
> }
> catch (Exception e)
> {
> YException.Show("Error while executing indicator.", e);
> }
> }
> }
> }
>
>
> [ABMethod]
> [ABParameter(0, Type = ABParameterType.Array, Decription = "color")]
> [ABParameter(1, Type = ABParameterType.String, Decription =
> "plotName")]
> [ABParameter(2, Type = ABParameterType.Float, Decription = "level")]
> unsafe public static ATVar XDebugRibbon(int argNum, ATVar* argList)
> {
> YDebug.DebugRibbon(argList[0].GetArray(), argList[1].GetString(),
> (int)argList[2].GetFloat());
> return ATVar.CreateNone();
> }
>