У вас не стоит Flash Player
Настройки
#71128 - Thu Jun 25 2015 12:10 PM C# вопросы
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Подскажите, делаю так

List<double> aaa = new List<double>();

Потом, например, так
aaa[2] = 2.1;


Ругаеться.

Есть ли какой-то способ изначально задат размер List и проинициализировать его нулями?
Или только циклом оббегать и делать aaa.Add(0); ?

Пока делаю так
aaa = sec.ClosePrices;
но не очень так красиво.


Отредактировано Alias (Thu Jun 25 2015 12:10 PM)

Наверх
#71158 - Thu Jun 25 2015 05:27 PM Re: C# вопросы [Re: Alias]
crn Offline
journeyman

Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
Originally Posted By: Alias
Подскажите, делаю так

List<double> aaa = new List<double>();

Потом, например, так
aaa[2] = 2.1;


Ругаеться.

Есть ли какой-то способ изначально задат размер List и проинициализировать его нулями?
Или только циклом оббегать и делать aaa.Add(0); ?

Пока делаю так
aaa = sec.ClosePrices;
но не очень так красиво.

добавлять Add-ом в цикле.
Вы обращаетесь ко 3-му элементу, которого не существует в природе.


Отредактировано crn (Thu Jun 25 2015 05:35 PM)

Наверх
#71162 - Thu Jun 25 2015 06:25 PM Re: C# вопросы [Re: crn]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
сделайте массив и не парьтесь.
_________________________
__


Наверх
#71163 - Thu Jun 25 2015 09:04 PM Re: C# вопросы [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Спасибо, попробую массив.
А что, стандартной функции инициализации Ilist в си шарпе нет?


Отредактировано Alias (Thu Jun 25 2015 09:04 PM)

Наверх
#71168 - Fri Jun 26 2015 04:17 AM Re: C# вопросы [Re: Alias]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
обратитесь к справочнику по C#. Данный форум слегка для других вопросов smile
_________________________
__


Наверх
#71181 - Sat Jun 27 2015 07:42 AM Re: C# вопросы [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Сделал так:
IList<double> longLevel = new Double[symbol.Bars.Count];

Наверх
#71188 - Sat Jun 27 2015 07:34 PM Re: C# вопросы [Re: Alias]
Andrebot Offline
journeyman

Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
Originally Posted By: Alias
Сделал так:
IList<double> longLevel = new Double[symbol.Bars.Count];

{ПРЕДУПРЕЖДЕНИЕ} Слева список, а справа массив... Ну почитайте вы хоть что-нибудь по программированию
http://professorweb.ru/my/csharp/charp_theory/level12/12_1.php

IList<double> longLevel = new List<double>(symbol.Bars.Count);

ПРЕДУПРЕЖДЕНИЕ!!! от модератора.


Отредактировано ViL (Sun Jun 28 2015 01:14 PM)
Edit Reason: Цензура

Наверх
#71189 - Sat Jun 27 2015 07:46 PM Re: C# вопросы [Re: Andrebot]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Ну вообще он сделал правильно. Хотя конечно почитать что то стоит, так как видны проблемы с этим делом.
_________________________
__


Наверх
#71193 - Sun Jun 28 2015 09:24 AM Re: C# вопросы [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Ребята, учу C# по ходу изучения API TSLaba. Ну не всё я знаю, затем сюда и пришел.

Наверх
#71227 - Mon Jun 29 2015 11:33 PM Re: C# вопросы [Re: Alias]
mikhasi Offline
stranger

Registered: Mon Jun 29 2015
Записи: 15
Добрый вечер!
Тоже вопрос по С#, поэтому не стал создавать новую тему, скажите, пожалуйста, если я хочу открыть позицию в конкретное время, как именно надо написать строчку, если брать таймфрейм 1 мин.

В качестве примера предлагаю рассмотреть вход на открытии последней свечи дневной сессии в 18:44.

Я использовал вариант ниже, но этого не произошло.
source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 44
и я заметил, что время текущее отличается от времени свечи на 1 мин, кусок лога
18:44:00.89[5]INFO :Скрипт выполнен успешно за 39мс. (13928 баров, время 29.06.2015 18:43:00)

Спасибо.

Наверх
#71230 - Tue Jun 30 2015 01:25 AM Re: C# вопросы [Re: mikhasi]
crn Offline
journeyman

Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
Originally Posted By: mikhasi
Добрый вечер!
Тоже вопрос по С#, поэтому не стал создавать новую тему, скажите, пожалуйста, если я хочу открыть позицию в конкретное время, как именно надо написать строчку, если брать таймфрейм 1 мин.

В качестве примера предлагаю рассмотреть вход на открытии последней свечи дневной сессии в 18:44.

Я использовал вариант ниже, но этого не произошло.
source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 44
и я заметил, что время текущее отличается от времени свечи на 1 мин, кусок лога
18:44:00.89[5]INFO :Скрипт выполнен успешно за 39мс. (13928 баров, время 29.06.2015 18:43:00)

Спасибо.


чего именно не произошло? сделка не открылась ровно в 18:44 или вообще не открылась?

