Hi everyone, I was wondering if there were any examples I could look that that use candlestick patterns ? I did a search but didn't find the basic example I was looking for.
Don't have an account? Join QuantConnect Today
QuantConnect Community Discussions
QUANTCONNECT COMMUNITY
LEAN is the open-source algorithmic trading engine powering QuantConnect. Founded in 2012 LEAN has been built by a global community of 180+ engineers and powers more than 300+ hedge funds today.
Join QuantConnect's Discord server for real-time support, where a vibrant community of traders and developers awaits to help you with any of your QuantConnect needs.
The Open-Quant League is a quarterly competition between universities and investment clubs for the best-performing strategy. The previous quarter's code is open-sourced, and competitors must adapt to survive.
Looking for basic candlestick pattern examples in QuantConnect.
Continue ReadingRefer to our Research Guidelines for high quality research posts.
Create an account on QuantConnect for the latest community delivered to your inbox.
Sign Up Today
|
|
|||||||
|
|
||||||||
|
Candlestick examples?
Scott Woods | June 2016
Hi everyone, I was wondering if there were any examples I could look that that use candlestick patterns ? I did a search but didn't find the basic example I was looking for.
QuantConnectâ„¢ 2025. All Rights Reserved
Scott Woods
This is kind of embarressing, but I can't seem to figure out how to initalize a candle stick indictator.. any help?
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Stefano Raggi
@Scott,
candlestick pattern indicators are quite simple to use:
1. define a variable for the indicator in your algorithm class:
private Harami _pattern = new Harami();
2. create an instance of the indicator in your Initialize method using one of the CandleStickPattern helper methods:
_pattern = CandlestickPatterns.Harami(_symbol);
3. in your OnData, test the value of the indicator value:
- if the value is 0, no pattern found at the current bar
- if the value is +1, bullish pattern found at the current bar
- if the value is -1, bearish pattern found at the current bar
Note that some patterns are only bullish, some are only bearish and some are both.
I attached a simple example algorithm for you
Hope this helps
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Scott Woods
Thank you so much, I was making a bit of a foolish error. Your example helped me a lo, it was just what i was looking for.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Stefano, Hi!
I followed your example above and wrote an almost identical algorithm for SPY with Closing Marubozu Candlestick pattern. I used the provided data (local Lean data). It worked and performed about 20 trades for the period of 2014 (I set this period of time).
However, when I adjusted the algorithm to receive custom data directly from Yahoo.com with Quandl Wrapper (as recommended in How Do I Import Yahoo Data? in QuantConnect University) I encountered the following problem:
The data is not getting through in OnData method past: if (_pattern == 1) or if (_pattern == -1). It is getting through OnData, but is somehow blocked by == . If I replace it by anything else, the algorithm finds 1st Closing Marubozu pattern on 01/17/2014. So the patterns are definitely there, plus we know that they are there from my earlier algorithm that I ran on Lean data.
Please, recommend the solution. Thanks in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Stefano Raggi
@Boris, to use Quandl data, the easiest way is to prefix the symbol (YAHOO/INDEX_SPY) and use a custom class derived from the base Quandl class.
The problem with your algorithm was that deriving from BaseData all OHLC values were the same, so no patterns could be found.
Here is the revised algorithm:
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Stefano
Thanks for the above help. However, I still want to find a way to be able to use the custom data. I was going to start to try by importing first Yahoo data with Quandl data, and then evetually to import my data with link to Dropbox (as in CustomDataNIFTYAlgorithm.cs).
Also, please, explain how is that all OHLC values were the same in my original algorithm and how to fix it. Thanks in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Stefano Raggi
@Boris,
when I mentioned that OHLC values were the same, I didn't mean the instances of your BaseData-derived class, but the inputs to the candlestick patterns, which are generated internally by a consolidator (in your case a BaseDataConsolidator, which only has a BaseData type as input, instead of a TradeBar). What happens is that the pattern class receives an input TradeBar with all OHLC values equal.
The solution is to derive your class from TradeBar, so a TradeBarConsolidator will be used and the candlestick pattern will get the correct input (TradeBar), as in the attached backtest:
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Stefano,
Thanks again for your help. Your above algorithm worked really well and provided me with a few lessons to learn now. I just wanted to mention that in order to run it on Visual Studio, I needed to add
using QuantConnect.Data.Market;
for TradeBar to work.
Let me study your code and see if I have any further questions. Thank you.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Stefano,
I have now studied your algorithm. Thank you again for providing it. I just have a couple of questions. What is the necessity for EndTime and Period methods inside of
public class CloseMar : TradeBar
when we already have TradeBar.Open and TraderBar.Close values from the 'try' block of 'BaseData Reader'. Plus algorithm seems to able to run without these 2 methods.
Looking forward to your response. Thanks in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Stefano Raggi
Time and EndTime are properties defined in the BaseData class and represent the start and end time of the bar, Period is defined in the TradeBar class and represents the time span between the start and the end of the bar (the default is one minute).
If we don't override them, the custom CloseMar bars will be timestamped incorrectly as one minute bars instead of daily bars.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
Thanks for your help. I might have some more questions later.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Stefano,
I used your latest algorithm from above and substituted the www.Quandl.com... in GetSource with link to www.Dropbox.com... with my daily ES data for 2015 (as in CustomDataNiftyAlgorithm.cs). There is no AdjustedClose in this data, so I had to make appropriate (I hope) changes. I ran this algorithm, again looking for Closing Marubozu patterns. But I got nothing. I did not work. Maybe you can review and critique my work please. As always, thanks in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Alexandre Catarino
First, please checkout the data format. You are trying to parse datetime with the "yyyy-MM-dd" while the your first column has a "yyyyMMdd" string:
cmBar.Time = DateTime .ParseExact(data[0], "yyyyMMdd", CultureInfo.InvariantCulture);
Do you really need to override EndTime and Period? After I removed that from the code, the data flew are expected, the indicator was calculated and there were 18 trades.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
I have discovered the problem myself, after multiple tries.
In DateTime.ParseExact's format portion I originally put in "yyyy-MM-dd". As soon as I changed it to "yyyyMMdd", it worked. See the algorithm and backtest. Even though the financial results were poor, but that wasn't the goal at this time. I just need first to get the parts moving correctly.
Thanks again.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Alexandre,
I posted my last comment before I knew you posted yours. Maybe we even posted them almost at the same time. I changed the date range a little bit too. Anyway, thank you for confirming that date format was incorrect.
Concerning overriding EndTime and Period, I followed the recommendation by Stefano Raggi (see his earlier comments on this thread). I also earlier discovered, that by removing them from the code, the number of trades does not change and financial results do not change, just like you said. However, if we remove override EndTime and Period from the code, each line in the log (and each corresponding trade) are registered 24 hrs earlier. Please see 'Logs' and 'Trades' after running a backtest on QuantConnect. So the dilemma for me now: which one represents the actual time of events?
Looking forward to your response.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Alexandre Catarino
When we define the Period and EndTime, the results, in terms of date/time, are more accurate.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
What you are saying is that we should be overriding EndTime and Period?
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
I want to present one more algorithm I just created and ran. It calls intraday 5-min ES data, also looking for Closing Marubozu. On 2016/01/04 it makes 2 trades. However, the time logged and the trade is at 9:56 instead of 9:55, and 10:16 instead of 10:15. The time is Chicago time. The data is every 5 minutes, for example 9:55, 10:00, 10:05; not 9:56, 10:01 or 10:06. I did not include override EndTime and Period in this last algorithm.
What seems to be the reason for this 1-min discrepancy? Thank you in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Jared Broad
Period for a bar tells LEAN when to send the bar to the algorithm. If the bar starts in Jan 1 2001 and has a 1 year period; it won't be released until Jan 1 2002. If you don't specify the period it will be released immediately in 2001. This would mean you could "look ahead" into the future and isn't desirable.
EndTime is calculated with Time+Period; custom data defaults to a 1 minute period.
All data has a period; even instantaneous point data has a period of 0s.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
Thanks Jared!
Let me see how I should use your suggestion and I will get back to you.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Jared,
Would you please show me the code how to make it happen. Thanks in advance.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
How should I adjust the following formula for 5-min Period?
public new TimeSpan Period { get { return QuantConnect.Time.OneDay; } }
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Alexandre Catarino
QuantConnect.Time Helper has the following "aliases":
QuantConnect.Time.OneDay = TimeSpan.FromDays(1); QuantConnect.Time.OneHour = TimeSpan.FromHours(1); QuantConnect.Time.OneMinute = TimeSpan.FromMinutes(1); QuantConnect.Time.OneSecond = TimeSpan.FromSeconds(1); QuantConnect.Time.OneMillisecond = TimeSpan.FromMilliseconds(1);
For other periods, we need to rely on TimeSpan.From* functions.
In this particular case, please adjust it with:
public new TimeSpan Period { get { return TimeSpan.FromMinutes(5); } }
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
@Alexandre,
Thanks for your advice. However, the time is still reported by 1-min off: e.g. 11:16 instead of 11:15.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Jared Broad
public override DateTime EndTime { get { return Time + TimeSpan.FromMinutes(5); } }
The default resolution length is 1 minute which makes it appear 1 minute past the start time (which is infact looking into the future since your bars are 5 minutes long). If you set your bar length to 5 minutes (like above) it'll appear on the 5 minute boundary.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Alexandre Catarino
Boris, you got a different result, because you removed the part we override EndTime. The complete solution would be:
public override DateTime EndTime { get { return Time + Period; } set { Time = value - Period; } } public new TimeSpan Period { get { return TimeSpam.FromMinutes(5); } }
Since Jared's solution is 5 lines shorter, we can considered it better.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
Jared and Alexandre,
Thank you both for your suggestions. Both codes brought the time of events to the end of the bar. However, the time that 'Logs' and 'Trades' after Backtest show is 5 minutes later than the actual event. For example, by looking at the chart, 1st Bearish Closing Marubozu ends at 10:55, whereas the Logs record it at 11:00. Also the 'Trades' show that its price was 1988.50 USD at 11:00; but if you look at the actual records (see the link to Dropbox in GetSource), the price 1988.50 corresponds to Close at 10:55.
Basically, the candlestick pattern and the trade in reality occur at 10:55, but the records (Logs & Trades) show 11:00. Similar situation happens with the rest of patterns.
How can we fix this situation? Thanks in advance
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Jared Broad
That is the intended behaviour; the bars close on the end time (i.e. start + period).
20160104 10.55 ...$1988.50 + 5 minute period bar means the bar is available (closing) at 10.59.9999 and appearing in your algorithm at 11am.
If the bar was available at 10.55 you'd see into the future (as the closing price is at 10.59.99999)
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Boris Sachakov
Jared,
Thanks for your response. Still, there is some confusion. But I am beginning to understand the problem, possibly. When I downloaded my data, I set the time of candle correspond to Close. So in my data 10:55 is the bar's close. In your case, probably, the time corresponds to the beginning of the candle.
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Phillip Espina
Hi Everyone, Is there a way to do this on python?
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Phillip Espina
Hello everyone, I'm using candlesticks to compare if it goes beyond my Upper Bollinger Bands. To get this I need the value of the CandleStick indicator that I am using right? But it only return 1 or -1 as in detecting Bull or Bear patterns. How should I be able to do this using CandleSticks?
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Rene Ordosgoitia
Hello guys, I´m trying to take access to the candlestick patterns libraries that are in the GitHub LEAN documentation, but there is not too much information related to how to calculate it in a universe selection approach.
In the next code, I want to use for the moment a simple condition to filter the stock that has an RSI value lower than 40 and the DojiStar built-in CandlestickPatterns library, but I don´t know how to use it in a universe selection approach:
import typing import QuantConnect.Indicators.CandlestickPatterns import datetime class EMAMomentumUniverse(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 10, 11) self.SetEndDate(2020, 11, 11) self.SetCash(1000) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction) self.averages = { } def CoarseSelectionFunction(self, universe): selected = [] universe = sorted(universe, key=lambda c: c.DollarVolume, reverse=True) universe = [c for c in universe if (c.Price > 10)][:100] for coarse in universe: symbol = coarse.Symbol if symbol not in self.averages: # 1. Call history to get an array of 200 days of history data history = self.History(symbol, 200, Resolution.Daily) #2. Adjust SelectionData to pass in the history result self.averages[symbol] = SelectionData(history) #here is where im trying to create the bool variable. self.hammer = self.CandlestickPatterns.DojiStar(symbol) self.averages[symbol].update(self.Time, coarse.AdjustedPrice) if self.averages[symbol].is_ready() and (self.averages[symbol].rsi.Current.Value < 40): selected.append(symbol) return selected[:10] def OnSecuritiesChanged(self, changes): for security in changes.RemovedSecurities: self.Liquidate(security.Symbol) for security in changes.AddedSecurities: self.SetHoldings(security.Symbol, 0.10) class SelectionData(): #3. Update the constructor to accept a history array def __init__(self, history ): self.rsi = RelativeStrengthIndex(14) #4. Loop over the history data and update the indicators for data in history.itertuples(): self.rsi.Update(data.Index[1], data.close) def is_ready(self): return self.rsi.IsReady def update(self, time, price): self.rsi.Update(time, price)
Thanks a lot for any clue!
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
To unlock posting to the community forums please complete at least 30% of Boot Camp.
You can continue your Boot Camp training progress from the terminal. We hope to see you in the community soon!