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