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();
>         }
>


Reply via email to