Каким методом получить параметры текущей свечи? High, Low предыдущей (сформировавшейся) свечи получаем через ProcessCandle(Candle candle), текущей (формирующейся) через ProcessValues(Candle candle), но последнее не работает.
Каким методом получить параметры текущей свечи? High, Low предыдущей (сформировавшейся) свечи получаем через ProcessCandle(Candle candle), текущей (формирующейся) через ProcessValues(Candle candle), но последнее не работает.
Comentários (18)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Свечки
Текущая свечка:
Предыдущая свечка:
High/Low:
В этом случае все равно текущую формирующуюся свечу на видит, показывает последнюю полностью сформировавшуюся. Может проблема в другом месте например эдесь protected override void OnStarted() { //LINQ-запрос - когда свеча сформирована, то запустить метод обработки свечи ProcessCandle _candleSeries .WhenCandlesFinished()//
Проверил.
Все значения совпадают. Что в пришедшей по событию Processing, что взятой через GetCandle;
Вы используете правило WhenCandlesFinished - правило на событие окончания свечки.
Соответственно метод ProcessValues буде выполняться только тогда, когда Сandle.State == CandleStates.Finished. И в метод ProcessValues будет передаваться только целая свечка.
Почитайте про правила и желательно весь раздел событийная модель.
Единственный метод по описанию подходящий под эти цели - WhenChanged(), но он выдает ошибки Ошибка 1 Аргумент экземпляра: невозможно преобразовать из "StockSharp.Algo.Candles.CandleSeries" в "StockSharp.BusinessEntities.Order"
Ошибка 2 "StockSharp.Algo.Candles.CandleSeries" не содержит определения для "WhenChanged" и наиболее подходящий перегруженный метод расширения "StockSharp.Algo.MarketRuleHelper.WhenChanged(StockSharp.BusinessEntities.Order)" содержит несколько недопустимых аргументов
Вы опишите конкретно что пытаетесь/надо сделать, а не абстрактные куски кода.
И желательно показать код, что и как делаете. Может и найдется решение.🙂
Вызывая индикатор в ProcessCandle подписываясь в стратегии вот так _series.WhenCandlesFinished().Do(this.ProcessCandle).Apply(this); получаю в качестве результата законченные значения индикатора по завершенным свечам.
Чтобы получать значения в процессе формирования свечи вызываю в стратегии другую функцию Security.WhenChanged().Do(TryMakeTrade).Apply(this); и там беру значение индикатора. Тогда получаю значения и по не сформировавшейся свече.
Если внутри OnProcess индикатора, то вот это у меня работает именно выдавая текущую формирующуся свечу. protected override decimal OnProcess(IIndicatorValue input) а если поставлю проверку типа if (candle.State == CandleStates.Finished) то получу в High только завершенную
Для расчета индикатора требуются минимальные и максимальные цены текущего и предыдущего баров, независимо, сформировался последний бар или нет. Вот этот код взят за основу, который я пытаюсь изменить, чтобы рассчитать индикатор.
Здравствуйте! По всей видимости у вас нет понимания как это все работает.
Здесь вы воспользовались правилом "MarketRuleHelper.WhenFinished - правило на событие окончания свечки." То есть в ProcessCandle будут приходить только оконченные свечи. На ряду с этим правилом, есть еще следующие,
MarketRuleHelper.WhenCandlesStarted - правило на событие появления новых свечек. MarketRuleHelper.WhenCandlesChanged - правило на событие изменения свечек.
MarketRuleHelper.WhenChanged - правило на событие изменения свечки. и другие, их можно посмотреть здесь http://www.stocksharp.com/doc/?topic=html/97cf7a9c-8b3d-4791-9306-275d55d4cf36.htm во вкладке Событийная модель=>Правило. Попробуйте другие правила, прочитайте как ими пользоваться.
можно попробовать еще следующий способ, от сюда http://www.stocksharp.com/doc/?topic=html/f71010d3-135c-4fe9-a573-abf0245b3f5d.htm
Когда разберетесь со способом передачи свечей в ProcessCandle. Так как ProcessCandle принимает только свечи, создайте буфер для хранения оконченных свечек
, добавляйте в буфер в методе ProcessCandle каждую оконченную свечку
если таким образом добавлять свечи то _buffer[0] это будет последняя свеча, _buffer[1] предпоследняя и т.д. Когда буфер станет большим, допустим вам больше 10 свечей не надо. то удаляем последнюю.
Вообще это стандартная система для индикаторов, достаточно посмотреть здесь http://stocksharp.codeplex.com/SourceControl/changeset/view/23281#166110, да по другим индикаторам. Теперь у вас в ProcessCandle есть текущая свеча candle, и список предыдущих свечей _buffer для обработки. Делайте с ними что душе угодно.
candle.LowPrice; // минимальная цена текущей свечи _buffer[0].HighPrice; // максимальная цена предыдущей свечи и т.д. Все свойства свечи можно посмотреть здесь http://www.stocksharp.com/doc/?topic=html/AllMembers_T_StockSharp_Algo_Candles_Candle.htm
Надеюсь немного прояснил для вас ситуацию. Советую вам не пропускать ссылки которые я вам дал. Документация достаточно хорошо сделана и сильно помогает. Есть еще поиск по форуму тоже хорошо помогает. Даже годичной давности сообщения могут помочь или показать как можно сделать, например http://www.stocksharp.com/forum/357/Sozdaniie-robotov-s-pomoshch-iu-S---Chast--3--Riealizatsiia-intierfieisov/. Есть еще обучение, мне лично помогло.(я не агитирую, сугубо личное мнение)
p.s. Здесь скорее сообщество трейдеров чем программистов, и помогать вам особо ни кто не будет, особенно писать за вас робота. По этому надеюсь когда вы станете получать стабильную прибыль с торговли поделитесь со мной доходом!😂
Просмотрев форум,и изучив индикаторы с codeplex я обнаружила что доступ к индикаторам StockSharp не доступен обладателям VS express по причине не доступности интерфейса IPersistable или я ошибаюсь?
IPersistable наследуют, кстати, ещё и Strategy и ITrader до кучи к другим классам.
Если отсутствуют какие-то библиотеки, попробуйте установить триальную версию VS и скопировать нужные библиотеки из её папок (врядли это нарушает лицензию) Можно ещё, наверное, установить SDK. Но я не знаю в какой именно SDK входят "Testing Tools", если входят вообще куда-то. upd попробуйте Visual Studio SDK или ещё (что врядли) Windows SDK (не обращайте внимание на "windows 8" сейчас весь SDK называется именно так) Только осторожно: в последний раз, когда я качал Platform SDK (давно это было), он у меня занял около 7Гб.
VassilSanych не пугайте девушку обилием терминологии.🙂
Классы S# которые реализуют интерфейс IPersistable это не тот интерфейс который находится в Microsoft.VisualStudio.QualityTools.Common.dll. Это интерфейс S#, находится в Ecng.Serialization.dll, поэтому ничего доп. скачивать и устанавливать не надо.
Shaly, добавьте в References проекта данную dll, должно все заработать.
Данная dll уже давно добавлена в проект и есть ссылка на StockSharp.Algo.Indicators(прописана), но ошибка, что не хватает ссылки, не исчезает никак.
Выложите скрин с ошибкой. Возможно прояснит ситуацию. Плюс скрин, что добавлено в рефы.
вместо
напишите