S#.API 4.2.1.3
Atom
12/18/2013
Rebelion


Второй день подряд в момент сильного движа вижу картину маслом - в районе 11-ти вечера случается какой-то глюк и происходит накопление позиции, при этом сам бот подвисает так, что лог не посмотреть (я сдуру отключил печатный лог, оставил только мониторинг, запускал из-под MSVS, бот повис). Вчера успел выйти из позы без сильных потерь. А сегодня на заявлениях дяди Бени влетел мама не горюй - процентов 20 счёта подарил кому-то.
Я без претензий, просто осторожнее пользоваться на первых порах новой сборкой рекомендейшн. Сам откатываюсь на 4.1.19.1 - там такого не бывало.

P.S. Работал через QuikTrader (если эта инфа может что дополнительное дать).

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 12/19/2013
Reply


Rebelion
P.S. Работал через QuikTrader (если эта инфа может что дополнительное дать).


Нам пишут, что мол в новых версий что-то не работает. А у вас все наоборот. Не просто работает, да еще и своей жизнь зажило.

Скорее всего ошибка не в коннекторе.
Thanks:

Rebelion

Avatar
Date: 12/19/2013
Reply


Михаил Сухов
Rebelion
P.S. Работал через QuikTrader (если эта инфа может что дополнительное дать).


Нам пишут, что мол в новых версий что-то не работает. А у вас все наоборот. Не просто работает, да еще и своей жизнь зажило.

Скорее всего ошибка не в коннекторе.


Михаил, я, собственно, не претендую на истину в последней инстанции и не пытаюсь доказать, что всё плохо. Наоборот, всё кул. Не будь S#, то у мну не было бы нормальной торговой платформы для бота. Просто хотел акцентировать внимание, что код, стабильно работающий в 4.1.19.1 пару раз закосячил в 4.2.1.3. Вполне вероятно, что у меня руки из жопы растут. Т.к. пока у мну нет подробного описания функционала кроме того, что идёт в стандартной комплектации, то работаю методом проб и ошибок, если честно. После НГ планирую пойти на курсы по S#, да. Пока что просто денег нет.
Просто хотел акцентировать внимание на то, что была проблема после перехода на новую версию. И что новичкам типа меня не стоит со стабильной версии переходить на более новую пока что, ибо чревато... :-(

Если ткнёте мордой в ошибки моего кода, приводящего к таким последствиям, - я и проставиться могу, в случае чего.

Code

                        if (isNewEntranceSignalUp && Position <= 0 || isNewEntranceSignalDown && Position >= 0 || isNeedtoBeClose)
                        {
                            CancelActiveOrders();

                            SuspendRules();

                            if (Position != 0)
                            {
                                var orderDirectionToClose = Position < 0 ? OrderDirections.Buy : OrderDirections.Sell;
                                var orderPriceToClose = Position < 0 ? Security.MaxPrice : Security.MinPrice;

                                var oldPositionToClose = this.CreateOrder(orderDirectionToClose, orderPriceToClose, Math.Abs(Position));
                                oldPositionToClose.Comment = "Main";

                                RegisterOrder(oldPositionToClose);
                            }                            

                            var newOrderDirection = isNewEntranceSignalUp == true ? OrderDirections.Buy : OrderDirections.Sell;
                            var newOrderPrice = isNewEntranceSignalUp == true ? Security.MaxPrice : Security.MinPrice;                         

                            var newPositionToOpen = this.CreateOrder(newOrderDirection, newOrderPrice, 1);
                            newPositionToOpen.Comment = "Main";

                            newPositionToOpen.WhenMatched().Do(() => newPositionToOpen.WhenNewTrades().Do(OnNewOrderTrades).Apply(this)).Apply(this);
                            RegisterOrder(newPositionToOpen);
                            
                            ResumeRules();
                        }



Code

        private void OnNewOrderTrades(IEnumerable<MyTrade> myTrades)
        {
            var protectiveStrategies = myTrades.Select(t =>
            {
                if (t.Order.Comment.CompareTo("Main") == 0)
                {
                    var newStrategyFromTrade = new StopLossStrategy(t, new Unit(TraderHelper.ShrinkPrice(t.Trade.Security, stopLossParameter * (decimal)currentParams.candleSize))) { IsTrailing = true, UseQuoting = false, PriceOffset = (decimal)currentParams.candleSize * pricePieces, DisposeOnStop = true, ProtectiveVolume = t.Trade.Volume, MaxRegisterFailCount = 5, };
                    externalogManager.Sources.Add(newStrategyFromTrade);

                    return newStrategyFromTrade;
                }
                else
                    return null;
            });

            foreach (var s in protectiveStrategies)
            {
                if (s != null)
                    ChildStrategies.Add(s);
            }

            base.OnNewMyTrades(myTrades);
        }


Собственно,
Code
isNewEntranceSignalUp, isNewEntranceSignalDown, isNeedtoBeClose
- логические переменные, определяющие вход в позицию.

В основном, всё остальное стандартно - у бота ноги растут, как можно понять, из SampleSMA.
Thanks:

Mikhail Sukhov

Avatar
Date: 12/20/2013
Reply


Rebelion

Если ткнёте мордой в ошибки моего кода, приводящего к таким последствиям, - я и проставиться могу, в случае чего.


Ошибки чаще оказываются не там, где мы их ожидаем. Это к приведенному коду.

Добавляйте логи и смотриеи, что у вас и как реагирует. Найдете ошибки - пишите на форум.
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy