У вас не стоит Flash Player
Настройки
#711 - Sun Jan 03 2010 12:07 PM Как получить доступ к времени свечи?
rtstrader Offline
newbie

Registered: Fri Jan 01 2010
Записи: 35
Loc: N.Novgorod
Просмотрел API классы, не нашел как можно получить доступ к времени свечи.
Например, я хочу торговать с 11 утра до 12.
И протестировать это решение на истории.
В WL 5 это можно, например, сделать так

Quote:
public int GetTime(int bar)
{
return Date[bar].Hour * 100 + Date[bar].Minute;
}


А как в tslab?

Наверх
#712 - Sun Jan 03 2010 03:35 PM Re: Как получить доступ к времени свечи? [Re: rtstrader]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
ISecurity.Bars[bar].Date отдает стандартный тип DateTime. У которого можно взять компоненты Hour, Minute, Year и т.п.


Отредактировано Nektodron (Sun Jan 03 2010 03:36 PM)

Наверх
#714 - Sun Jan 03 2010 10:01 PM Re: Как получить доступ к времени свечи? [Re: Nektodron]
rtstrader Offline
newbie

Registered: Fri Jan 01 2010
Записи: 35
Loc: N.Novgorod
спасибо!

Наверх
#1734 - Sun Jan 31 2010 09:55 AM Re: Как получить доступ к времени свечи? [Re: Nektodron]
uprav Offline
addict

Registered: Thu Jan 14 2010
Записи: 594
Originally Posted By: Nektodron
ISecurity.Bars[bar].Date отдает стандартный тип DateTime. У которого можно взять компоненты Hour, Minute, Year и т.п.


Могли бы Вы выложить лог с точным,дословным написанием на для получения например часов?
_________________________


Наверх
#1739 - Sun Jan 31 2010 12:01 PM Re: Как получить доступ к времени свечи? [Re: uprav]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
не совсем понял, что имели ввиду под словом лог.
Если вам нужны компоненты времени, например в условии, то:

var curDate = ISecurity.Bars[bar].Date;
if(curDate.Hour == 18 && curDate.Minute >= 30)
{
...
}

Наверх
#2366 - Mon Feb 22 2010 05:08 PM Re: Как получить доступ к времени свечи? [Re: Nektodron]
Space Offline
stranger

Registered: Mon Feb 08 2010
Записи: 5
Loc: SPb
Originally Posted By: Nektodron

var curDate = ISecurity.Bars[bar].Date;
if(curDate.Hour == 18 && curDate.Minute >= 30)
{
...
}


Я так понимаю, необходимо в цикле перебирать бары (вместо bar подставлять i) и проверять время?

И еще вопрос, что сие значит и как с этим бороться (при этом подчеркивается ISecurity): An object reference is required for the non-static field, method, or property 'TSLab.Script.ISecurity.Bars.get' (CS0120)

Наверх
#2371 - Mon Feb 22 2010 11:17 PM Re: Как получить доступ к времени свечи? [Re: Space]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
вероятно вы в коде пишите ISecurity.Bars
а необходима ссылка, на определенной экземпляр объекта типа ISecurity

Наверх
#5775 - Mon May 17 2010 09:50 PM Re: Как получить доступ к времени свечи? [Re: Nektodron]
uprav Offline
addict

Registered: Thu Jan 14 2010
Записи: 594
Nektodron помогите пож.с индикатором на C#, за основу взял индикатор на С# из примера. Индикатор должен выводить в течение дня, например, цену закрытия первой пятиминутки (или цену открытия второй пятиминутки, без разницы). Этот код компилируется, но в ТСЛабе выдаёт ошибку: System.OutOfMemoryException: Выдано исключение типа "System.OutOfMemoryException".
....в c:\Documents and Settings\Саша\Мои документы\SharpDevelop Projects\OPENi2\OPENi2\openi2.cs:строка 20
... и т.д.
Код, цикл в цикле:

