2.6 ActionStrategyConditionHelper работает ?

2.6 ActionStrategyConditionHelper работает ?
Atom
11/30/2010
ustas


Приветствую уважаемых Михаила и всех коллег.

  1. После перехода на 2.6 у меня перестало срабатывать ActionStrategyConditionHelper например CurrentCandleTotalVolumeMore в 2.5.2 работало. Или у меня одного так и больше никто ничего подобного не заметил?

Делаю так

 public static Func<bool> ctv;
...
 _candleManager.CandlesChanged += (token, candles) =>
                            {
                                ctv= ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, 1);                                                               
                                DrawCandles(candles);
                            };

В DrawCandles вывожу ctv(), которое всегда false , при этом данные по свечкам ок

  1. Пример в документации "Тейк профит и стоп лосс" пункт 2. а) не компилируется предложение

batch.ChildStrategies.AddRange(trades.Select

AddRange не определён в ChildStrategies и непонятно откуда тут берётся trades или должно быть myTrades ?

и хотелось бы увидеть пример _takeProfit(t); и _stopLoss(t);

б) И еще последний вопрос про логику обработки NewMyTrades в этом же примере. Когда сработают защитные заявки разве не произойдет опять же событие NewMyTrades и выставятся защитные заявки на защитные же.

Спасибо и с уважением!


Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 11/30/2010
Reply


  1. Посмотрите, изменяется ли текущая свечка через CandleManager.CandlesChanged. Кстати, ctv= ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, 1); -> или короче, ctv= token.CurrentCandleTotalVolumeMore(1); Почитайте про extension methods в C#
  2. а. using Ecng.Collections; (те же extension methods). Да, trades. Опечатка. _takeProfit - это делегаты. Тело обычное - new TakeProfitStrategy(trades, new Unit());
  3. б. Хм, логично. Надо проверять.
Thanks: ustas

ustas

Avatar
Date: 11/30/2010
Reply


Mikhail Sukhov:

  1. Посмотрите, изменяется ли текущая свечка через CandleManager.CandlesChanged. да свечка меняется , я её вывожу там же в DrawCandles. (как я уже написал "при этом данные по свечкам ок") Mikhail Sukhov: Кстати, ctv= ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, 1); -> или короче, ctv= token.CurrentCandleTotalVolumeMore(1); Почитайте про extension methods в C# Спасибо. Mikhail Sukhov:
  2. а. using Ecng.Collections; (те же extension methods). Да, trades. Опечатка. _takeProfit - это делегаты. Тело обычное - new TakeProfitStrategy(trades, new Unit()); Понятно, спасибо.
Thanks:

Mikhail Sukhov

Avatar
Date: 11/30/2010
Reply


ustas:

Mikhail Sukhov:

  1. Посмотрите, изменяется ли текущая свечка через CandleManager.CandlesChanged. да свечка меняется , я её вывожу там же в DrawCandles. (как я уже написал "при этом данные по свечкам ок")

Посмотрите в обработчике, что выдает token.Manager.GetCurrentTimeFrameCandle(token.Security, timeFrame); и чему у такой свечки равен TotalVolume.

Thanks:

ustas

Avatar
Date: 11/30/2010
Reply


Mikhail Sukhov: Посмотрите в обработчике, что выдает token.Manager.GetCurrentTimeFrameCandle(token.Security, timeFrame); и чему у такой свечки равен TotalVolume.

а вот token.Manager.GetCurrentTimeFrameCandle(token.Security, timeFrame); выдаёт всё врема null почему то :( хотя свечки рисуются, правда рисую я их по candles

В 2.5.2 работало 100 пудов, я ничего не менял :)

Вы вот тут что то правили, не могли задеть?

Спасибо и с уважением!

Thanks:

Mikhail Sukhov

Avatar
Date: 11/30/2010
Reply


ustas:

Mikhail Sukhov: Посмотрите в обработчике, что выдает token.Manager.GetCurrentTimeFrameCandle(token.Security, timeFrame); и чему у такой свечки равен TotalVolume.

а вот token.Manager.GetCurrentTimeFrameCandle(token.Security, timeFrame); выдаёт всё врема null почему то :( хотя свечки рисуются, правда рисую я их по candles

В 2.5.2 работало 100 пудов, я ничего не менял :)

Вы вот тут что то правили, не могли задеть?

