ActionStrategy частота проверки 1 сек?

ActionStrategy частота проверки 1 сек?
Atom
09.11.2010
ustas


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

Один вопросик и одно пожелание.

Вопрос: Так всё таки проверка выполнения условия When в ActionStrategy - происходит ежесекундно , а не по событию?

Пожелание: Хотелось бы увидеть пример использования в ActionStrategy новой фичи ActionStrategyConditionHelper. Например использования ActionStrategyConditionHelper.LastTradePriceMore или даже лучше CurrentCandleTotalVolumeMore. Т.к. я туповат и мне до конца не совсем ясно как автор подразумевает применение ActionStrategy вообще. Тот пример который в доке всё таки скорее таймфреймовый так как в нём необходимо чтобы условие в When было == true в каждый новый timeframe. А что если в один из таймфремов проверочное условие не выполнится, как тогда?

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


Теги:


Спасибо:


Mikhail Sukhov

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


ustas: Так всё таки проверка выполнения условия When в ActionStrategy - происходит ежесекундно , а не по событию?

Да, ActionStrategy с некоторым периодом смотрит на появления сигналов от условий. Уменьшать такой период можно через Strategy.Interval.

ustas: Пожелание: Хотелось бы увидеть пример использования в ActionStrategy новой фичи ActionStrategyConditionHelper. Например использования ActionStrategyConditionHelper.LastTradePriceMore или даже лучше CurrentCandleTotalVolumeMore. Т.к. я туповат и мне до конца не совсем ясно как автор подразумевает применение ActionStrategy вообще. Тот пример который в доке всё таки скорее таймфреймовый так как в нём необходимо чтобы условие в When было == true в каждый новый timeframe. А что если в один из таймфремов проверочное условие не выполнится, как тогда?

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

По новому синтаксису стратегий напишу чуть позднее.

Спасибо: ustas

ustas

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


Спасибо, жду примеров. Сразу напишу что у меня не работает даже вот такой простой вариантик


namespace TestAction
{
    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 Test
    {
        public static readonly TimeSpan _timeFrame = TimeSpan.FromMinutes(1.0/6.0);
        public static Func<bool> psc;
        private static SignalStrategy _strat;
        private static CandleManager _candleManager;

        private static void TryCreateStrategy()
        {
            if (rts != null  && _portfolio != null)
            {
                _strat = new SignalStrategy();
                
                _strat.Log += OnLog;
                _strat.PropertyChanged += OnStrategyPropertyChanged;
                _manager.Register(_strat, _portfolio, rts);
              
                _strat.CandleManager = _candleManager;
                _strat.Start();
                var logger = new FileStrategyLogger("mylog.txt");
               logger.Strategies.Add(_strat);
              
            }
        }


        static void Main()
        {

.... skipped 
// создание  trader
//запуск DDE и всего такого
... skipped

                            _candleManager = new CandleManager(trader);
                            _candleManager.RegisterTimeFrameCandles(rts, _timeFrame);

                            _candleManager.NewCandles += (token, candles) =>
                            {
                                psc =  ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, alertvol);
                                if (psc == null) { psc = ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, alertvol); }
                                if (_strat == null && psc != null) { TryCreateStrategy(); } 
                              
                            };


                            _candleManager.CandlesChanged += (token, candles) =>
                            {
                                psc = ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, alertvol);
                            };

.. skipped
      }
    }



// стратегия
namespace TestAction
{

    using System;

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

    class SignalStrategy : ActionStrategy
    {
        private TimeSpan _timeFrame = TimeSpan.FromMinutes(1.0/6.0);
                
        public CandleManager CandleManager
        {
            get { return _candleManager; }
            set
            {
                _candleManager = value;
                _timeFrame = Test._timeFrame;
                Test.psc = () => true;
                When( Test.psc ).
			Do(() => { 
                 Console.WriteLine("time:{0} psc:{1}", System.DateTime.Now.TimeOfDay.ToString(), Test.psc());
            }).
            MakePeriodical(); // сделать событие периодичным
                             
            }
        }

    }

}

Cтратегия стартует и работает в статусе Runned;

ActionStrategyConditionHelper.CurrentCandleTotalVolumeMore(token, alertvol);

тоже работает и Test.psc() принимает верные значения false или true когда надо в зависимости от объёма текущей свечки

но не отрабатывает Do почему то

Версия 2.5.0

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

Спасибо:

Soloton

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


Mikhail Sukhov: По новому синтаксису стратегий напишу чуть позднее.

С нетерпением ждём.

Спасибо:


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

loading
clippy