Summary
The ICT Concepts Strategy is a Premium mechanical strategy for the NinjaTrader 8 platform. The strategy can be used to pass propfirms evaluation challenges
We highly recommend joining our discord community by following this invite link
Index
Getting Started Videos
Prequisites
To properly use this strategy you should have available the following prequisites
- NinjaTrader 8. with any license type Click here to download
Description
The ICT Concepts strategy is based on ICT smart money concepts such as Market Structure events, Fair Value Gaps and Breaker Blocks
The strategy enters and manages trades according to the following logic
- Defining a Trend Bias Long or Short
- Search for entry setups based on Fair Value Gaps and/or Breaker Blocks
- Faire Value Gaps
- Breaker Blocks
- Entering trades and value at risk
- Wait For Pullback: In this mode, the strategy will wait for the price to retest the entry zone (whether it is a Fair Value Gap or a Breaker Block)
- Immediate Entry: In this mode the strategy will enter a trade immediately after a valid entry setup
- Setting StopLoss, TakeProfit and managing positions
- Zone Break Price: Which sets the stoploss price to the opposite edge of the zone that generated the entry setup. See below in the parameters section for a detailed explanation of this method
- Last Swing Price: This sets the stoploss price to the last higher high or lower low price
- Fixed Currency Value: This sets the stoploss price to a fixed currency value that represents the maximum risk of loss allowed for a trade
In this first step, the strategy will analyse Market Structure Shifts (also known as Change of Character) to set an active trend bias. The Market Structure Shifts are analyzed on either the current Timeframe on which the strategy is running, or on a higher Timeframe
Once a trend bias is activated, the strategy will look for entry setups. Those entry setups can be
When an entry setup occurs, the strategy will calculate the currency risk of that setup based on the stop-loss strategy being used. If the risk is smaller than the max allowed risk, the strategy will move forward to the next step, otherwise the setup will be disposed
The strategy has two entry modes following a setup:
The first thing that strategy set when a position is open is to set the StopLoss price according to a user set strategy. The StopLoss strategy can be one of these:
Once the stoploss is decided, the take profit price is set according to a ratio that can be chosen by the user.
Furthermore, and for managing positions, the strategy implements several strategies such as a Grid based dollar cost averaging (DCA) position management method, and a swing based stoploss trailing method. These methods can be enabled or disabled by the user according to his taste and preferences
So let's look at some entry examples:
Immediately Entering Short on Fair Value Gap
In this example, you can see a short entry setup. The first candle marked 1 created a bearish Market Structure Shift which sets the strategy trend bias to short entries.
Then a bearish Faire Value Gap has occured. The entry mode in this example is Immediate, so a short trade was immediately open after the third bar of the FVG marked in 2
Immediately Entering Long on Fair Value Gap
In this example, you can see a long entry setup. The candle circled in red marked a bullish Market Structure Shift which set the strategy trend bias to long entries.
Then a bullish Faire Value Gap has occured. The entry mode in this example is Immediate, so a long trade was immediately open after the third bar of the FVG which is the same candle that created the market strucutre shift
Notice that before this winning example, a losing example occured. The loss in this example was small because the Order Management Strategy used in this example is trailing stop
Immediately Entering Short on Breaker Block With Grid Management Strategy
I this example, we can see a bearish breaker block (bars 1,2,3,4) entry setup that triggered an entry immediately after the bar marked 4
The order management strategy in this example is Dollar Cost Averaging (Grid) parametered to close the position at 2 orders hitting the breakeven price.
This management method was not very useful in this example, because the price eventually went in the winning direction after the position has been closed. But I thought it was a good example to show some of the capabilities of the strategy
Entering Long on Fair Value Gap After a Retest
In this example, the strategy waited for a restest of the FVG zone before entering a trade long. Instead of immediately entering long at the close of the bar marked with X, the strategy waits until a retest occured marked with the red circle.
Waiting for the retest or pullback allows to confirm the entry setup by waiting for the price to rebound on the FVG or BB zone without breaking it.
Features
The ICT Concepts strategy has a set of unique features:
- Robust In-house implementation of the ICT smart money concepts
- No pending orders are placed: only market orders
- Full-auto strategy that can be scaled into multiple instances
- Precise backtesting capabilities following NinjaTrader official best practices to obtain precise entry/exit backtesting on tick level
- Robust In-house Order management library. Resistant to connection loss and works seamlessly on Rithmic accounts or NinjaTader brokerage accounts
Important Disclaimer
We strongly recommend that you never run your algorithmic trading systems on your hard-earned real money. You should always minimize your risk and run your strategies on trader funding programs so that the maximum amount your risk to lose is the monthly subscription fee you pay those programs.
Here are the trader funding programs that we recommend using, and that we use to run the Stacked Imbalance Strategy on:
Parameters
We try to keep the parameters to minimum. We only left the most important parameters to be set
General | |
Backtest Mode | This parameter is very important and should be used carefully. This parameter should be set to true (checked) whenever the strategy is run in Historical, Backtest, or Optimization modes. When running the strategy in Live Real-Time mode this parameter should be set to false (unchecked). |
Daily TakeProfit Target | The strategy will stop when the daily TakeProfit amount is reached after a position is closed. When set to 0, this parameter is ignored |
Daily StopLoss Limit | The strategy will stop when the daily StopLoss amount is reached after a position is closed. The value of this parameter is positive. For example if the value is set to 300, the strategy will stop when the Realized PnL is lower or equal to -300$. When set to 0, this parameter is ignored |
Stop @ Winning Count | This will make the strategy stop trading if the net count of winning trades for the day is equal to the value of this parameter. This parameter is ignored if equal to 0 |
Stop @ Losing Count | This will make the strategy stop trading if the net count of losing trades for the day is equal to the value of this parameter. This parameter is ignored if equal to 0 |
Render Opacity (1-100) | The opacity to render ICT object on the chart. I personally prefer the value of 90 |
Market Structure | |
Trend Detection TimeFrame | This parameter allows to select a higher time-frame on which the ICT engine will be run and ICT elements will be detected. The default value of this parameter is Same As Main Data Series which means running the ICT engine on the same time-frame as the chart timeframe. If you select a different value than Same As Main Data Series, make sure to select a higher time-frame in regard of the active charts' timeframe. For example, if the current time-frame on the chart is 15 Minutes, make sure that the value of this parameter represents a higher time-frame such as 1 Hour. If in that case you select 1 Minute as a higher time-frame for example, the strategy will not work. |
Higher TimeFrame Period | This parameter sets the period of the higher time-frame if the value of the previous parameter Trend Detection TimeFrame is set to another value than Same As Main Data Series. If the value of the previous parameter Trend Detection TimeFrame is set to Same As Main Data Series, this parameter will be ignored |
Swings Period | Swings are higher lows,higher highs, lower highs and lower lows. After each price bar close, a swing can be detected. But just after that, the next bar can cancel the swing at the previous bar by creating a new swing of the same type. Or this can happen on the second bar, or the third, etc... The swing period sets how many bars is enough to seperate two swings of the same type. The more you increase this parameter, the more you decrease the number of swings overall. The more you decrease this parameter, the more you increase the number of overall swings. I personally use the value of 3 or 4 for this parameter. |
Trend Swing Count | This parameter sets the number of successive swings required to define a trend. For example if this value is set to 3, the strategy will be looking for a market strucutre shift or break after 3 consecutive low swings going up or 3 consecutive high swings going down |
Draw Price Swings | This parameter will enable/disable the drawing of swings on the chart. Swings will always be analyzed and processed regardless of this parameter which only affect visibility and render. |
Entry Setup | |
Trade Time | This parameter is very important and can be delicate in some cases. This parameter is used to determine the time intervals in which the strategy is allowed to place trades. The time zone that should be used while setting this parameter value should be the Time Zone of the machine on which NinjaTrader is executed.
Here are some examples for more clarifications:
|
Quantity Strategy |
This parameter sets how the quantity should be set for a Trade
|
Max Qty | This parameter sets the maximum allowed quantity when the Risk Adjusted method is selected. This option is very useful since some propfirms has order quantity limits that can cause the account to be invalidated |
Enable FVG Entry | This parameter enables/disables entering on Fair Value Gaps entry setups |
Enable iFVG Entry | This parameter enables/disables entering on Inverse Fair Value Gaps entry setups The inverse fair value gap entry setup open long trades when a bearish FVG is formed then broken upward. The inverse fair value gap entry setup open short trades when a bullish FVG is formed then broken downward. |
Enable Breaker Block Entry | This parameter enables/disables entering on Breaker Blocks entry setups |
Long/Short Entry Mode |
This parameter is useful if you already have a directional daily bias and want to restrict trading to a specific direction long or short
|
Trade Entry Mode |
This parameter sets the entry strategy following an entry setup, it can have 2 possible values:
|
Order Qty | This parameter is only used if the Quantity Strategyis set to Fixed. This parameter sets a fixed quantity of each trade. In the case of increasing orders quantity executed by the order management mechansim, this parameter is also used for each increase in quantity. Generally, We would use the values 1 or 2 for this parameter for Micros |
Order Management | |
Order Management Strategy |
|
ATM Strategy Template Name |
This parameter is available when the ATM Strategy order management method is selected. This parameter specifies which ATM strategy to use. As in the image example above, the value of this parameter should be the template name of your custom ATM strategy. In the example is should be equal to template1 off course you can chose another name, but the most important thing is that the parameter value should correspond to an existing "ATM strategy template" otherwise no position will be opened |
On Opposite Signal |
|
StopLoss Strategy |
|
TakeProfit Strategy |
|
Max Risk Currency | This sets the max risk in dollars for one position.
|
Take Profit Currency | This sets the take profit in dollars for the open position. If you use the Fixed Currency Value as a take profit strategy, the value of this parameter will be used. If not, make sure to set this parameter to a high value to not interfer with other ratio based strategies |
Stop Loss Points | This parameter is available if the Stop Loss strategy is set to Points |
Enable Breakeven | This parameter will enable/disable breakeven mechanism on open positions |
Breakeven Trigger % | This parameter is available if Breakeven is enable by the previous parameter. This parameter sets the percentage of profit that needs to be reached to trigger setting the stop loss to breakeven for the current open position |
DCA (Grid) Parameters | |
Breakeven Profit Shift | When the DCA method is selected as a position management mode, this parameter will modify the definition of a breakeven and adds a bit of profit to it. This is useful to cover the cost of commissions when closing the grid in breakeven |
Grid Size to Breakeven | When the DCA method is selected as a position management mode, this parameter will set the number of order increases required to consider closing the position in breakeven |
Fair Value Gap | |
Same 3 Candle Type | This parameter will constraint Fair Value Gaps to 3 consecutive candles of the same type (bullish or bearish). If this parameter is set to false the indicator will detect Faire Value Gaps that are not perfect. For example, a bullish FVG composed of the first candle Red, then the middle one green, than the last one green. A perfect FVG should have 3 candles of the same type |
Min. Gap (ticks) | This parameter sets the minimum distance in ticks between the wicks of the Fair Value Gap to be valid. The more you increase this value, the fewer FVGs will be detected. Inversly, the more you decrease this value, the more you increase the number of detected FVGs |
Command Buttons | |
The strategy allows to manually execute some commands in case you want to manually intervene. The commands buttons are added to the Chart Trader panel, make sure to show it on your active chart | |
Arm/Disarm Buttons | The Arm Long/Disabled Long and Arm Short/Disabled Short buttons can manually activate or deactivate entering trades long or short. By default those two toggle buttons are enabled meaning the strategy is armed to enter both long and short trades. Toggling the button to the disable will restrain the strategy to enter a trade in the disabled direction. This can be useful if you have a directional bias or conviction about the direction of the market |
Close Position Button | The Close position button will immediately flatten the position on the active instrument on the active Chart. This can be useful if you want to exit a trade without having to affect the strategy or restart it. After closing the position, the strategy will continue to function normally and look for new trades to take |
Increase Qty Button | The increase Qty button allows to increase the quantity of the current active position. The increase value is defined by the parameter Order Qty. This can be useful if you want to manually dollar cost average the position or to double the quantity of the position after a confirmation signal on the winning side of the trade |
Set Breakeven Button | The button will set the stoploss of the open position to breakeven level if the current stoploss price is lower than breakeven price for long entries and higher than breakeven price for bearish entries. |
Backtesting and Preferred Settings
Here I will try to periodically list backtests with different risk appetit. But before that here are some remarks regarding backtesting
- Past results are not guarantee of future results. All backtesting results are for indicative purposes only
- The period on which the backtest was run was not handpicked to show the best results, The backtest period is the month prior to the first release of this strategy
- Commissions are included in the backtests to get as realistic results as possible. The commission schema used is NinjaTrade Lifetime license commissions schema
- The Trade Time setting used in these backtests is adapted to UTC+1 Timezone which is 07:00-08:00,10:00-13:00,15:00-18:00. The EST equivalent will be 01:00-02:00,04:00-07:00,09:00-12:00
- At automated-trading.ch we run very precise backtests due to the following 2 factors
- We are following the NinjaTRader official guide on how to achieve precise intrabar granularity backtesting by using additional tick level DataSeries See here for more info
- We are only using Market Orders instead of Pending Orders, in both real-time and becktest modes.
Download & Installation Instructions
At automated-trading.ch you can chose to either purchase monthly subscription to use our premium products, or use our free products without subscribing
In both cases, you need to create an account so you can get a License that you can use for both premium and free products
To obtain the license simply Signup and then get your license on the billing page
This ICT Concepts strategy is a premium strategy. It can be run on Backtest, Playback and Optimization modes for free. Whereas an active subscription is required to run it on Live mode.
To download and install the strategy follow the instructions below
- Click on the below download button to download the ICT Concepts Strategy file
- Import the downloaded .zip file into NinjaTrader using the import NinjaScript menu item
- Next, open a new chart window while making sure the Tick Replay tickbox is checked
- If you don't see the Tick Replay check box, go to Tools->Options->Market Data and enable Show Tick Replay
- After installing the strategy and opening a new Chart window you should add the strategy to the chart. Right-Click on the chart and Click on the the "Strategies" Context menu entry. Or you can Ctrl+S on the Chart to open the "Add New Strategy" Dialog window
- After adding the strategy to the chart, the strategy will be run on Historical data loaded in the chart.
- When the Histocial data run is done, the strategy will switch to Real-Time mode and will add the license panel text box to the "Chart Trader Panel"
- Make sure to display the Chart Trader panel on your active NinjaTrader Chart
- Copy/Paste your license in the text box as shown in the image below. Your license can be found on the billing main page. Make sure to create an account or login first
- Click on the Check License Button
- At this step the strategy will check the License and activate/deactivate trading according to your subscription state
- If you have an active subscription, will see the "Check License" button turned to green, and the next verification date next to your email. License check is only required once. Until the next verification date.
- At this stage, the strategy is Ready. If your license is valid, the strategy will continue running on live mode
- If you chose to not subscribe yet, and want to test the strategy beforehand, you can run it on Playback and Historical modes
Frequently Asked Questions
General
Using a VPS is good but not imperative. I run this strategy on a ~$6 VPS Windows instance on Hetzner. Check out our resources page to get a discount through our affiliate LINK
Yes! You can run multiple instances of this strategy on the same account but each instance should be run on a unique instrument
You can't run multiple instances on the same account on the same instrument because as you know NinjaTrader will aggregate orders in one position per instrument per account
Yes! you can use a copier, but a better solution would be to run multiple instances of the strategy. The purchased license allows you to run unlimited instances on multiple machines
Yes! The strategy is designed for that exact purpose. It will work seamlessly on Rithmic, NinjaTrader brokerage, Tradovate or any other provider connected to your NinjaTrader platform
I designed this strategy to be full-automatic strategy. Yet, it can be used as a semi-auto strategy to enter trades and then let you manage those trades manually using its command buttons
You should consider full auto-trading over manual trading for many reasons:
- Trading 24/7: Automated trading strategies don't need to go to the bathroom not it need to take a break
- Better execution, faster and more precise
- Eliminate psychology and sentiments
- Can be scaled to dozens if not hundreds of instances
- Automated trading can generate truly "passive" income, manual trading is just another "more stressful" job
Yes, If you have an idea that you believe can improve the performance of this strategy, I will be more then happy to hear from you. Please use the contact page to send me a message
No, the source code of the strategy is protected for copyright reasons
Billing
Yes, you can cancel your subscription from the account page at any time to prevent future payments. We cannot refund the unused portion of your subscription, but you will be able to use your subscription even after cancelling for the remainder of the billing cycle.
No, we don't offer a trial subscription plan. But you can download and test the strategy in backtest and playback modes before subscribing
We do not offer full or partial refunds, but you may cancel your subscription at any time to stop future payments.
Skeptics
I have been a professional software developer since 2010. I have been developing automated trading strategies since 2012, for my self for fun and profit and also been developing strategies for clients all over the world
I have always been invlolved professionaly in the business of Finance and Investing, I have worked for trading brokers and investment banking.
I'm not a marketer, and I don't hire someone else to develop my strategies.
This strategy has been profitable for me on the long run with ups and downs, especially when it is run on multiple insturments. But the question remains pertinent, why I'm selling it?
The answer is I'm not selling it, I'm renting it to generate an additional income and diversify my different sources of income besides what this strategy can generate. Which you should also do. You should not rely on one source of income to reach financial independance, the key is diversification.
The edge of this strategy will not disappear if many people start using it. This strategy is purely mechanical and does not rely on a hidden quantitative pattern that should not be disclosed
Lets examine pros and cons of pending orders
- Pros:
- Best price execution when using limit orders
- Protection against losses in case of connectivity issues
- Cons:
- Can get rejected on high price volatility
- Delay between request to place the order and when it gets placed. Price volatility can cause the order to be rejected and the price to run away
- Requires management: any opposite orders need to be canceled
- Visible to the broker, placed orders can be manipulated
After years of developing strategies I reached the conclusion that market orders are better suited for the context of automated trading.
The main drawback of using pending orders is the fact that they can be rejected which is very hard to manage especially in a volatile environment
In all our strategies, we use market orders even for take profit and stop loss. Lets examine the pros and cons of market orders
- Pros:
- Guarantee of execution reagrdless of volatility conditions
- Invisible to the broker before they get submited
- No risk of being rejected which means better protection for stop loss
- Faster execution than pending orders
- Cons:
- In the case of the connection being lost with the broker, the strategy will be unable to send market orders
Remark: MIT (market if touched) orders in NinjaTrader are a solid alternative to pending orders if you really want to use pending orders
We are following the NinjaTrader official guide on how to achieve precise intrabar granularity backtesting by using additional tick level DataSeries See here for more info
Don't take my word for it. Test it yourself, at the end of each trading day, run a backtest of the strategy on that day and compare it with the live trades the strategy made during the day.
Release Notes
- Fixed entry when Fixed Currency value is set as Stoploss method
- Added Points as stoploss method
- Added Breakeven functionality
- Fixed Action buttons not displayed when in Playback mode
- Fixed Action buttons panel behaviour when changing chart tabs
- Removed "Stop trading @ trade counts" parameter and always enable "Stop @ winning/losing count" parameters
- Bug Fix: Max Currency Risk should not take over the stoploss price
- Added Max Quantity parameter for risk adjusted method
- Added "Net Losing Count" as a daily stop trading strategy
- Modified daily stopout trigger to immediate mode based on the Unrealized PnL. Before this it was after the closing of the open position
- Added Inverse Fair Value Gaps Entries
- Adding Risk adjusted quantity strategy
- Adding daily Stop trading strategy
- Major update: adding ATM Strategy management capabilities
- Added Chart panel manual control buttons
- Less restrictive swings alignement condition : The condition of perfectly increasing or decreasing swings is replaced by the condition of increasing or decreasing edge swings. Before this release, the Trend Swing Count parameter defined how many swings need to be perfectly increasing or decreasing for a Market Structure Shift to be detected. After this release, the algorithm only analyses the first and the last swings in the swings sequence for alignement.
- Added the condition of the current price breaking the last Market Structure Shift level for entries
- Backtest results are updated to reflect the changes in this new release
- Bug Fix : Risk should not be blocking when fixed value stoploss is selected
- First Release of the strategy