Edgewater Markets

Edgewater Markets

Provider ID45

Edgewater Markets liquidity on Obermind Stream, over the VisionFX FIX 4.4 API. It streams full-refresh quotes and sends orders for spot FX, metals, forwards and NDFs.

  • FX
  • FX Forwards
  • Integrations
  • Market Data
  • OMS / EMS
  • Order Execution
  • Precious Metals

Overview

Edgewater Markets connects to Obermind Stream as a FIX 4.4 taker on the VisionFX API. Quotes and orders use two initiator sessions.

  • The price session takes quotes.
  • The trade session sends orders.

Both sessions use EncryptMethod 0 and a 30-second heartbeat. Each logon sends the password Edgewater issued.

There is no instrument download and no order-status request. Link each instrument with an AltId, then quote and trade it on these sessions.

Markets

Spot FX is the default book. A tenor on the symbol selects a forward or an NDF (see Symbols).

  • FX
  • Precious Metals
  • NDFs
  • FX Forwards

Order Types

Sent on NewOrderSingle. Any other order type is rejected before it is sent.

  • Market (tag 40 = 1) does not send a price.
  • Limit (40 = 2) sends the limit in tag 44.
  • Stop (40 = 3) and Stop Limit (40 = 4) are sent as-is.

A working order can be replaced. A partial fill cannot, so cancel the remainder.

HandlInst is 1. Display quantity is not sent.

  • Market Order
  • Limit Order
  • Stop Order
  • Stop Limit Order

Time in Force

Day, GTC, IOC and FOK are sent with their own tag 59 value. Any other time in force is rejected before it is sent.

Good-till-date stays GTD on the platform. Edgewater does not take tag 59 = 6.

The adapter sends GTC (59 = 1) plus ExpireTime (tag 126, UTC). Tag 432 is not sent.

Set an expiry on the order. With none, it goes out as GTC and tag 126 is left off.

  • DAY
  • GTC
  • IOC
  • FOK
  • GTD

Real-time Market Data

Each subscription is one symbol, full refresh, bid and offer only.

  • Subscribe with tag 263 = 1. Unsubscribe with 263 = 2.
  • Market depth 0 asks for the full book.
  • Tag 64 and AggregatedBook are not sent.

A snapshot replaces the whole book.

  • A missing side drops that side. The side still quoted keeps updating.
  • The mid is drawn only when both sides are present.
  • An empty snapshot clears the book.

Sizes are divided by the instrument factor before they are stored, so the book is in lots. A missing size stays unset.

  • Top Of Book
  • Order Book (Level II)

Connectivity

Both sessions are initiators.

Obermind Stream connects out to the hosts on the venue sheet.

  • FIX 4.4
  • Price Session
  • Trade Session

Obermind Platform is integrated with the Edgewater VisionFX FIX 4.4 API.

Sessions

Obermind Stream opens both sessions. On the venue sheet, the comp ids are reversed.

  • SenderCompID (tag 49) is ours. On the sheet it is often labelled TargetCompID.
  • TargetCompID (tag 56) is Edgewater's. On the sheet it is often labelled SenderCompID.

Use the password Edgewater issued, on both sessions.

UseSsl follows the sheet. A host and port with no TLS stays false.

If the first bytes are not a FIX message, set UseSsl true on both sessions and connect again.

Leave stunnel off when UseSsl is already on.

Tag 141 comes from the session type. The ResetSeqNumFlag property does not set it.

  • Price: logon sends 141 = Y. Sequence numbers reset on logon, logout and disconnect.
  • Order: logon sends 141 = N. Sequence numbers are kept, including across midnight.

Heartbeat is 30 seconds in the shipped config file. Leave FIX\FIX44_EW.cfg unchanged.

After a weekend the venue starts its outgoing sequence at 1. It does not send 141 = Y.

When a trade logout shows their sequence 100 or more behind ours, the expected incoming sequence moves to the number they sent. Our outgoing sequence stays where it is.

Quantity

Wire quantity is platform lots times the instrument factor. With a factor of 100000, 0.1 lots is sent as 10000.

Execution reports come back in venue units. Order quantity, leaves, cumulative quantity and last quantity are divided by the same factor.

Quote sizes use that division too. Bid size, ask size and each book level are stored in lots.

Tag 15 is the dealt currency. Base, the default, sends the instrument's base currency.

Term sends the counter currency.

Leave DealtCurrency as Base in production. Term is for a certification order dealt in the counter currency.

If the instrument has no counter currency, Term still sends the base and writes a log line.

Symbols

VisionFX symbols contain a slash, such as GBP/USD or XAU/USD. That value is FIX tag 55.

When the AltId symbol contains a slash, that string is sent. Otherwise tag 55 is built from the instrument's two currencies.

A tenor suffix is split onto tags 63 and 167. The suffix is one or two digits plus D, W, M or Y, such as 1M, 2W, 10D or 1Y.

