Котирование
Atom
16.01.2015
Иван З.


Как я понимаю есть 2 варианта запустить котирования

  1. из документации http://stocksharp.com/doc/?topic=html/24250c24-029c-4dbc-bc8b-4afde645e483.htm [code=csharp]var strategy = new MarketQuotingStrategy(order, new Unit()); base.ChildStrategies.Add(strategy);[/code] Работает нормально, по крайней мере позиции набирает.

  2. из одного из обновления http://stocksharp.com/forum/2285/Stock--4-0-Release/ [code=csharp] this.OpenPositionByQuoting(10); [/code] Работает не нормально, либо не правильно использую В стратегии просто набираю позицию [SPOILER][code=csharp] using MoreLinq; using StockSharp.Algo.Strategies.Quoting; using StockSharp.BusinessEntities;

namespace Sample { using StockSharp.Algo; using StockSharp.Algo.Candles; using StockSharp.Algo.Indicators; using StockSharp.Algo.Strategies; using StockSharp.Messages;

class MyStrategy : Strategy
{
    public MyStrategy(){}
    protected override void OnStarted()
    {
        Process();
        base.OnStarted();
    }


    private void Process()
    {
        // если наша стратегия в процессе остановки
        if (ProcessState == ProcessStates.Stopping)
        {
            // отменяем активные заявки
            CancelActiveOrders();
            return;
        }
        if (Position == 0)
        {
           //var strat = new MarketQuotingStrategy(Sides.Buy, 10);
           //base.ChildStrategies.Add(strat);
           this.OpenPositionByQuoting(10);
        }

    }
}

} [/code][/SPOILER] В тестовом КВИКе выдает ошибку [img]http://clickscreen.ru/screens/2/a04e66b2.png [/img] Лог приложу Еще раз повторю, что 1й работает а 2й не работает Вопрос: это я не правильно использую или это баг?

log.txt 72 KB (762)

Теги:


Спасибо:


<< < 3 4 5 
RomSunZ

Фотография
Дата: 08.03.2015
Ответить


Судя по коду на кодплексе проблема в том, что [code=csharp] this.AddInfoLog("Отмена заявки {0}.", _order.TransactionId); _isCanceling = true;

				_order
					.WhenCanceled()
					.Do((r, o) =>
					{
						this.AddInfoLog("Заявка {0} была снята. Время снятия {1}.", o.TransactionId, o.LastChangeTime);

						Rules.RemoveRulesByToken(o, r);

						if (_order == o)
						{
							_manualReRegisterOrder = _order;
							_order = null;
							_isCanceling = false;
							ProcessQuoting();
						}
						else
							this.AddWarningLog("Заявка {0} устарела.", o.TransactionId);
					})
					.Once()
					.Sync(_syncToken)
					.Apply(this);

				CancelOrder(_order);

[/code] _order.WhenCanceled() не срабатывает, т.к. ордер УЖЕ отменен до того, как подписались на это событие. Думаю, нужно добавить проверку типа _order.StateOrderStates.Active. Если да, то выполнить выше приведенную ветку, если нет и орден не NULL и состояние стратегии Active, то вызвать ProcessQuoting, либо в конце процедуры ProcessQuoting делать проверку [code=csharp] if (_isCancelingtrue && this.ProcessStateProcessStates.Active && _order.StateOrderStates.Done) { _isCanceling=false; ProcessQuoting(); //либо вызвать здесь событие orderCancelled, чтобы сработала ветка приведенная выше, либо делать подписку на событие WhenCanceled в момент создания ордера... } [/code]

Спасибо:
<< < 3 4 5 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy