yaad, а линия Шимоку должна опережать на 25 минут? smile Я просто не в курсе...


Если компильнуть в таком коде:
Click to reveal..
Code:
using System.Collections.Generic;
using System.Linq;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;


namespace TSLab.Community.Ichimoku
{ 
	[HandlerCategory("Ichimoku")]
	
    public abstract class BaseSen
    {
        public virtual int Period { get; set; }

        public IList<double> Execute(ISecurity source)
        {
            // for cacheing purpose using Context.GetData
            var high = Context.GetData("Highest", new[] { Period.ToString() },
                                       () => Series.Highest(source.HighPrices, Period));
            var low = Context.GetData("Lowest", new[] { Period.ToString() },
                                       () => Series.Lowest(source.LowPrices, Period));

            IList<double> list = new List<double>(high.Count);
            for (int i = 0; i < high.Count; i++)
            {
                var avg = (high[i] + low[i]) / 2;
                list.Add(avg);
            }
            return list;
        }

        public IContext Context { get; set; }
    }

    	[HandlerCategory("Ichimoku")]
    public class TenkanSen : BaseSen, IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "9", Min = "3", Max = "25", Step = "1")]
        public override int Period { get; set; }

    }
    	[HandlerCategory("Ichimoku")]

    public class KijunSen : BaseSen, IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "26", Min = "5", Max = "52", Step = "1")]
        public override int Period { get; set; }
    }
	[HandlerCategory("Ichimoku")]
    public class SenkouA : IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "9", Min = "3", Max = "25", Step = "1")]
        public int TenkanPeriod { get; set; }

        [HandlerParameter(true, "26", Min = "5", Max = "52", Step = "1")]
        public int KijunPeriod { get; set; }

        public IList<double> Execute(ISecurity source)
        {

            var tenkan = new TenkanSen { Period = TenkanPeriod, Context = Context }.Execute(source);
            var kijun = new KijunSen { Period = KijunPeriod, Context = Context }.Execute(source);

            var count = source.HighPrices.Count + KijunPeriod;
            var result = new double[count];
            for (int i = 0; i < source.HighPrices.Count; i++)
            {
                var middle =  kijun[i] + (tenkan[i] - kijun[i]) / 2;
                result[i+KijunPeriod] = middle;
            }
            return result;
        }

        public IContext Context { get; set; }
    }
    	[HandlerCategory("Ichimoku")]

    public class SenkouB : IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "52", Min = "25", Max = "255", Step = "1")]
        public int Period { get; set; }

        [HandlerParameter(true, "26", Min = "5", Max = "52", Step = "1")]
        public int KijunPeriod { get; set; }

        public IList<double> Execute(ISecurity source)
        {
            var avg = new TenkanSen { Period = Period, Context = Context }.Execute(source);

            var count = source.HighPrices.Count + KijunPeriod;
            var result = new double[count];
            for (int i = 0; i < source.HighPrices.Count; i++)
            {
                result[i + KijunPeriod] = avg[i];
            }
            return result;
        }

        public IContext Context { get; set; }
    }
    	[HandlerCategory("Ichimoku")]

    public class Chinkou : IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "26", Min = "5", Max = "52", Step = "1")]
        public int KijunPeriod { get; set; }

        public IList<double> Execute(ISecurity source)
        {
            var close = source.ClosePrices;

            var result = new double[close.Count-KijunPeriod];
            for (int i = 0; i < result.Count(); i++)
            {
                result[i] = close[i + KijunPeriod];
            }
            return result;
        }

        public IContext Context { get; set; }
    }
} 


То появится папочка Ишимоку, так мне кажется удобней пользовать большие индикаторы smile


Attachments
шимоку.jpg (7203 downloads)



Отредактировано 777 (Tue Aug 17 2010 08:26 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.