Any other hyphen stays on tag 55.

  • Instrument type Forward sends tag 167 = FXFWD, and tag 63 is the suffix.
  • Type NDF, or any other type with a tenor suffix, sends tag 167 = FXNDF and tag 63 as the suffix.
  • Spot, such as GBP/USD, omits tags 63 and 167 unless SettlType is set on the provider.

USD/KRW-1M is sent as tag 55 = USD/KRW, tag 63 = 1M and tag 167 = FXNDF. On a market-data request that group is ordered 55, then 63, then 167.

Without tags 63 and 167 the venue reads USD/KRW as spot and rejects it.

Instruments and AltIds

The AltId on provider 45 holds the VisionFX symbol. The instrument supplies the contract size.

The AltId fields:

  • Provider: 45.
  • Symbol: the VisionFX symbol, including the slash. Copy it from Edgewater's symbol list, for example GBP/USD.
  • Exchange: leave empty. It is not sent.
  • Alt currency: the instrument currency. Tag 15 uses the base or counter currency, not this field.

The factor is venue units per lot. 100000 is a standard FX lot.

Set the contract size Edgewater expects on the instrument. The table uses that lot so the AltId shape is easy to read.

Confirm the contract size for metals before trading.

Examples:

InstrumentTypeFactorSymbolExchangeAlt currency
GBPUSDFX100000GBP/USD(empty)USD
GOLDFX100000XAU/USD(empty)USD
USDKRWNDF100000USD/KRW-1M(empty)USD

Adding AltIds in Dash

Edgewater has no instrument download. Create the instruments in Dash, or import them from another provider, then add the provider 45 AltId.

  1. 1.In Obermind Dash, open Instruments, select the instrument and press Update.
  2. 2.Under Alternative IDs, press Add AltId.
  3. 3.Choose provider 45 under Provider, then fill in Symbol, Exchange and Alt currency as in the examples.
  4. 4.Press Save. A changed symbol resubscribes the instrument straight away, without a restart.

With several instruments selected, editing Alternative IDs replaces the list on all of them. Add AltIds one instrument at a time.

Price precision

Set each instrument's price precision from Edgewater's symbol sheet, and attach the VisionFX symbol by hand.

USD/CAD and USD/TRY on that sheet are T+1. Every other spot row is T+2.

That column is the spot settlement convention. Leave SettlType empty for spot.

Tag 63 is then omitted, and the venue treats the book as spot (SP). A tenor suffix on a symbol overrides SettlType for that symbol.

BookDecimal placesSymbols
Most FX5Sheet rows not listed below
JPY and HUF3AUD/JPY, CAD/JPY, CHF/JPY, EUR/JPY, GBP/JPY, NZD/JPY, USD/JPY, EUR/HUF, USD/HUF
CZK, THB and silver4EUR/CZK, USD/CZK, USD/THB, XAG/USD
Gold crosses3XAU/AUD, XAU/EUR
Metals2XAU/USD, XPD/USD, XPT/USD

Limits

The current VisionFX API does not offer these. The adapter does not invent them.

  • No security list, so there is no instrument download.
  • No order-status request.
  • No replace of a partially filled order. Cancel the remainder.
  • No cancel on disconnect. A resting order stays until the client cancels it, or until Friday's close.
  • No mass-cancel message. Cancel-all sends one cancel per working order.
  • An unknown order id comes back as OrderCancelReject, reason 102, text Unknown order.

Connect it

  1. 1.Add the assembly block under Assembly registration, then restart Obermind Stream.
  2. 2.Paste the provider element into Obermind.XmlProviderManagerSettings, and fill in both passwords, the host, the ports and the comp ids.
  3. 3.Attach an AltId on provider 45 for each symbol, and set price precision from the symbol sheet.
  4. 4.Connect provider 45 on Dash, Providers.
  5. 5.If the Aggregator already has LiquidityProviders set, add 45 or Edgewater there.

LiquidityProviders lives on the Aggregator, in ObermindStream.ObermindSTREAMSettings. It is not part of the provider element.

If that property already lists other venues, append 45. If it is empty, paste the property below.

Leave Edgewater out of SyntheticOrderProviders. The venue accepts market, limit, stop and stop-limit orders, so send them straight through.

Leave VenueTimeInForce empty unless other venues already need it. Empty accepts Day, GTC, IOC, FOK and GTD, and falls back to GTC.

If the property is already set, add 45 with those values and keep the other venues in it.

<Property name="LiquidityProviders">45</Property>

Assembly registration

Register this provider in Obermind Stream Configuration, then restart Obermind Stream. The type is not loaded until that restart.

  • Id 0 uses the id from the class, which is 45.
  • Provider ids are 1 to 99. 100 and up are reserved for internal algos.
  • Only include this provider's assembly block.
<Provider>
  <TypeName>OberMind.EW.EdgewaterProvider, OberMind.EW</TypeName>
  <Name>Edgewater</Name>
  <Id>0</Id>
  <X64>true</X64>
</Provider>

Stream provider XML