Спасибо и с уважением!

ITrader.MarketTime все корректно возвращает? Если копнуть еще поглубже, CandleManager.GetTimeFrameCandle для необходимо времени так же null возвращает?

Thanks:

ustas

Avatar
Date: 12/1/2010
Reply


Mikhail Sukhov: ITrader.MarketTime все корректно возвращает? Если копнуть еще поглубже, CandleManager.GetTimeFrameCandle для необходимо времени так же null возвращает?

Извиняюсь за паузу. Отъезжал. Да ITrader.MarketTime - верный , а вот CandleManager.GetTimeFrameCandle всё время даёт null :(

Thanks:

Mikhail Sukhov

Avatar
Date: 12/1/2010
Reply


ustas:

Mikhail Sukhov: ITrader.MarketTime все корректно возвращает? Если копнуть еще поглубже, CandleManager.GetTimeFrameCandle для необходимо времени так же null возвращает?

Извиняюсь за паузу. Отъезжал. Да ITrader.MarketTime - верный , а вот CandleManager.GetTimeFrameCandle всё время даёт null :(

А свечки то вообще формируются? NewCandles CandlesChanged?

Thanks:

ustas

Avatar
Date: 12/1/2010
Reply


Mikhail Sukhov: А свечки то вообще формируются? NewCandles CandlesChanged?

ну да, как я говорил, я же их рисую в DrawCandles по candlesиз событий NewCandles и CandlesChanged

Thanks:

Mikhail Sukhov

Avatar
Date: 12/2/2010
Reply


ustas:

Mikhail Sukhov: А свечки то вообще формируются? NewCandles CandlesChanged?

ну да, как я говорил, я же их рисую в DrawCandles по candlesиз событий NewCandles и CandlesChanged

У меня по тестам свечка выдается. Попробуйте все таки точно определить, то ли время передается в CandleManager и есть ли на тот момент свечка (получив их через GetTimeFrameCandles и сравнив, имеет ли необходимая среди нет).

Thanks:

ustas

Avatar
Date: 12/2/2010
Reply


Mikhail Sukhov: У меня по тестам свечка выдается. Попробуйте все таки точно определить, то ли время передается в CandleManager и есть ли на тот момент свечка (получив их через GetTimeFrameCandles и сравнив, имеет ли необходимая среди нет).

А у меня нет :(

Ну вот полностью код примера c выводом

namespace testHelper
{
    using System;
    using System.Linq;
    using System.Threading;
    using System.Collections.Generic;
    using System.ComponentModel;

    using Ecng.Trading.Algo;
    using Ecng.Trading.Algo.Candles;
    using Ecng.Trading.Algo.Strategies;
    using Ecng.Trading.Algo.Logging;
    using Ecng.Trading.BusinessEntities;
    using Ecng.Trading.Quik;
    using Ecng.Interop;
    using Ecng.Data;
    using Ecng.Common;
    using Ecng.ComponentModel;



    public class Program
    {
        private static Portfolio _port;
        private static Security _sec;
        private static QuikTrader _trader;
        private static Func<bool> ctv;
        private static CandleManager _candleManager;
        private static readonly TimeSpan _timeFrame = TimeSpan.FromMinutes(1.0 / 6.0);

 
        static void Main()
        {

            using (var waitHandle = new ManualResetEvent(false))
            {

                _trader = new QuikTrader();
                _trader.Connect();

                _trader.NewPortfolios += portfolios =>
                {
                    if (_port == null)
                    {
                        _port = portfolios.FirstOrDefault();

                        if (_port != null)
                        {
                            Console.WriteLine("Портфель {0} появился.", _port.Name);
                            waitHandle.Set();
                        }
                    }
                };

       
                _trader.NewSecurities += securities =>
                {
                    if (_sec == null)
                    {
                        _sec = securities.FirstOrDefault(sec => sec.Code == "SRZ0");
                        if (_sec != null)
                        {
                            Console.WriteLine(_sec.Code + " появился");
                            waitHandle.Set();

                        }
                    }
                };

                

                waitHandle.WaitOne();

                _trader.IsAsyncMode = true;
                _trader.Terminal.StartDde(new[] { _trader.SecuritiesTable, _trader.TradesTable });


                _trader.Connected += () =>
                {

                    Console.WriteLine("Connected");
                    waitHandle.Set();


                };

                if (_sec != null)
                {
                    _candleManager = new CandleManager(_trader);
                    _candleManager.RegisterTimeFrameCandles(_sec, _timeFrame);


                    _candleManager.NewCandles += (token, candles) =>
                    {

                        var _nextTime = _timeFrame.GetCandleBounds(_trader).Max;
                        var candle = _candleManager.GetTimeFrameCandle(_sec, _timeFrame, _nextTime - _timeFrame);
                        ctv = ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, 1);

                        if (candle != null)
                        {
                            ctv = ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token,1);
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("new candle time:{0} TotalVolume:{1} ctv:{2}",candle.Time, candle.TotalVolume, ctv());
                            Console.ForegroundColor = ConsoleColor.Gray;
                        }
                  
                        DrawCandles(candles);
                    };


                    _candleManager.CandlesChanged += (token, candles) =>
                    {
                        //   _strat.Dispose();
                        ctv = ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, 1);                        
                        DrawCandles(candles);
                    };
                }
     

                waitHandle.WaitOne();

           

                Console.WriteLine("Чтобы закончить, нажмите любую кнопку...");
                Console.Read();

            }

        }

        private static void DrawCandles(IEnumerable<Candle> candles)
        {
            foreach (var candle in candles)
            {
                if (_trader != null && candle.Time >= _timeFrame.GetCandleBounds(_trader).Min)
                {
                    string str = _trader.MarketTime + "? " + ctv() + " " + candle.Security.Code + " " + candle.Time.TimeOfDay + " "
                        + _trader.MarketTime.TimeOfDay + " " + candle.ClosePrice + " " + candle.TotalVolume
                        ;
                    Console.WriteLine(str);
                }
            }
        }



    }
}