Наверх
#71240 - Tue Jun 30 2015 10:42 AM Re: C# вопросы [Re: crn]
mikhasi Offline
stranger

Registered: Mon Jun 29 2015
Записи: 15
Originally Posted By: crn
Originally Posted By: mikhasi
Добрый вечер!
Тоже вопрос по С#, поэтому не стал создавать новую тему, скажите, пожалуйста, если я хочу открыть позицию в конкретное время, как именно надо написать строчку, если брать таймфрейм 1 мин.

В качестве примера предлагаю рассмотреть вход на открытии последней свечи дневной сессии в 18:44.

Я использовал вариант ниже, но этого не произошло.
source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 44
и я заметил, что время текущее отличается от времени свечи на 1 мин, кусок лога
18:44:00.89[5]INFO :Скрипт выполнен успешно за 39мс. (13928 баров, время 29.06.2015 18:43:00)

Спасибо.


чего именно не произошло? сделка не открылась ровно в 18:44 или вообще не открылась?

Не было заявки на открытии последней свечи в 18:44, заявка начала ставится по закрытию сессии и 15 мин пока шел клиринг, каждую минуту пыталась поставить. При этом я также в коде прописал время
source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 45, чтобы посмотреть как это работает, если сигнал сформировался на закрытии свечи и надо выставить заявку по открытию новой, которая будет аж в 19:00.

Также не ясно, если я возьму больший таймфрейм, как ограничить открытие позы временными рамками к примеру можно открыть только с 19:00 до 20:00 на 15 мин. таймфрейме.

Еще вопрос, как ограничить расчеты только будними днями?
for (int i = ctx.TradeFromBar + 1; i < barsCount; i++)
{
if (Convert.ToInt32(source.Bars[i].Date.DayOfWeek) <= 5) { }
}

Наверх
#71247 - Tue Jun 30 2015 01:27 PM Re: C# вопросы [Re: mikhasi]
crn Offline
journeyman

Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
Originally Posted By: mikhasi

Не было заявки на открытии последней свечи в 18:44, заявка начала ставится по закрытию сессии и 15 мин пока шел клиринг, каждую минуту пыталась поставить.

ну может у вас подача сделки осуществляется на i+1? поэтому на след свече выставляет. А то что на каждой, так это видимо сигнал на вход (условие входа в позу) активен, значит будет выставлять, пока сигнал не станет не активным.
Originally Posted By: mikhasi

Также не ясно, если я возьму больший таймфрейм, как ограничить открытие позы временными рамками к примеру можно открыть только с 19:00 до 20:00 на 15 мин. таймфрейме.

тоже проверкой времени - Hour, Minute
Originally Posted By: mikhasi

Еще вопрос, как ограничить расчеты только будними днями?

скрипты не работают, если на вход не поступает новая свеча. если в выходной день нет торгов, то и скрипт не будет работать.
Каждая новая свеча дергает метод Execute в скрипте. В режиме агента соответственно цикл for не нужен (разве если только для расчетов каких нибудь).
а вообще по хорошему, нужно настраивать поставщика данных на расписание запуска/остановки.

Наверх
#71259 - Tue Jun 30 2015 03:25 PM Re: C# вопросы [Re: crn]
mikhasi Offline
stranger

Registered: Mon Jun 29 2015
Записи: 15
Видимо я не правильно вопросы задал, т.к. ответ ни на один не получил. Помогите разобраться с логикой некоторых интересующих меня вопросов.
Вопрос 1:
как надо прописать кусок кода, чтобы позу открыть в 18:44 на открытии. Свеча закроется в 18:45 для уточнения. Из другой ветки я прочитал, что i + 1 это текущий открытый бар. А это означает, что в момент времени 18:44 открывается новый бар i + 1 и это означает, что в заявке надо указывать именно i + 1, чтобы заявка на открытии сработала.
Мой вариант не сработал.
if (source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 44) source.Positions.BuyAtMarket(i + 1, 1, "LE");

Если я правильно понял, TSlab присваивает свече на минуту меньше реального времени. Если время 18:44:01 то лог отображает время свечи 18:43:00. И если следовать этой логике и мне надо открыть позу в в 18:44 то скорее надо так
if (source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 43) source.Positions.BuyAtMarket(i + 1, 1, "LE");
поправьте меня если я не прав.

Вопрос 2:
Если я к примеру использую 15 мин таймфрейм и есть условие, что позу могу открыть с 19:00 до 20:00 и если следовать той логике, что время свечи будет отставать на 1 шаг таймфрейма, то условие должно быть таким
source.Bars[i].Date.Hour == 18 && source.Bars[i].Date.Minute == 45 || source.Bars[i].Date.Hour == 19
поправьте меня если я не прав.

Вопрос 3:
как ограничить работу кода только будними днями, как должно выглядеть условие в C#? Это необходимо для того, чтобы в случае торгов в выходной день не были учтены данные свечек для расчета индикаторов.

Вопрос 4:
Если я хочу открыть позу по цене открытия текущего бара в момент его открытия, заявка должна быть такая?
source.Positions.SellAtPrice(i + 1, 1, source.Bars[i+1].Open, "ShE");

Наверх


Moderator:  ViL, sar