ÓÏÂÓÔ×ÅÎÎÁÑ.
public class Arbitrage : Strategy
{
... ÐÅÒÅÍÅÎÎÙÅ ...
public Arbitrage(QuikTrader trader, TradeSec ts1, TradeSec
ts2, double spreadInPercent, int minimalQty, int maxiQty)
: base()
{
_trader = trader;
this.Interval = TimeSpan.FromSeconds(1);
minQty = minimalQty;
maxQty = maxiQty;
Portf1 = ts1.p;
Portf2 = ts2.p;
ClientCode1 = ts1.client;
ClientCode2 = ts2.client;
Sec1 = ts1.s;
Sec2 = ts2.s;
k1 = ts1.koef;
k2 = ts2.koef;
Spread = spreadInPercent;
md1 = new MarketDepth(Sec1);
md2 = new MarketDepth(Sec2);
_trader.RegisterQuotes(Sec1);
_trader.RegisterQuotes(Sec2);
_trader.QuotesChanged += new
Action<MarketDepth>(_trader_QuotesChanged);
}
void _trader_QuotesChanged(MarketDepth md)
{
if (md.Security == Sec1)
{
md1 = md;
}
if (md.Security == Sec2)
{
md2 = md;
}
}
protected override bool OnProcess()
{
if (this.ProcessState == StrategyProcessStates.Stopping)
{
return false;
}
if (!this.buzzy)
{
this.buzzy = true;
var ords = AlgoSpread();
if (ords != null && ords.Length >= 2)
{
// done ËÌÉÒÉÎÇ?
if (!Sec1.Exchange.IsTradeTime(Trader) || !
Sec2.Exchange.IsTradeTime(Trader))
{
AddLog(ErrorState, "îÅÔÏÒÇÏ×ÒÅ ×ÒÅÍÑ", this);
return true;
}
foreach (Order o in ords)
{
if (o.Portfolio == Portf1)
_trader.ClientCode = ClientCode1 + "//" +
orderParNum.ToString();
else if (o.Portfolio == Portf2)
_trader.ClientCode = ClientCode2 + "//" +
orderParNum.ToString();
else
_trader.ClientCode = "X";
AddLog(ErrorState, "new order " +
o.Direction.ToString() + " " +
o.Security.Code + " " + o.Price + " " +
o.Volume,
this);
try
{
RegisterOrder(o);
}
catch (Exception regOrderError)
{
AddLog(this.ErrorState, " ïÛÉÂËÁ
×ÙÓÔÁ×ÌÅÎÉÑ ÚÁÑ×ËÉ", this);
AddLog(ErrorState, regOrderError.Message,
this);
}
}
}
this.buzzy = false;
}
return true;
}
protected override void OnRunned()
{
base.OnRunned();
buzzy = false;
}
void QuotesChanged(OrderDirections arg1, IDictionary<int,
Quote> arg2)
{
if (!buzzy)
this.OnProcess();
}
protected override void OnStopping()
{
Trader.QuotesChanged -= _trader_QuotesChanged;
base.OnStopping();
}
×ÏÔ ÐÒÉÍÅÒÎÏ ÔÁË. ÓÔÁÒÁÌÓÑ ÄÅÌÁÔØ ËÁË × ÐÒÉÍÅÒÁÈ ÎÏ ×ÉÄÉÍÏ ÞÔÏÔÏ
ÕÐÕÓÔÉÌ.