вывод

Портфель ..... появился. SRZ0 появился Чтобы закончить, нажмите любую кнопку... new candle time:02.12.2010 17:31:00 TotalVolume:238 ctv:False 02.12.2010 17:31:08? False SRZ0 17:31:00 17:31:08.0237782 10273 238 02.12.2010 17:31:08? False SRZ0 17:31:00 17:31:08.3317958 10275 261 02.12.2010 17:31:08? False SRZ0 17:31:00 17:31:08.6288128 10275 311 new candle time:02.12.2010 17:31:10 TotalVolume:86 ctv:False 02.12.2010 17:31:10? False SRZ0 17:31:10 17:31:10.8129377 10275 86 02.12.2010 17:31:12? False SRZ0 17:31:10 17:31:12.3740270 10275 146 02.12.2010 17:31:12? False SRZ0 17:31:10 17:31:12.6860449 10279 222 02.12.2010 17:31:13? False SRZ0 17:31:10 17:31:13.3090805 10274 292 02.12.2010 17:31:13? False SRZ0 17:31:10 17:31:13.6220984 10275 293 02.12.2010 17:31:15? False SRZ0 17:31:10 17:31:15.1811876 10275 301 02.12.2010 17:31:15? False SRZ0 17:31:10 17:31:15.4932054 10273 313 02.12.2010 17:31:16? False SRZ0 17:31:10 17:31:16.1172411 10275 314 02.12.2010 17:31:16? False SRZ0 17:31:10 17:31:16.7412768 10276 317 02.12.2010 17:31:19? False SRZ0 17:31:10 17:31:19.2364195 10277 318 new candle time:02.12.2010 17:31:20 TotalVolume:13 ctv:False 02.12.2010 17:31:20? False SRZ0 17:31:20 17:31:20.1734731 10276 13 02.12.2010 17:31:21? False SRZ0 17:31:20 17:31:21.1115268 10276 16 02.12.2010 17:31:21? False SRZ0 17:31:20 17:31:21.7375626 10275 20 02.12.2010 17:31:22? False SRZ0 17:31:20 17:31:22.6776164 10276 32 02.12.2010 17:31:23? False SRZ0 17:31:20 17:31:23.6056694 10276 44 02.12.2010 17:31:24? False SRZ0 17:31:20 17:31:24.5407229 10276 49 02.12.2010 17:31:25? False SRZ0 17:31:20 17:31:25.7947947 10276 52 new candle time:02.12.2010 17:31:30 TotalVolume:113 ctv:False 02.12.2010 17:31:30? False SRZ0 17:31:30 17:31:30.1570442 10278 113 02.12.2010 17:31:30? False SRZ0 17:31:30 17:31:30.4770625 10276 122 02.12.2010 17:31:30? False SRZ0 17:31:30 17:31:30.7930805 10276 126 02.12.2010 17:31:31? False SRZ0 17:31:30 17:31:31.4191163 10276 128 02.12.2010 17:31:31? False SRZ0 17:31:30 17:31:31.7171334 10277 131 02.12.2010 17:31:32? False SRZ0 17:31:30 17:31:32.3411691 10279 139 02.12.2010 17:31:32? False SRZ0 17:31:30 17:31:32.9672049 10278 140 02.12.2010 17:31:33? False SRZ0 17:31:30 17:31:33.2772226 10277 143 02.12.2010 17:31:33? False SRZ0 17:31:30 17:31:33.5892405 10277 146 02.12.2010 17:31:34? False SRZ0 17:31:30 17:31:34.2122761 10280 363 02.12.2010 17:31:34? False SRZ0 17:31:30 17:31:34.5252940 10282 749 02.12.2010 17:31:34? False SRZ0 17:31:30 17:31:34.8363118 10284 755 02.12.2010 17:31:35? False SRZ0 17:31:30 17:31:35.1483296 10281 758 02.12.2010 17:31:35? False SRZ0 17:31:30 17:31:35.4783485 10280 777 02.12.2010 17:31:36? False SRZ0 17:31:30 17:31:36.7114191 10279 784 02.12.2010 17:31:37? False SRZ0 17:31:30 17:31:37.0234369 10279 792 02.12.2010 17:31:38? False SRZ0 17:31:30 17:31:38.5825261 10278 952 new candle time:02.12.2010 17:31:40 TotalVolume:135 ctv:False 02.12.2010 17:31:40? False SRZ0 17:31:40 17:31:40.1446154 10281 135 02.12.2010 17:31:40? False SRZ0 17:31:40 17:31:40.4646337 10281 339 02.12.2010 17:31:42? False SRZ0 17:31:40 17:31:42.0157224 10282 343 02.12.2010 17:31:42? False SRZ0 17:31:40 17:31:42.9687770 10283 344 02.12.2010 17:31:45? False SRZ0 17:31:40 17:31:45.4449186 10281 346 02.12.2010 17:31:46? False SRZ0 17:31:40 17:31:46.0709544 10280 372 02.12.2010 17:31:48? False SRZ0 17:31:40 17:31:48.5650970 10279 382

