Summary
The Fair Value Gap Scalper 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
Prequisites
To properly use this strategy you should have available the following prequisites
- NinjaTrader 8. with any license type . Order Flow is not needed to run this strategyClick here to download
- automated-trading.ch Account with Premium Subscription
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 FVG Scalper on:
This strategy has two entry setups that are based on confluence between FVGs on the higher timeframe and FVGs on the lower timeframe. Let's start with the first setup
FVG Pullback on Higher-Timeframe Then Lower-Timeframe FVG confirmation Entry Setup
This entry setup is based on a multitimeframe analysis of Fair Value Gaps to enter trades
The strategy analyzes two timeframes in a simultaneous way, to find entries based on Fair Value Gaps that occur on both timeframes.
The two timeframes should be of the same type, meaning they should be both time based, or range based, or tick based...etc. The strategy should be running on the lower (faster) timeframe while the higher (slower) timeframe should be selected as a parameter. For example, the strategy can run on the 30 seconds timeframe as the lower timeframe, while having the 5 Minutes timeframe as the higher timeframe
Here is the algorithm of the strategy to find entries:
- The strategy searches for Fair Value Gap on the higher timeframe
- When the FVG occur on the higher timeframe, the strategy will react to two possible outcomes:
- The first outcome is that the price moves far from the higher timeframe FVG without pulling back and retesting the FVG. In this case the higher timeframe FVG is considered invalid, and the algorithm will start looking for another FVG on the higher timeframe
- The second outcome is that the price retests the higher timeframe FVG and then another FVG on the lower timeframe occurs. In this case, the algorithm will enter a trade long or short according to the type of the FVG
FVG Pullback on Higher Timeframe Entry Setup
This entry setup is a variation of the previous entry setup where the second lower timeframe FVG is not required to enter trades. According to this setup, the price should pullback and retest the higher timeframe FVG, and after that if a price bar closes above (for long) or below (for short) the higher timeframe FVG zone, a trade is entered
Chart Examples
So let's look at some examples on the chart:
These examples are not intended to show that the strategy generates profit. I have intentionally handpicked profitable trades to avoid confusion and to show the best case scenarios where the entry setups work well. If you run the strategy on your side, you will see that many of those same entry setups will lead to losing trades. This is the reality of trading. Your goal should be expected profitability on the long run even though some trades are in loss.
Entry : Waiting for pullback on Higher timeframe + FVG trigger on Lower timeframe
In this example, the strategy is run on the 1 Minute Timeframe on the MES instrument. The higher timeframe is 15 Minutes. You can see the higher timeframe candles draw overlayed on the chart. The first arrow marked 1 points to the higher timeframe FVG, after that FVG, the strategy waited for an FVG on the lower timeframe to occur. That is the FVG marked with the 2 arrow. immediately when the lower timeframe FVG is closed, the long trade is open setting the stoploss at the lower zone edge of the higher timeframe FVG and a 2:1 take profit. Then the price moved back to the higher timeframe and made a second retest followed by an FVG on the lower timeframe marked with the 3 arrow.
Here is a second similar example
Entry : Waiting for pullback on Higher timeframe
On this example running MES on the 1 Minute timeframe, the higher timeframe is the 15 Minutes timeframe. and the entry mode is HTF Pullback. The price pulleback into a previously formed FVG on the higher timeframe. Then a price bar closed above the FVG upper price level, this was trigger to go long. The stoploss was set to the lower level of the FVG and take profit was 2:1
Entry : (Invert Mode) Pullback Higher timeframe FVG
This example demonstrate the invert entry logic. Like the previous example, the price pulleback and retest a higher timeframe FVG and closed above it with a green candle. Since the Invert Entries parameter is checked the strategy went short instead of going long. And the stoploss level and the take profit levels were inverted. As you can see the take profit level was set to the lower FVG edge and the stoploss was calculated with a 1:1 win loss ratio. This invert logic is useful on choppy market regimes
Entry skipped: Price moves away from the higher timeframe FVG
This examples illustrates the case where after an FVG on the higher timeframe has formed, the price moved away from it without a pullback or retest marking the FVG as invalid.
Features
The FVG Scalper strategy has a set of unique features:
- 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 executed on tick level (Intrabar granularity)
- Robust In-house Order management library. Resistant to connection loss and works seamlessly on Rithmic accounts or NinjaTader brokerage accounts
Here I further explain some of the features of the strategy in more details
Dynamic Quantity and Risk Management
As all our strategies, this strategy implements two methods to set quantity for open positions.
- Fixed Quantity: This method will use the same quantity value for each position. If the stoploss is variable between positions (by using a dynamic stop loss value), The win/loss will be also variable between positions
- Dynamic Risk Adjusted Quantity: This method will calculate quantity of each position based on multiple factors:
- The stoploss of the position
- The maximum risk (in $ currency value) allowed for a position to take
- The maximum quantity allowed for a position to take
Position Management
As all our strategies, this strategy implements mutiple position management methods :
- ATM Strategy:If you wish to delegate the position management to your own ATM strategy, this is possible by selecting an ATM strategy of your choice from the drop down box
- Dollar Cost Averaging:This method will manage the position by increasing the quantity of the position if the price goes into the losing side. By doing that the strategy aims to bring the average price of the position closed to the current price and close the position on breakeven when the price pullbacks
- Classical Trailing Stop:This method will trail the stop loss of the position based on a trigger and a trailing amount
Apart from those position management methods, the strategy allows to set the stop loss based on multiple strategies and to set the take profit based on a ratio based method. Check the parameters section for a detailed explanation
Account Management
The strategy implements daily stop-trading triggers based on the Net winning position count, the Net losing position count or when a target realized Net profit is reached. or when a target net loss is reached.
Parameters
We try to keep the parameters to minimum. We only left the most important parameters to be set
General | |
Execute Historical Trades | 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 @ Daily 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 @ Daily 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 objects on the chart. I personally prefer the value of 20 for this parameter |
Execute on different Instrument | The parameter will enable executing trades on another instrument than the one on the active chart. This can be useful if you want to run the strategy logic on Minis and execute on Micro to better manage the risk by opening the trades on micros. Notice that if you enable this parameter all the risk calculation done by the strategy will be made on the execution instrument. |
Execution Instrument (only when above parameter is enabled) | The parameter will let you chose from a list of Micros available on your NinjaTrader connection, the instrument on which trades will be executed. notice that historical trades and live trades will not be displayed on the Chart in this case. |
Market Structure | |
Higher TimeFrame | This parameter allows to select the higher timeframe on which the entry setup analysis will be run. Make sure to select a higher timeframe in regard of the current timeframe on the chart. Make sure to select a timeframe of the same type of the timeframe on the active chart. For example you cannot select a "Tick" based higher timeframe while the current chart timeframe is "Minute" |
Higher TimeFrame Period | This parameter sets the period of the higher timeframe |
Draw Higher Timeframe Candles | This parameter will enable drawing (overlaying) higher timeframe candles on top of the active chart |
Swings Period | This is also known as Swing Sensitivity. 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, 6 or 12 for this parameter. |
Ignore FVG Older Than (X) Days | This parameter will filter out FVGs that older then a set number of days from the entry logic. Those FVGs will still be drawn but they will not generate trades |
Entry Setup | |
Time Zone |
This parameter sets the time zone to be used for setting the Trade Time parameter below. Since futures markets are open and closed based on US market time zone which is EST (US Eastern, New York), this parameter allows you to specifiy trade time interval on another timezone which is your local machine timezone
|
Trade Time | This parameter is very important and can be delicate in some cases. This parameter is used to specify the time intervals in which the strategy is allowed to place trades. 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 |
Invert Entries | This parameter will invert entries from long to short and from short to long. When this parameter is enabled, the strategy will calculated stoploss, take profit and risk with no inversion logic. At the last step of actually opening the trade, the strategy will invert the trade type. In consequence, the stoploss will be transformed into a take profit and the take profit will will be transformed into a stoploss. And the risk will be inverted so for example, a 2:1 take profit will be transformed into a 1:2 take profit and so the risk will be increased. This should be taken into consideration while enabling this parameter |
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 |
Higher TF Invalidate Setup Points | This parameter sets how many points the price should move away from the higher timeframe FVG to invalidate and reset the current active entry setup |
Previous Swing Breakout Filter | This parameter will enable/disable an entry filter based on comparing the current price to the High/Low of the previous Higher timeframe candle. When this filter is enabled the strategy will check if the current price is higher than the previous higher timeframe candle for a long entry, and will check if the current price is lower than the previous higher timeframe candle for a short entry. This filter is useful because it can improve the quality of trades by only trading in the direction of a higher timeframe breakout |
Fair Value Gap | |
Type of Min. Gap for HTF | This parameter sets the measurement type of the minimum gap of the higher timeframe Fair Value Gap. This can have two possible values
|
Min. Gap for HTF | This parameter sets the minimum gap to consider a FVG on the higher timeframe. If you, for example, set this value to 10 and a type in points, the strategy will filter out FVGs that have a gap lower than 10 points |
Max. Gap (Points) for HTF | This parameter sets the maximum gap to consider a FVG on the higher timeframe. If you set this value to 50 for example, the strategy will filter out FVGs that have a gap higher than 50 points |
Type of Min. Gap for LTF | This parameter sets the measurement type of the minimum gap of the lower timeframe Fair Value Gap. This can have two possible values
|
Min. Gap for LTF | This parameter sets the minimum gap to consider a FVG on the lower timeframe. If you, for example, set this value to 10 and a type in points, the strategy will filter out FVGs that have a gap lower than 10 points |
Max. Gap (Points) for LTF | This parameter sets the maximum gap to consider a FVG on the lower timeframe. If you set this value to 50 for example, the strategy will filter out FVGs that have a gap higher than 50 points |
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 |
|
Enable Price Breakeven | This parameter will enable/disable breakeven mechanism based on price |
Breakeven Price Strategy | This parameter sets how the price based breakeven should be calculated
|
Breakeven Price Trigger | This parameter is available if Price based Breakeven is enabled This parameter sets the trigger value that needs to be reached in order to set the stoploss of the current position to breakeven |
Enable Time Breakeven | This parameter will enable/disable breakeven mechanism based on time in minutes |
Breakeven Time Trigger | This parameter is available if Time based Breakeven is enabled This parameter sets the trigger value in minutes that needs to be reached in order to set the stoploss of the current position to breakeven |
StopLoss Strategy |
|
TakeProfit Strategy |
|
Target Risk Per Trade ($) | This sets the max risk in dollars for one position.
|
Max Allowed Risk Per ($) |
|
Stop Loss Points | This parameter is available if the Stop Loss strategy is set to Points |
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. |
Take Profit Points | This parameter is available if the Take Profit strategy is set to Points |
Scale out % Qty at % Target | This option will enable a scaling out mechanism that consists in closing a percentage of the position quantity when the price hits a certain percentage of the the profit target. The value calculated is rounded to the lower value if the percentage value calculated is fractional. For example, if the position is a 5 quantity positions, and the quantity percentage of this parameter is set to 50%, the quantity closed will be 2 (lower end of 2.5) |
Scale out at % Target | This parameter sets the percentage of the profit target that will trigger the scaling out mechanism |
Scale out % Qty | This parameter sets the percentage of the quantity that will be closed during the scaling out mechanism |
DCA (Grid) Parameters | |
Breakeven Profit Shift | When the DCA method is selected as a position management method, 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 method, this parameter will set the number of order increases required to consider closing the position in breakeven |
Min Grid Gap (Point) | When the DCA method is selected as a position management method, this parameter defines a minimum gap disstance in points between two orders |
Bar Close Trigger | When the DCA method is selected as a position management method, this parameter will make grid orders open on bar close in the direction of the trade |
Trailing Stop Parameters | |
Trailing Stop Strategy | When the Classic Trail Stop method is selected, this parameter let you chose on which basis the trailing will be calculated
|
Trailing Stop Trigger | When the Classic Trail Stop method is selected, this parameter sets the trigger (in Points or in Ratio) |
Trail Amount | When the Classic Trail Stop method is selected, this parameter sets the amount (in Points or in Ratio) to be trailed when the trigger is hit |
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
This section is still in In preparation...
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 FVG Scalper 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 FVG Scalper 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
Click to enlarge - 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 on 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 or partially filled 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 or partially filled 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 bug which made entry in only in one direction
- Various code optimizations
- Added Decrease quantity button
- Complete makeover of the strategy with new parameters added and few parameters removed
- Bug Fix: on bearish FVG detection
- Added the possibility to execute trades on micro instruments
- Fixed Take Profit value when in Points mode
- Fixed very critical error on short FVG+FVG entries
- Added FVG filter as new parameter
- Fixed installation issue
- First Release of the strategy
User Comments & Feedback
You can find feedback of our users and ask questions about this strategy by joining our discord community by following this invite link or clicking on the Discord logo image. Joining is completely free