← Voltar

ActionStrategy и QuotingStrategy

А есть примерчики по ActionStrategy и QuotingStrategy ? И в чём разница между ними ?

Este tópico foi útil?

Compartilhar tópico

Comentários (13)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Mikhail Sukhov
Mikhail Sukhov

freelancer: А есть примерчики по ActionStrategy и QuotingStrategy ? И в чём разница между ними ?

Документацию читали?🙂

freelancer
freelancer Autor

Читал. Там есть пример стратегии, но нет кода как с ней работать

freelancer
freelancer Autor

Товарищи ! Нужен работающий пример с использованием ActionStrategy. Тут просят И тут тоже

Тут маловато

Mikhail Sukhov
Mikhail Sukhov

freelancer: Товарищи ! Нужен работающий пример с использованием ActionStrategy. Тут просят И тут тоже

Тут маловато

Вы не с того конца подходите к задаче. ActionStrategy - это понимание работы делегатов в .NET. Лямбда выражений. Поймете их, поймете и ActionStrategy, потому что это производная вещь. Вот код хедж стратегии:

/// <summary>
/// Метод вызывается тогда, когда вызвался метод <see cref="Strategy.Start"/>,
/// но состояние процесса <see cref="Strategy.ProcessState"/> еще не перешло в значение <see cref="StrategyProcessStates.Runned"/>.
/// </summary>
protected override void OnRunning()
{
	base
		.When(_tradingStrategy.StrategyNewMyTrades())
		.Do(ReHedge)
		.MakePeriodical();

	base
		.When(base.Security.Changed())
		.Do(ReHedge)
		.MakePeriodical();

	base.OnRunning();
}

private void ReHedge()
{
	var futurePosition = _tradingStrategy.ChildStrategies.SyncGet(c =>
			(from strategy in c
			 let option = strategy.Security
			 select (option.Delta(option.Volatility / 100m)) * strategy.PositionManager.Position).Sum());

	AddInfoLog("Дельта позиции {0}.", futurePosition);

	var diff = (int)futurePosition - (int)base.PositionManager.Position;

	if (diff != 0)
	{
		var order = CreateOrder(diff > 0 ? OrderDirections.Buy : OrderDirections.Sell, 0, diff);
		ChildStrategies.Add(CreateQuoting(order));
	}
}
freelancer
freelancer Autor

Спасибо. Ну вот не работает и всё. Даже When(() => true)

Mikhail Sukhov
Mikhail Sukhov

freelancer: Спасибо. Ну вот не работает и всё. Даже When(() => true)

Чуть подробнее.

freelancer
freelancer Autor
class GAStrategy : ActionStrategy
{
	protected override void OnRunning()
	{
	    When(() => true).
	    Do(() =>
	    {
	        AddLog(StrategyErrorStates.None, base.Security.LastTrade.Time.ToString(), null);
	    }).
	    MakePeriodical(); // сделать событие периодичным
	
	    base.OnRunning();
	}
}
_strategy = new GAStrategy() { Volume = NumberContracts, Security = _sec, Interval = TimeSpan.FromMinutes(2) };
_strategy.Log += OnLog;
_strategy.NewOrder += OnNewOrder;
_strategy.PropertyChanged += OnStrategyPropertyChanged;

_manager.Register(_strategy, portfoliosComboBox.SelectedPortfolio, _sec);

_candleManager.RegisterTimeFrameCandles(_sec, _timeFrame);

FileStrategyLogger fileLogger = new FileStrategyLogger("log.txt");

fileLogger.Strategies.Add(_strategy);

_trader.RegisterQuotes(_strategy.Security);
_trader.RegisterSecurity(_strategy.Security);
_strategy.Start();

И ничего не происходит (в логе только "Стратегия запущена")

Mikhail Sukhov
Mikhail Sukhov

События активизируются в зависимости от интервала стратегии.

freelancer
freelancer Autor

Я ставил 2 мин. И ждал...

Mikhail Sukhov
Mikhail Sukhov

freelancer: Я ставил 2 мин. И ждал...

Уберите инициализацию интервала.

freelancer
freelancer Autor

Заработало ! Буду дальше разбираться. Можно сразу вопрос: какие конкретно таблицы выгружаются при StartExport() ? Просто не могу получить все портфели с помощью StartDde(...)

Mikhail Sukhov
Mikhail Sukhov

freelancer: Заработало ! Буду дальше разбираться. Можно сразу вопрос: какие конкретно таблицы выгружаются при StartExport() ? Просто не могу получить все портфели с помощью StartDde(...)

http://stocksharp.com/forum/1522/Portfolios-QUIK/

freelancer
freelancer Autor

Спасибо. Работает