using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace test
{ public class MyStochK : IBar2DoubleHandler, IContextUses
{public IList<double> Execute(ISecurity source)
{ var Hi = source.HighPrices;
var Cl = source.ClosePrices;
var closes = source.ClosePrices;
IList<double> list = new List<double>(closes.Count);
for (int i = 0;i < closes.Count; i++)
{ var curD2 = source.Bars[i].Date;
var curD3 = source.Bars[i+1].Date;
for (int x = i;curD2.Day==curD3.Day;x++)
{var curD4 = Cl[i];
var stochK = curD4;
list.Add(stochK);
}}
return list;
}
public IContext Context { get; set; }
}
}
_________________________


Наверх
#5776 - Mon May 17 2010 10:31 PM Re: Как получить доступ к времени свечи? [Re: uprav]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
for (int x = i; curD2.Day == curD3.Day; x++)

это цикл является вечным, т.к. ни curD2, ни curD3 в цикле не изменяются. В итоге, объекты в список добавляются, пока не кончается память.

Наверх
#5788 - Tue May 18 2010 10:42 PM Re: Как получить доступ к времени свечи? [Re: Nektodron]
uprav Offline
addict

Registered: Thu Jan 14 2010
Записи: 594
Originally Posted By: Nektodron
for (int x = i; curD2.Day == curD3.Day; x++)
это цикл является вечным, т.к. ни curD2, ни curD3 в цикле не изменяются. В итоге, объекты в список добавляются, пока не кончается память.

Да, тут я перемудрил, вот исправленный работоспособный код индикатора, который выводит в течение дня на 5-и минутках цену закрытия первого бара, но осталась проблема, помогите пож решить:
КОД:
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace test
{ public class MyStochK : IBar2DoubleHandler, IContextUses
{public IList<double> Execute(ISecurity source)
{ var Hi = source.HighPrices;
var Cl = source.ClosePrices;
var closes = source.ClosePrices;
IList<double> list = new List<double>(closes.Count);
var x = 0;
for (int i = 1;i < closes.Count; i++)
{ var curD = source.Bars[i].Date;
var curD1 = source.Bars[i-1].Date;

if (curD.Day == curD1.Day)
{
x = x+1;
var stochK1 = Cl[i-x];
list.Add(stochK1);
}
else
{
var stochK = Cl[i];
x = 0;
list.Add(stochK);
}
}
return list;
}
public IContext Context { get; set; }
}
}

ПРОБЛЕМА: не выводит значение индикатора на последнем баре в графике вообще (скрин), т.к. заглядывает в будущее на +1, это по той причине что цикл начинается с i=1, если его начать с 0(что нарисует последний бар), тогда "ошибка: индекс выйдет за пределы диапазона" вот в этой строке: var curD1 = source.Bars[i-1].Date; [i-1] использую для сравнивания текущего с предыдущим баром? я же не могу использовать i=-1 для начала цикла...


Attachments
Индикатор.jpg (360 downloads)

_________________________


Наверх
#5790 - Wed May 19 2010 12:14 AM Re: Как получить доступ к времени свечи? [Re: uprav]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
IList<double> list = new List<double>(closes.Count);

заменить на var list = new double[closes.Count];


list.Add(stochK);
заменить на list[i] = stochK

так с единицы и считать, первый элемент будет 0.


Как второй вариант, перед циклом сделать
list.Add(0);

Наверх
#7800 - Mon Jul 05 2010 01:38 PM Re: Как получить доступ к времени свечи? [Re: Nektodron]
Pasha Offline
newbie

Registered: Wed Apr 14 2010
Записи: 38
Originally Posted By: Nektodron
вероятно вы в коде пишите ISecurity.Bars
а необходима ссылка, на определенной экземпляр объекта типа ISecurity


Уважаемый Nektodron подскажите плиз что надо написать чтобы допустим переменной обозначенной как (var H =0;) присваивалось бы в цикле for (int i = 0; i < 100; i++) значение часов для каждого бара.
При этом этот цикл должен находится внутри цикла (или процедуры, не знаю как называется) "protected IList<double> Execute(IList<double> Price, bool DATAPQ)".
Просто я не знаю экземпляров языка, классов, как их вызывать и.т.п., а времени на изучение языка не очень много (на основной работе ставят кучу задач)...

Заранее спасибо!

Наверх
#7803 - Mon Jul 05 2010 02:28 PM Re: Как получить доступ к времени свечи? [Re: Pasha]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
sec.Bars[i].Date.Hour

Наверх


Moderator:  ViL, sar