Paste this provider element into Obermind.XmlProviderManagerSettings.

  • Replace CLIENT_MD, CLIENT_ORD, EDGE_MD, EDGE_ORD, the host, the ports and ReplaceWithPassword.
  • SenderCompID is ours. TargetCompID is Edgewater's. The venue sheet prints those the other way around.
  • SessionsXml holds both sessions, escaped inside that one property.
  • DealtCurrency stays Base. Leave SettlType empty unless one tenor should go on every message.

After the type is loaded, Dash, Providers, Configuration edits this same element. That screen does not register the assembly.

<provider>
  <id>45</id>
  <instance>1</instance>
  <properties>
    <property name="Enabled">True</property>
    <property name="AutoReconnect">True</property>
    <property name="AutoReconnectInterval">10</property>
    <property name="ConfigFile">FIX\FIX44_EW.cfg</property>
    <property name="DataDictionary">FIX\FIX44_EW.xml</property>
    <property name="DealtCurrency">Base</property>
    <property name="SettlType"></property>
    <property name="LoggingEnabled">True</property>
    <property name="LogPath">%LogsPath%</property>
    <property name="LogMessageFilter"></property>
    <property name="SessionsXml">&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;data schemaVersion="1"&gt;&lt;sessions&gt;&lt;session type="OberMind.EW.EdgewaterSessionInfo, OberMind.EW"&gt;&lt;properties&gt;&lt;property name="Password" type="System.String, System.Private.CoreLib"&gt;ReplaceWithPassword&lt;/property&gt;&lt;property name="Enabled" type="System.Boolean, System.Private.CoreLib"&gt;True&lt;/property&gt;&lt;property name="Description" type="System.String, System.Private.CoreLib"&gt;Quotes&lt;/property&gt;&lt;property name="Type" type="OberMind.FIXBaseProviders.Constants.SessionType, OberMind.FIXBaseProviders"&gt;Price&lt;/property&gt;&lt;property name="SenderCompID" type="System.String, System.Private.CoreLib"&gt;CLIENT_MD&lt;/property&gt;&lt;property name="TargetCompID" type="System.String, System.Private.CoreLib"&gt;EDGE_MD&lt;/property&gt;&lt;property name="SocketConnectHost" type="System.String, System.Private.CoreLib"&gt;visionfx.example.com&lt;/property&gt;&lt;property name="SocketConnectPort" type="System.Int32, System.Private.CoreLib"&gt;14001&lt;/property&gt;&lt;property name="ResetSeqNumFlag" type="System.Boolean, System.Private.CoreLib"&gt;True&lt;/property&gt;&lt;property name="UseSsl" type="System.Boolean, System.Private.CoreLib"&gt;False&lt;/property&gt;&lt;property name="SslValidateCertificates" type="System.Boolean, System.Private.CoreLib"&gt;False&lt;/property&gt;&lt;/properties&gt;&lt;/session&gt;&lt;session type="OberMind.EW.EdgewaterSessionInfo, OberMind.EW"&gt;&lt;properties&gt;&lt;property name="Password" type="System.String, System.Private.CoreLib"&gt;ReplaceWithPassword&lt;/property&gt;&lt;property name="Enabled" type="System.Boolean, System.Private.CoreLib"&gt;True&lt;/property&gt;&lt;property name="Description" type="System.String, System.Private.CoreLib"&gt;Trades&lt;/property&gt;&lt;property name="Type" type="OberMind.FIXBaseProviders.Constants.SessionType, OberMind.FIXBaseProviders"&gt;Order&lt;/property&gt;&lt;property name="SenderCompID" type="System.String, System.Private.CoreLib"&gt;CLIENT_ORD&lt;/property&gt;&lt;property name="TargetCompID" type="System.String, System.Private.CoreLib"&gt;EDGE_ORD&lt;/property&gt;&lt;property name="SocketConnectHost" type="System.String, System.Private.CoreLib"&gt;visionfx.example.com&lt;/property&gt;&lt;property name="SocketConnectPort" type="System.Int32, System.Private.CoreLib"&gt;14002&lt;/property&gt;&lt;property name="ResetSeqNumFlag" type="System.Boolean, System.Private.CoreLib"&gt;False&lt;/property&gt;&lt;property name="UseSsl" type="System.Boolean, System.Private.CoreLib"&gt;False&lt;/property&gt;&lt;property name="SslValidateCertificates" type="System.Boolean, System.Private.CoreLib"&gt;False&lt;/property&gt;&lt;/properties&gt;&lt;/session&gt;&lt;/sessions&gt;&lt;/data&gt;</property>
  </properties>
</provider>

Dash

Dash, Providers lists Edgewater once the assembly is loaded.

The Edgewater tab shows dealt currency, settlement type, the symbols being held, and whether each session is up.

Send orders from the account ticket. Cancels and replaces use that same path.

Disponible en la plataforma Obermind.. FIX 4.4 taker for spot, metals, forwards and NDFs.

Alipay
Stripe
Eurex
AWS
Azure
Google Cloud
Currenex
Velocity Trade
Bitcoin
CME
Interactive Brokers
Kraken
FIX API
XTX
Bloomberg
Binance

Lanza tu plataforma.