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


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

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

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


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

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

Теги:


Спасибо:




3 Ответов
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