#71128 - Thu Jun 25 2015 12:10 PM
C# вопросы
|
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]
|
journeyman
Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
|
Подскажите, делаю так
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]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
сделайте массив и не парьтесь.
_________________________
__
|
Наверх
|
|
|
|
#71163 - Thu Jun 25 2015 09:04 PM
Re: C# вопросы
[Re: ra81]
|
stranger
Registered: Thu Jun 25 2015
Записи: 24
|
Спасибо, попробую массив. А что, стандартной функции инициализации Ilist в си шарпе нет?
Отредактировано Alias (Thu Jun 25 2015 09:04 PM)
|
Наверх
|
|
|
|
#71181 - Sat Jun 27 2015 07:42 AM
Re: C# вопросы
[Re: ra81]
|
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]
|
journeyman
Registered: Sat May 17 2014
Записи: 90
Loc: Санкт-Петербург
|
Сделал так: IList<double> longLevel = new Double[symbol.Bars.Count]; {ПРЕДУПРЕЖДЕНИЕ} Слева список, а справа массив... Ну почитайте вы хоть что-нибудь по программированию http://professorweb.ru/my/csharp/charp_theory/level12/12_1.phpIList<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]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
Ну вообще он сделал правильно. Хотя конечно почитать что то стоит, так как видны проблемы с этим делом.
_________________________
__
|
Наверх
|
|
|
|
#71193 - Sun Jun 28 2015 09:24 AM
Re: C# вопросы
[Re: ra81]
|
stranger
Registered: Thu Jun 25 2015
Записи: 24
|
Ребята, учу C# по ходу изучения API TSLaba. Ну не всё я знаю, затем сюда и пришел.
|
Наверх
|
|
|
|
#71227 - Mon Jun 29 2015 11:33 PM
Re: C# вопросы
[Re: Alias]
|
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]
|
journeyman
Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
|
Добрый вечер! Тоже вопрос по С#, поэтому не стал создавать новую тему, скажите, пожалуйста, если я хочу открыть позицию в конкретное время, как именно надо написать строчку, если брать таймфрейм 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]
|
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)
Спасибо.
чего именно не произошло? сделка не открылась ровно в 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]
|
journeyman
Registered: Wed Apr 29 2015
Записи: 91
Loc: Махачкала
|
Не было заявки на открытии последней свечи в 18:44, заявка начала ставится по закрытию сессии и 15 мин пока шел клиринг, каждую минуту пыталась поставить.
ну может у вас подача сделки осуществляется на i+1? поэтому на след свече выставляет. А то что на каждой, так это видимо сигнал на вход (условие входа в позу) активен, значит будет выставлять, пока сигнал не станет не активным. Также не ясно, если я возьму больший таймфрейм, как ограничить открытие позы временными рамками к примеру можно открыть только с 19:00 до 20:00 на 15 мин. таймфрейме.
тоже проверкой времени - Hour, Minute Еще вопрос, как ограничить расчеты только будними днями?
скрипты не работают, если на вход не поступает новая свеча. если в выходной день нет торгов, то и скрипт не будет работать. Каждая новая свеча дергает метод Execute в скрипте. В режиме агента соответственно цикл for не нужен (разве если только для расчетов каких нибудь). а вообще по хорошему, нужно настраивать поставщика данных на расписание запуска/остановки.
|
Наверх
|
|
|
|
#71259 - Tue Jun 30 2015 03:25 PM
Re: C# вопросы
[Re: crn]
|
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");
|
Наверх
|
|
|
|
|
|