2.6 ActionStrategyConditionHelper работает ?
Atom
30.11.2010


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

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 , при этом данные по свечкам ок

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

batch.ChildStrategies.AddRange(trades.Select


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

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

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

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

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


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());
2. б. Хм, логично. Надо проверять.
Спасибо: ustas

ustas

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


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

Понятно, спасибо.


Спасибо:

Mikhail Sukhov

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


ustas
Mikhail Sukhov
1. Посмотрите, изменяется ли текущая свечка через CandleManager.CandlesChanged.

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


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

ustas

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


Mikhail Sukhov

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


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

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

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

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

Mikhail Sukhov

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


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 возвращает?
Спасибо:

ustas

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


Mikhail Sukhov


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


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

Mikhail Sukhov

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


ustas
Mikhail Sukhov


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


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


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

ustas

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


Mikhail Sukhov


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


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

Mikhail Sukhov

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


ustas
Mikhail Sukhov


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


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


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

ustas

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


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
Спасибо:
1 2  >

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

loading
clippy