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


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

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

Работает нормально, по крайней мере позиции набирает.

  1. из одного из обновления http://stocksharp.com/forum/2285/Stock--4-0-Release/

this.OpenPositionByQuoting(10);

Работает не нормально, либо не правильно использую В стратегии просто набираю позицию


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);
            }
  
        }
    }
}

В тестовом КВИКе выдает ошибку Лог приложу Еще раз повторю, что 1й работает а 2й не работает Вопрос: это я не правильно использую или это баг?

log.txt 72 KB (774)

Теги:


Спасибо:


<< < 3 4 5 
RomSunZ

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


Судя по коду на кодплексе проблема в том, что


					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);

_order.WhenCanceled() не срабатывает, т.к. ордер УЖЕ отменен до того, как подписались на это событие. Думаю, нужно добавить проверку типа _order.State==OrderStates.Active. Если да, то выполнить выше приведенную ветку, если нет и орден не NULL и состояние стратегии Active, то вызвать ProcessQuoting, либо в конце процедуры ProcessQuoting делать проверку


if (_isCanceling==true && this.ProcessState==ProcessStates.Active && _order.State==OrderStates.Done)
{
_isCanceling=false;
ProcessQuoting();
//либо вызвать здесь событие orderCancelled, чтобы сработала ветка приведенная выше, либо делать подписку на событие WhenCanceled в момент создания ордера...
}

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

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

loading
clippy