nj4x 2.9.2
dotnet add package nj4x --version 2.9.2
NuGet\Install-Package nj4x -Version 2.9.2
<PackageReference Include="nj4x" Version="2.9.2" />
paket add nj4x --version 2.9.2
#r "nuget: nj4x, 2.9.2"
// Install nj4x as a Cake Addin #addin nuget:?package=nj4x&version=2.9.2 // Install nj4x as a Cake Tool #tool nuget:?package=nj4x&version=2.9.2
NJ4X API – library of access to MetaTrader server for Java and .Net
Terminology
Term | Description |
---|---|
Advisor (EA) | Advisor (Expert Advisor) is mechanical trading system (МТS) |
NJ4X | Java and .Net interface for access to MT4/5 terminal, previous name – JFX API |
NJ4X Server | Socket server (part of Java and .Net interface for access to MT4/5 terminal), which receives connections from MT4/5 terminal and initializes NJ4X strategies |
NJ4X Strategy | Trading strategy, realized via NJ4X API library. Usually it is presented by java-class, inherited from com.jfx.strategy.Strategy or .Net object, inherited from nj4x.Strategy. |
MT4/5 Server | MetaQuotes Software Corp. trading server. MT4/5 server receives trading orders and other requests from trading terminals for further execution |
MT4/5 Terminal | <p>Client MetaTrader 4 terminal is a trader workplace, which allows to work on Forex, CFD and Futures financial markets. </p><p>Java and .Net access interface (NJ4X) launches MT4/5 terminal in background mode and uses it for access to MT4/5 Servers </p> |
MQL4/5 | Programming language by MetaQuotes Software Corp for development of advisors, which interact with MT4/5 trading servers. |
NJ4X Terminal Server | Utility that launches MT4/5 terminals in background mode on request from mechanical trading system, which uses the NJ4X library. |
Overview
NJ4X API is a Java and .Net library for accessing MetaTrader servers using standard MT4/5 terminal. It helps mechanical trading system developers to avoid using MQL4/5 language and to code in their preferred environments. MT4/5 terminal acts as a mediator between MT4/5 Server and the NJ4X program.
NJ4X library allows Java or .Net programs to interact with multiple MT4/5 servers at once. Some benefits are:
- Java/.Net advisors can be developed with any IDE
- Multiple trading accounts can be automated and managed simultaneously.
- Complex trading systems can be well organized. MQL is not suitable for that.
NJ4X API step by step usage guide
- Create Visual Studio project
- Add NJ4X and NLog nuget packages
- Add reference to System.Configuration package:
- Edit App.config file
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
<add key="nj4x_activation_key" value="209084108"/>
<add key="nj4x_mt5_activation_key" value="3546292279"/>
<add key="terminal_host" value="127.0.0.1"/>
<add key="terminal_port" value="7788"/>
<add key="broker" value="MetaQuotes-Demo"/>
<add key="account" value="130240008"/>
<add key="password" value="4ieubwl"/>
<add key="nj4x_server_host" value="127.0.0.1"/>
<add key="nj4x_server_port" value="7778"/>
</appSettings>
</configuration>
- Program.cs
using System;
using System.Configuration;
using nj4x;
using nj4x.Metatrader;
namespace nj4x_p1
{
class Program
{
static void Main(string[] args)
{
// Create strategy
var mt4 = newStrategy();
// Connect to the Terminal Server
mt4.Connect(
ConfigurationManager.AppSettings["terminal_host"],
int.Parse(ConfigurationManager.AppSettings["terminal_port"]),
newBroker(ConfigurationManager.AppSettings["broker"]),
ConfigurationManager.AppSettings["account"],
ConfigurationManager.AppSettings["password"]
);
// Use API methods ...
Console.WriteLine($"Account {mt4.AccountNumber()}");
Console.WriteLine($"Equity {mt4.AccountEquity()}");
//
Console.ReadLine();
}
}
}
Install nj4x-v.n.m.msi (v.n.m -- version number, e. g. nj4x-2.9.0.msi) and run Terminal Server
Getting ticks
for (int i = 0; i < 10; i++)
{
double bid = mt4.Marketinfo( symbol: "EURUSD", type: MarketInfo.MODE_BID);
double ask = mt4.Marketinfo("GBPUSD", MarketInfo.MODE_ASK);
Console.WriteLine($"EURUSD bid={bid}");
Console.WriteLine($"GBPUSD ask={ask}");
Task.Delay(100).Wait();
}
- Placing orders (http://docs.mql4.com/trading/OrderSend)
try
{
var ticket = mt4.OrderSend(
symbol: "EURUSD",
cmd: TradeOperation.OP_SELL,
volume: 0.1, price: bid,
slippage: 2,
stoploss: 0, takeprofit: 0,
comment: "my order",
magic: 0, expiration: MT4.NoExpiration
);
Console.WriteLine($"New order: {ticket}");
}
catch (MT4Exception e)
{
Console.WriteLine($"Order placing error #{e.ErrorCode}: {e.Message}");
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Framework | net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
-
.NETFramework 4.6.2
- Microsoft.Extensions.Configuration (>= 7.0.0)
- Microsoft.Extensions.Configuration.Json (>= 7.0.0)
- NLog (>= 5.1.4)
- System.Configuration.ConfigurationManager (>= 7.0.0)
-
net6.0
- Microsoft.Extensions.Configuration (>= 7.0.0)
- Microsoft.Extensions.Configuration.Json (>= 7.0.0)
- NLog (>= 5.1.4)
- System.Configuration.ConfigurationManager (>= 7.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
2.9.2 | 236 | 2/8/2024 | |
2.9.0 | 396 | 5/29/2023 | |
2.8.9 | 185 | 5/20/2023 | |
2.8.8 | 183 | 5/20/2023 | |
2.8.7 | 197 | 5/19/2023 | |
2.8.6 | 1,569 | 5/13/2019 | |
2.8.5 | 926 | 2/4/2019 | |
2.8.4 | 10,307 | 12/21/2018 | |
2.8.2 | 2,054 | 8/26/2018 | |
2.8.1 | 1,438 | 7/18/2018 | |
2.8.0 | 1,032 | 7/4/2018 | |
2.7.9 | 3,034 | 4/24/2018 | |
2.7.8 | 1,297 | 4/16/2018 | |
2.7.5 | 1,379 | 12/23/2017 | |
2.7.3-beta2 | 792 | 11/9/2017 | |
2.7.3-beta1 | 797 | 10/30/2017 | |
2.7.2-beta | 814 | 10/30/2017 | |
2.7.1 | 1,037 | 10/26/2017 | |
2.7.0 | 1,233 | 8/8/2017 | |
2.6.8 | 1,141 | 5/4/2017 | |
2.6.7 | 1,059 | 4/18/2017 | |
2.6.6 | 1,065 | 4/6/2017 | |
2.6.4-rc1 | 990 | 11/17/2016 | |
2.5.9-rc1 | 872 | 10/23/2016 | |
2.5.6 | 1,497 | 8/15/2016 | |
2.5.4 | 1,184 | 5/17/2016 | |
2.5.0.32 | 1,150 | 2/2/2016 | |
2.5.0.31 | 1,301 | 2/2/2016 | |
2.4.9.6 | 1,218 | 9/10/2015 | |
2.4.9.5 | 1,165 | 9/10/2015 | |
2.4.9.4 | 1,144 | 9/10/2015 | |
2.4.9.3 | 1,145 | 9/10/2015 | |
2.4.9.2 | 1,143 | 9/10/2015 | |
2.4.9.1 | 1,164 | 9/10/2015 | |
2.4.9 | 1,125 | 8/31/2015 | |
2.4.8.2 | 1,110 | 8/20/2015 | |
2.4.8.1 | 1,093 | 8/20/2015 | |
2.4.7 | 1,115 | 8/14/2015 | |
2.4.3 | 1,215 | 7/24/2015 | |
2.4.2.2 | 1,146 | 6/26/2015 | |
2.4.2.1 | 1,089 | 6/26/2015 | |
2.4.2 | 1,139 | 6/18/2015 | |
2.3.9 | 1,063 | 6/8/2015 | |
2.3.6 | 1,174 | 5/27/2015 | |
2.3.5 | 1,121 | 5/15/2015 | |
2.3.4.12 | 1,134 | 5/13/2015 | |
2.3.4.11 | 1,113 | 5/13/2015 | |
2.3.4.10 | 1,089 | 5/12/2015 | |
2.3.4.9 | 1,101 | 5/12/2015 | |
2.3.4.8 | 1,122 | 5/9/2015 | |
2.3.4.7 | 1,269 | 4/20/2015 | |
2.3.4.6 | 1,220 | 4/19/2015 | |
2.3.4.5 | 1,174 | 4/18/2015 | |
2.3.4.4 | 1,163 | 4/18/2015 | |
2.3.4.3 | 1,232 | 4/17/2015 | |
2.3.4.2 | 1,244 | 4/17/2015 | |
2.3.4.1 | 1,154 | 4/17/2015 | |
2.3.4 | 1,152 | 4/17/2015 | |
2.3.3 | 1,379 | 4/9/2015 |
Changes log (**=item modified, ++=item added, --=item removed)
28 May 2023 (2.9.0)
**TS: upgrade launch4j: lookup JRE in %JAVA_HOME%;%PATH%
18 May 2023 (2.8.7)
**NJ4X: upgrade of dependencies; test with latest mt4/5 builds; set jdk11 as a minimum supported java version
05 May 2019 (2.8.6)
**NJ4X-5: ++ fix of Position Listener initialization error at Win Server 2008 platforms.
04 Feb 2019 (2.8.5)
**TS: ++ 'no_gdrive' parameter: if true - no google drive functionality will be used.
**TS: ++ 'terminal.exe' parameter: defines name for the mt4/5 terminal executable (nj4x_term.exe by default)
**NJ4X: -- no more jdk 1.7 support; ++ projects moved to Apache Maven 3.6.0 & JDK 11
**NJ4X-5: Warning! - Balance & Credit orders ticket numbers have been increased by 0x4000000000000000L
19 Dec 2018 (2.8.4)
**TS: ++ workaround presence of Tick Data Suite (https://eareview.net/tick-data-suite) service causing MaxNumberOfTerminalsReached error: terminal.exe process has been renamed.
**EA: ++ use of new MQL4 OnTick method.
02 Oct 2018 (2.8.3)
**NJ4X-5: ++ fix of historical orders selection in SELECT_BY_POS mode; fixed issue with missed orders in PositionListener/MT5.
**NJ4X-5: ++ Strategy.WithMaxBars(<int>) method to keep MT5 terminal memory consumption under control.
26 Aug 2018 (2.8.2)
**NJ4X: ++ fix of automatic trial period false breaking.
**NJ4X: !Interface change WARNING! order magic number: ulong -> long (C#)
**NJ4X-5: ++ fix of hangs in OrdersHistoryTotal() (some scenarios).
**NJ4X-5: ++ fix of OrderGetAll method filtering function.
17 July 2018 (2.8.1)
**NJ4X: -- excessive debug info during terminal connection/disconnection
**NJ4X-5: ++ compression of history folders; ++ ability to download full history
**TS: ++ automatic add-modules=java.xml.ws,java.xml.bind for Java>=9
**TS: ++ spontaneous terminal startup hanging error fix
**TS: ++ GDrive NullPointer error fix
**EA: ++ ability to remove jfx EA chart (and lose terminal connection)
**src project: ++ fix jdk9/10 compilation and javadoc
09 June 2018 (2.8.0)
**NJ4X-5: ++ fix of ordersHistoryTotal()'s "Array out of range" error.
**TS: ++ default cloud storage configuration; ++ cpu usage logging.
24 April 2018 (2.7.9)
**NJ4X: ++ ChartsList method.
24 March 2018 (2.7.8)
**TS: downgrading org.apache.cxf to 3.1.9 (to support java 1.7)
15 March 2018 (2.7.7)
**NJ4X/PL PositionInfo,PositionChangeInfo: live/historical maps, new/closed/deleted/modified order lists made read-only.
**NJ4X: added dummy constructors to Rate, Bar, Tick, TickInfo classes to support serialization.
09 Feb 2018 (2.7.6)
**NJ4X: ++ SeriesInfo method mapping (https://www.mql5.com/en/docs/series/seriesinfointeger)