Improved Forex Support
Forex symbol setup has been improved. You can enter the symbol names
in the format "EUR/USD", and the Asset Currency in the symbol information
will be set to USD. This means you can enter multiple forex symbols
at once from the add symbol dialog, and you can distinguish between forex
pairs with the same base currency. You will still have to set up the
tick size, contract size, and initial margin in the Symbol
Information. The Interactive Brokers plugin has been updated to work
with forex symbols specified this way.
Profit calculations have been corrected for forex pairs where your
account currency is the base currency.
You can trade cross currency pairs. You will need data for forex
symbols which will supply the exchange rate between the two cross
currencies and your account currency.
Paper trader has a new option to use the bid and ask price to
calculate fills. If enabled, it will look at the bid and ask
values for a bar to determine the spread. To use this option,
the bid and ask prices for the bar should be the bid and ask prices at
the close of the bar. If the bid and ask are zero, it will use
the normal prices. If they are nonzero, it will use the
difference between the close and the bid and ask to calculate bid and
ask values for the OHLC values. The bid values will be used for
sell transactions, and the ask values will be used for buy
Interest can now be calculated correctly for forex transactions. To
use this you will need to set up symbols with the new Asset Class of
"Interest Rate" to store the interest rate data. There is a new
option for forex rollover time in the RightEdge options. There are
also new options in the paper trader settings for interest calculations.
Oanda interest rate plugin added. This allows you to download
historical interest rates for different currencies. You do not
need to be a Oanda customer to use this plugin.
Trading symbols in a foreign currency
You can now trade stocks or other symbols that are quoted in a foreign
currency. To support this, RightEdge needs the exchange rate between
your account currency and the symbol currency. This can be provided
by setting up a forex symbol for the two currencies.
You can set your account currency in the RightEdge options.
You can set the symbol currency for each symbol in the symbol setup.
The price of a fill, the entry price, and other price members of
PositionStats are now of type Price instead of double. The
price class has two members: the AccountPrice and the
SymbolPrice. The symbol price is the price in the symbol
currency. The account price is the price in your account
currency, after applying the exchange rate. If the symbol
currency matches your account currency, both prices will have the
A SubmitOrder method has been added to PositionManager. This method
will allow you to submit an arbitrary order for a position. You can
specify the number of bars the order should be active for. This
method returns a ReturnValue<string>, which will hold the order ID
of the order if it was successfully submitted. A CancelOrder method
has also been added to PositionManager, which allows you to cancel a
RightEdge has always allowed you to have more than one open position per
symbol, if you want. This allows you to have seperate exit
criteria (profit targets, stop losses, etc.) for positions that were
opened at different price points. However, the broker doesn't make
this distinction. If you have two positions open for 100 shares
each, the broker sees your current position as 200 shares long.
When dealing with simple equity trading, this distinction doesn't matter
much. However, when dealing with short positions, forex symbols,
or symbols with a margin requirement, the profit and loss calculations
can be different depending on whether you are calculating them for
multiple seperate positions or a single combined position. Because
of this, the position manager has been modified to keep track of the
combined positions for the purposes of profit and loss
calculation. We are calling these positions the broker
positions. If you subscribe to PositionManager's OrderFilled
event, you can access the corresponding broker position using the
BrokerPosition member of the OrderFilledEventArgs object.
The Paper Trader has a new setting to allow position reversal.
This will allow a sell or cover order which is bigger than your
current position size to be filled, opening a position in the opposite
direction with the remaining shares. In other words if you are
long 100 shares on a symbol, you could submit an order to sell 300
shares, and you would end up short 200 shares for that symbol.
Position manager has improved support for position reversal and
orders that are filled on a closed position. When either of
these happens, we say that a position has been overfilled. By
default RightEdge will throw an exception when this happens.
You can use the PositionOverfilledAction property and the
PositionOverfilled event (both members of PositionManager) to modify
this behavior. See the developer documentation on these items
for more information.
Added CloseAllPositions(Symbol) and CloseAllPositions() to close
all open positions by symbol or globally.
A native .NET plugin for Interactive Brokers has been added which
communicates directly with TWS via sockets. It does not require
the TWS API to be installed, and should avoid a lot of the ActiveX,
COMException, and versioning problems that some people have had.
This plugin does not yet support broker functions, but it can be used
to retrieve historical and live data. The plugin is based on the
Interactive Brokers C# API available at
A new plugin type has been added to display system results.
Plugins of this type can display any type of data they want as a tab in
the system results screen. The System Results tab of the Options
dialog allows you to manage which of these plugins should be activated,
what order they should be displayed in, and to set any custom options
the plugins may have. There is also a new "System Results" item in
the view menu that allows you to display or hide these plugins
dynamically when viewing the system results. All of the existing
system results tabs and charts have been converted to system results
MB Trading Real Time Data and Broker Plugin Available. MB Trading
customers will be able to retrieve real time data or perform broker
functions through MB Trading. Please note that MB Trading only
allows one connection per machine.
Oanda plugin for real-time rate data.
Interactive Brokers plugin now supports FA accounts. This is a
setting within the IB broker plugin. Simply set the account code
for the account to enable this functionality.
New Utility Indicators are Available
Bar Performance - Displays price movements as percentages.
Floor - Retrieves the floor of an input value.
Ceiling - Retrieves the ceiling of an input value.
Consecutive - Tracks the consecutive movements of a series.
Round - Rounds an input value.
Absolute Value - Retrieves the absolute value of an input.
You can now use an Enum type as a constructor argument for your
Int64 constructor argument support added.
When collecting live data, the aggregated bars will now include the bid
and ask prices, if available. A option has been added to the symbol
setup to build prices from the midpoint of the bid and ask.
A wizard has been introduced to make creating Watchlist folders easier
and more discoverable.
You may now set exchange hours outside of which live data will be
ignored. This capability will allow for you to start live data
collection and your system before the market officially opens and not
receive tick and bar data that occurs outside of those hours.
We have added two properties to the SystemData class. The
SymbolBars property gives you a list of bars for each symbol, without
any empty bars. Because of this the lists for different symbols
can have different lengths. The SystemBars property gives the list
of bars for each symbol, with empty bars included. So a given
index should correspond to the same date/time for all the SymbolBars
lists. The old BarCollections property has the same value as the
SystemBars property, but it is now obsolete. We think the
SystemBars property is clearer to understand, so we recommend using the
it instead. The lists for each symbol are now of type
IList<BarData>, instead of type List<BarData> as
before. This is done to avoid storing two lists for each
symbol. We have written a wrapper class that implements
IList<BarData> that is more efficient. You may have to
replace List<BarData> with IList<BarData> in your code.