Nektodron, подскажите пож по коду блока-индикатора: возможно ли здесь чтобы вместо цены закрытия новой свечи на графике отражалось расчётное значение bid/ask 2-х источников в режиме реальных торгов, например: bid источника1 - ask источника 2, и что нужно использовать? И можно ли сделать это в этом коде используя эти интерфейсы?

Code:
namespace spr1
{	  
	  public class spreadkR : ISecurityInputs, ISecurityReturns, ITwoSourcesHandler, IStreamHandler
	  {
	  	[HandlerParameter(true, "", NotOptimized = true)]
		 public double k1 { get; set; }
		 [HandlerParameter(true, "", NotOptimized = true)]
		 public double k2 { get; set; }
		 
		
		 public ISecurity Execute(ISecurity source1, ISecurity source2)
		{
			var Bars = new List<Bar>(source1.Bars.Count);
			var C1 = source1.ClosePrices;
			var H1 = source1.HighPrices;
			var L1 = source1.LowPrices;
			var O1 = source1.OpenPrices;
			var C2 = source2.ClosePrices;
			var H2 = source2.HighPrices;
			var L2 = source2.LowPrices;
			var O2 = source2.OpenPrices;			
		    IList<Bar> NC = new List<Bar>(Bars.Count);
		    IList<double> op = new List<double>(C1.Count);
		    IList<double> hi = new List<double>(C1.Count);
		    IList<double> lo = new List<double>(C1.Count);
		    IList<double> cl = new List<double>(C1.Count);		    
		    
		    double Open,High,Low,Close,L,H;
			
		    for(int i=0; i<C1.Count; i++)
		    {		    	
		    	    Open=k1*O1[i]-k2*O2[i];
		    		Close=k1*C1[i]-k2*C2[i];
		    		L = k1*L1[i]-k2*L2[i];
		    		H = k1*H1[i]-k2*H2[i];
		    		Low = Math.Min(Math.Min(L,H),Math.Min(Open,Close));
		    		High= Math.Max(Math.Max(L,H),Math.Max(Open,Close));
		    	
		    	op.Add(Open);
		    	hi.Add(High);
		    	lo.Add(Low);
		    	cl.Add(Close);
		    }
		    
		    int j=0;
		    foreach(var bar in source1.Bars)
		    {
		    	var hav = new Bar(bar.Color, bar.Date,
		    	                  op[j],
		    	                  hi[j],
		    	                  lo[j],
		    	                  cl[j],
		    	                  bar.Volume);
		    	NC.Add(hav);
		    	j++;
		    }
		    
		    return source1.CloneAndReplaceBars(NC);
		}		
		public IContext Context { get; set; }
	}	  
}


Отредактировано uprav (Thu Sep 23 2010 08:53 PM)
_________________________