Видим что Helper всё время false Что же я всё таки делаю не так? В 2.5.2 это работало

Спасибо и с уважением!

(Update) только что собрал этот же пример не поменяв ни строчки на 2.5.2 вот вывод

Портфель ...... появился. SRZ0 появился Чтобы закончить, нажмите любую кнопку... new candle time:02.12.2010 17:46:10 TotalVolume:4 ctv:True 02.12.2010 17:46:12? True SRZ0 17:46:10 17:46:12.0266640 10315 4 02.12.2010 17:46:14? True SRZ0 17:46:10 17:46:14.1737868 10316 16 new candle time:02.12.2010 17:46:20 TotalVolume:251 ctv:True 02.12.2010 17:46:21? True SRZ0 17:46:20 17:46:21.9742329 10316 251 02.12.2010 17:46:23? True SRZ0 17:46:20 17:46:23.5333221 10320 281 new candle time:02.12.2010 17:46:30 TotalVolume:32 ctv:True 02.12.2010 17:46:30? True SRZ0 17:46:30 17:46:30.3977147 10316 32 02.12.2010 17:46:31? True SRZ0 17:46:30 17:46:31.6497863 10317 39 02.12.2010 17:46:35? True SRZ0 17:46:30 17:46:35.0769824 10316 40 02.12.2010 17:46:38? True SRZ0 17:46:30 17:46:38.1981609 10315 55 02.12.2010 17:46:39? True SRZ0 17:46:30 17:46:39.1352145 10313 193 new candle time:02.12.2010 17:46:30 TotalVolume:193 ctv:True 02.12.2010 17:46:39? True SRZ0 17:46:40 17:46:39.7612503 10312 1 02.12.2010 17:46:40? True SRZ0 17:46:40 17:46:40.3812858 10314 21

Thanks:
1 2  >

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

loading
clippy