Refactored MtApi4 (MT4) for working with new architecture

This commit is contained in:
Viacheslav Demydiuk
2024-06-16 13:57:50 +03:00
parent 6dd5e0190f
commit a830dc11a6
89 changed files with 1648 additions and 2390 deletions
+1 -1
View File
@@ -6,6 +6,6 @@
public int EventId { get; set; }
public long Lparam { get; set; }
public double Dparam { get; set; }
public string Sparam { get; set; }
public string Sparam { get; set; } = string.Empty;
}
}
+2 -1
View File
@@ -4,6 +4,7 @@
{
LastTimeBar = 1,
ChartEvent = 2,
OnLockTicks = 3
OnLockTicks = 3,
OnTick = 4
}
}
+1 -1
View File
@@ -2,6 +2,6 @@
{
internal class OnLockTicksEvent
{
public string Instrument { get; set; }
public string Instrument { get; set; } = string.Empty;
}
}
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
[Flags]
public enum FlagFontStyle
+11
View File
@@ -0,0 +1,11 @@
namespace MtApi
{
public interface IMtLogger
{
void Debug(object message);
void Error(object message);
void Fatal(object message);
void Info(object message);
void Warn(object message);
}
}
+4 -12
View File
@@ -1,22 +1,14 @@
using System;
using System.Collections.Generic;
namespace MtApi.Monitors
namespace MtApi.Monitors
{
public class AvailabilityOrdersEventArgs : EventArgs
public class AvailabilityOrdersEventArgs(List<MtOrder> opened, List<MtOrder> closed) : EventArgs
{
public AvailabilityOrdersEventArgs(List<MtOrder> opened, List<MtOrder> closed)
{
Opened = opened;
Closed = closed;
}
/// <summary>
/// Contains all newly opened orders since the last time the monitor checked the open orders.
/// </summary>
public List<MtOrder> Opened { get; private set; }
public List<MtOrder> Opened { get; private set; } = opened;
/// <summary>
/// Contains all newly closed orders since the last time the monitor checked the open orders.
/// </summary>
public List<MtOrder> Closed { get; private set; }
public List<MtOrder> Closed { get; private set; } = closed;
}
}
+2 -2
View File
@@ -80,8 +80,8 @@ namespace MtApi.Monitors
MonitorTrigger.Stop();
}
}
private void MonitorTriggerRaised(object sender, EventArgs e) => OnTriggerRaised();
private void ApiClientConnectionStateChanged(object sender, MtConnectionEventArgs e)
private void MonitorTriggerRaised(object? sender, EventArgs e) => OnTriggerRaised();
private void ApiClientConnectionStateChanged(object? sender, MtConnectionEventArgs e)
{
if (e.Status == MtConnectionState.Connected)
OnMtConnected();
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Monitors
namespace MtApi.Monitors
{
public class ModifiedOrdersEventArgs : EventArgs
{
@@ -1,16 +1,11 @@
using MtApi.Monitors.Triggers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Monitors
{
public class ModifiedOrdersMonitor : MtMonitorBase
{
#region Fields
private List<MtOrder> _lastOrders = null;
private List<MtOrder>? _lastOrders;
#endregion
@@ -25,7 +20,7 @@ namespace MtApi.Monitors
/// <summary>
/// Will be raised when this monitor detects changes on open orders
/// </summary>
public event EventHandler<ModifiedOrdersEventArgs> OrdersModified;
public event EventHandler<ModifiedOrdersEventArgs>? OrdersModified;
#endregion
#region ctor
@@ -41,7 +36,7 @@ namespace MtApi.Monitors
/// Requests all current open orders
/// </summary>
/// <returns></returns>
private List<MtOrder> GetOrders() => IsMtConnected ? ApiClient.GetOrders(OrderSelectSource.MODE_TRADES) : null;
private List<MtOrder>? GetOrders() => IsMtConnected ? ApiClient.GetOrders(OrderSelectSource.MODE_TRADES) : null;
protected override void OnTriggerRaised()
{
if(_lastOrders == null)
@@ -49,19 +44,23 @@ namespace MtApi.Monitors
_lastOrders = GetOrders();
return;
}
List<MtOrder> currentOrders = GetOrders();
var currentOrders = GetOrders() ?? ([]);
OrderModifiedTypes omt = OrderModifiedTypes;
var mtModifiedOrders = currentOrders
.Select(co => new MtModifiedOrder(_lastOrders.FirstOrDefault(x => x.Ticket == co.Ticket), co))
.ToList();
List<MtModifiedOrder> modifiedOrders = new List<MtModifiedOrder>();
List<MtModifiedOrder> modifiedOrders = new();
modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.TakeProfit)); //If the takeprofit were changed between both calls
modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.StopLoss)); //If the stoploss were changed between both calls
modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.Operation)); //If an order changed from limit / stop order to an open order
if (modifiedOrders.Count > 0)
OrdersModified?.Invoke(this, new ModifiedOrdersEventArgs(modifiedOrders));
_lastOrders = currentOrders;
}
private static IEnumerable<MtModifiedOrder> GetMtModifiedOrdersWithModType(IEnumerable<MtModifiedOrder> orders, OrderModifiedTypes globalSearchFlag, OrderModifiedTypes modifiedType)
=> globalSearchFlag.HasFlag(modifiedType) ? orders.Where(o => o.ModifyType.HasFlag(modifiedType)) : new List<MtModifiedOrder>();
}
@@ -1,21 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Monitors
namespace MtApi.Monitors
{
public class MtModifiedOrder
{
/// <summary>
/// The order in its old state (before the changes)
/// </summary>
public MtOrder OldOrder { get; }
public MtOrder? OldOrder { get; }
/// <summary>
/// The order in its new state (after the changes)
/// </summary>
public MtOrder NewOrder { get; }
public MtOrder? NewOrder { get; }
/// <summary>
/// The changes found by this instance
/// </summary>
@@ -25,7 +19,7 @@ namespace MtApi.Monitors
/// </summary>
/// <param name="oldOrder">The order in its old state (before the changes)</param>
/// <param name="newOrder">The order in its new state (after the changes)</param>
public MtModifiedOrder(MtOrder oldOrder, MtOrder newOrder)
public MtModifiedOrder(MtOrder? oldOrder, MtOrder ?newOrder)
{
if (oldOrder != null && newOrder != null && oldOrder.Ticket != newOrder.Ticket)
throw new ArgumentException(nameof(oldOrder) + " and " + nameof(newOrder) + " need to have the same ticket id");
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Monitors
namespace MtApi.Monitors
{
[Flags]
public enum OrderModifiedTypes
+1 -2
View File
@@ -1,5 +1,4 @@
using System;
using MtApi.Monitors.Triggers;
using MtApi.Monitors.Triggers;
namespace MtApi.Monitors
{
+7 -11
View File
@@ -1,23 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MtApi.Monitors.Triggers;
using MtApi.Monitors.Triggers;
namespace MtApi.Monitors
{
public class TradeMonitor : MtMonitorBase
{
#region Fields
private List<MtOrder> _prevOrders;
private readonly object _locker = new object();
private List<MtOrder>? _prevOrders;
private readonly object _locker = new();
#endregion
#region Events
//
// Summary:
// Occurs when orders are opened or closed.
public event EventHandler<AvailabilityOrdersEventArgs> AvailabilityOrdersChanged;
public event EventHandler<AvailabilityOrdersEventArgs>? AvailabilityOrdersChanged;
#endregion
#region ctor
@@ -73,10 +69,10 @@ namespace MtApi.Monitors
{
var openedOrders = new List<MtOrder>();
var closedOrders = new List<MtOrder>();
List<MtOrder> prevOrders;
List<MtOrder>? prevOrders;
// get current orders from MetaTrader
var tradesOrders = ApiClient.GetOrders(OrderSelectSource.MODE_TRADES);
var tradesOrders = ApiClient.GetOrders(OrderSelectSource.MODE_TRADES) ?? [];
lock (_locker)
prevOrders = _prevOrders;
@@ -92,7 +88,7 @@ namespace MtApi.Monitors
if (closeOrdersTemp.Count > 0)
{
//get closed orders from history with actual values
var historyOrders = ApiClient.GetOrders(OrderSelectSource.MODE_HISTORY);
var historyOrders = ApiClient.GetOrders(OrderSelectSource.MODE_HISTORY) ?? [];
closedOrders = closeOrdersTemp.Where(cot => historyOrders.Find(a => a.Ticket == cot.Ticket) != null).ToList();
}
}
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi.Monitors.Triggers
namespace MtApi.Monitors.Triggers
{
/// <summary>
/// Interface for triggers which can be used to trigger a <see cref="MtMonitorBase"/>.
+3 -5
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi.Monitors.Triggers
namespace MtApi.Monitors.Triggers
{
/// <summary>
/// Raises the <see cref="Raised"/> event if a bar is closed and a new one started.
@@ -23,7 +21,7 @@ namespace MtApi.Monitors.Triggers
/// <summary>
/// Event will be called if the trigger raised.
/// </summary>
public event EventHandler Raised;
public event EventHandler? Raised;
#endregion
#region ctor
@@ -46,7 +44,7 @@ namespace MtApi.Monitors.Triggers
#endregion
#region Private methods
private void _apiClient_OnLastTimeBar(object sender, TimeBarArgs e)
private void _apiClient_OnLastTimeBar(object? sender, TimeBarArgs e)
{
if (_isStarted)
Raised?.Invoke(this, EventArgs.Empty);
@@ -1,12 +1,11 @@
using System;
using System.Timers;
using System.Timers;
namespace MtApi.Monitors.Triggers
{
public class TimeElapsedTrigger : IMonitorTrigger
{
#region Fields
readonly Timer _timer;
readonly System.Timers.Timer _timer;
#endregion
#region Properties
@@ -34,7 +33,7 @@ namespace MtApi.Monitors.Triggers
/// <summary>
/// Returns true if the trigger is started, otherwise false
/// </summary>
public event EventHandler Raised;
public event EventHandler? Raised;
#endregion
#region ctor
@@ -45,7 +44,7 @@ namespace MtApi.Monitors.Triggers
/// <param name="autoReset">If true, the trigger will raise continuosly after elapsed <see cref="Interval"/>, otherwise the trigger will raise only once after elapsed <see cref="Interval"/>.</param>
public TimeElapsedTrigger(TimeSpan time, bool autoReset = true)
{
_timer = new Timer(time.TotalMilliseconds);
_timer = new System.Timers.Timer(time.TotalMilliseconds);
_timer.Elapsed += _timer_Elapsed;
AutoReset = autoReset;
}
@@ -63,7 +62,7 @@ namespace MtApi.Monitors.Triggers
#endregion
#region private methods
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
private void _timer_Elapsed(object? sender, ElapsedEventArgs e)
{
_timer.Elapsed -= _timer_Elapsed;
Raised?.Invoke(this, EventArgs.Empty);
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
public class MqlRates
{
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
public class MqlTick
{
+15 -166
View File
@@ -1,167 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{7A76C388-A8FB-4949-8170-24D4742E934E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MtApi</RootNamespace>
<AssemblyName>MtApi</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\build\products\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\build\products\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ChartEventArgs.cs" />
<Compile Include="ChartPeriod.cs" />
<Compile Include="EnumAlignMode.cs" />
<Compile Include="EnumChartPropertyDouble.cs" />
<Compile Include="EnumChartPropertyInteger.cs" />
<Compile Include="EnumChartPropertyString.cs" />
<Compile Include="EnumColorFormat.cs" />
<Compile Include="EnumObject.cs" />
<Compile Include="EnumObjectPropertyDouble.cs" />
<Compile Include="EnumObjectPropertyInteger.cs" />
<Compile Include="EnumObjectPropertyString.cs" />
<Compile Include="EnumSeriesInfoInteger.cs" />
<Compile Include="EnumSymbolInfoDouble.cs" />
<Compile Include="EnumSymbolInfoInteger.cs" />
<Compile Include="EnumTerminalInfoDouble.cs" />
<Compile Include="EnumTerminalInfoInteger.cs" />
<Compile Include="Events\OnLockTicksEvent.cs" />
<Compile Include="FlagFontStyle.cs" />
<Compile Include="Monitors\AvailabilityOrdersEventArgs.cs" />
<Compile Include="Monitors\OrderModification\ModifiedOrdersEventArgs.cs" />
<Compile Include="Monitors\OrderModification\ModifiedOrdersMonitor.cs" />
<Compile Include="Monitors\OrderModification\MtModifiedOrder.cs" />
<Compile Include="Monitors\MtMonitorBase.cs" />
<Compile Include="Monitors\OrderModification\OrderModifiedTypes.cs" />
<Compile Include="Monitors\Triggers\IMonitorTrigger.cs" />
<Compile Include="Monitors\Triggers\NewBarTrigger.cs" />
<Compile Include="Monitors\Triggers\TimeElapsedTrigger.cs" />
<Compile Include="MqlRates.cs" />
<Compile Include="MqlTick.cs" />
<Compile Include="Events\MtChartEvent.cs" />
<Compile Include="MtConnectionEventArgs.cs" />
<Compile Include="MtConnectionException.cs" />
<Compile Include="MtConnectionState.cs" />
<Compile Include="MtCommandType.cs" />
<Compile Include="MtErrorCode.cs" />
<Compile Include="Events\MtEventTypes.cs" />
<Compile Include="MtExecutionException.cs" />
<Compile Include="MtLockTicksEventArgs.cs" />
<Compile Include="MtOrder.cs" />
<Compile Include="MtQuote.cs" />
<Compile Include="MtQuoteEventArgs.cs" />
<Compile Include="MtSession.cs" />
<Compile Include="MtTimeBar.cs" />
<Compile Include="MtTypes.cs" />
<Compile Include="Monitors\TradeMonitor.cs" />
<Compile Include="PriceConstantsType.cs" />
<Compile Include="MarketInfoModeType.cs" />
<Compile Include="MtApiClient.cs" />
<Compile Include="MtApiColorConverter.cs" />
<Compile Include="OrderSelectMode.cs" />
<Compile Include="OrderSelectSource.cs" />
<Compile Include="Requests\CopyRatesRequest.cs" />
<Compile Include="Requests\GetOrderRequest.cs" />
<Compile Include="Requests\GetOrdersRequest.cs" />
<Compile Include="Requests\ICustomRequest.cs" />
<Compile Include="Requests\OrderCloseByRequest.cs" />
<Compile Include="Requests\OrderCloseRequest.cs" />
<Compile Include="Requests\OrderDeleteRequest.cs" />
<Compile Include="Requests\OrderModifyRequest.cs" />
<Compile Include="Requests\OrderSendRequest.cs" />
<Compile Include="Requests\SeriesInfoIntegerRequest.cs" />
<Compile Include="Requests\SessionRequest.cs" />
<Compile Include="Requests\RequestBase.cs" />
<Compile Include="Requests\RequestType.cs" />
<Compile Include="Requests\SymbolInfoDoubleRequest.cs" />
<Compile Include="Requests\SymbolInfoTickRequest.cs" />
<Compile Include="Responses\CopyRatesResponse.cs" />
<Compile Include="Responses\GetOrderResponse.cs" />
<Compile Include="Responses\GetOrdersResponse.cs" />
<Compile Include="Responses\ICustomResponse.cs" />
<Compile Include="Responses\OrderSendResponse.cs" />
<Compile Include="Responses\SeriesInfoIntegerResponse.cs" />
<Compile Include="Responses\SessionResponse.cs" />
<Compile Include="Responses\ResponseBase.cs" />
<Compile Include="Responses\SymbolInfoDoubleResponse.cs" />
<Compile Include="Responses\SymbolInfoTickResponse.cs" />
<Compile Include="SeriesIdentifier.cs" />
<Compile Include="TimeBarArgs.cs" />
<Compile Include="Monitors\TimeframeTradeMonitor.cs" />
<Compile Include="Monitors\TimerTradeMonitor.cs" />
<Compile Include="TradeOperation.cs" />
<Compile Include="MtApiTimeConverter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MTApiService\MTApiService.csproj">
<Project>{DE76D5C7-B99C-4467-8408-78173BDD84E0}</Project>
<Name>MTApiService</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<VersionPrefix>2.0.0</VersionPrefix>
<BaseOutputPath>$(SolutionDir)build\products</BaseOutputPath>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MtClient\MtClient.csproj" />
</ItemGroup>
</Project>
+1206 -999
View File
File diff suppressed because it is too large Load Diff
+1 -5
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing;
namespace MtApi
{
+3 -8
View File
@@ -1,15 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
class MtApiTimeConverter
{
public static DateTime ConvertFromMtTime(int time)
{
DateTime tmpTime = new DateTime(1970, 1, 1);
DateTime tmpTime = new(1970, 1, 1);
return new DateTime(tmpTime.Ticks + (time * 0x989680L));
}
@@ -18,7 +13,7 @@ namespace MtApi
int result = 0;
if (time != null && time != DateTime.MinValue)
{
DateTime tmpTime = new DateTime(1970, 1, 1);
DateTime tmpTime = new(1970, 1, 1);
result = (int)((time.Value.Ticks - tmpTime.Ticks) / 0x989680L);
}
return result;
+16 -7
View File
@@ -5,13 +5,11 @@
//NoCommand = 0
//trade operations
// OrderSend = 1,
// OrderSendBuy = 1001,
// OrderSendSell = 1002,
// OrderClose = 2,
OrderSend = 1,
OrderClose = 2,
// OrderCloseByCurrentPrice = 152,
// OrderCloseBy = 3,
OrderCloseBy = 3,
OrderClosePrice = 4,
OrderClosePriceByTicket = 1004,
OrderCloseTime = 5,
@@ -136,7 +134,7 @@
iBullsPower = 106,
iCCI = 107,
iCCIOnArray = 108,
//iCustom = 109,
iCustom = 109,
//iCustom_d = 10109,
iDeMarker = 110,
iEnvelopes = 111,
@@ -278,6 +276,17 @@
WindowXOnDropped = 278,
WindowYOnDropped = 279,
ChangeAccount = 280
ChangeAccount = 280,
GetOrder = 282,
GetOrders = 283,
CopyRates = 284,
Session = 285,
SeriesInfoInteger = 286,
SeriesInfoString = 287,
SymbolInfoTick = 288,
SymbolInfoDouble = 289,
GetQuote = 290
}
}
+4 -12
View File
@@ -1,16 +1,8 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtConnectionEventArgs: EventArgs
public class MtConnectionEventArgs(MtConnectionState status, string message) : EventArgs
{
public MtConnectionState Status { get; private set; }
public string ConnectionMessage { get; private set; }
public MtConnectionEventArgs(MtConnectionState status, string message)
{
Status = status;
ConnectionMessage = message;
}
public MtConnectionState Status { get; private set; } = status;
public string ConnectionMessage { get; private set; } = message;
}
}
+3 -5
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtConnectionException: Exception
{
@@ -9,12 +7,12 @@ namespace MtApi
{
}
public MtConnectionException(string message)
public MtConnectionException(string? message)
: this(message, null)
{
}
public MtConnectionException(string message, Exception exception)
public MtConnectionException(string? message, Exception? exception)
: base(message, exception)
{
}
+1 -6
View File
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
public enum MtConnectionState
{
+3 -11
View File
@@ -1,15 +1,7 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtExecutionException: Exception
public class MtExecutionException(MtErrorCode errorCode, string? message) : Exception(message)
{
public MtExecutionException(MtErrorCode errorCode, string message)
:base(message)
{
ErrorCode = errorCode;
}
public MtErrorCode ErrorCode { get; private set; }
public MtErrorCode ErrorCode { get; private set; } = errorCode;
}
}
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtLockTicksEventArgs : EventArgs
{
+3 -5
View File
@@ -1,11 +1,9 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtOrder
{
public int Ticket { get; set; }
public string Symbol { get; set; }
public string Symbol { get; set; } = string.Empty;
public TradeOperation Operation { get; set; }
public double OpenPrice { get; set; }
public double ClosePrice { get; set; }
@@ -13,7 +11,7 @@ namespace MtApi
public int MtOpenTime { get; set; }
public int MtCloseTime { get; set; }
public double Profit { get; set; }
public string Comment { get; set; }
public string Comment { get; set; } = string.Empty;
public double Commission { get; set; }
public int MagicNumber { get; set; }
public double Swap { get; set; }
+8
View File
@@ -0,0 +1,8 @@
namespace MtApi.MtProtocol
{
internal class FuncResult<T>
{
public bool RetVal { get; set; }
public T? Result { get; set; }
}
}
+13
View File
@@ -0,0 +1,13 @@
namespace MtApi.MtProtocol
{
namespace ICustomRequest
{
public enum ParametersType
{
Int = 0,
Double = 1,
String = 2,
Boolean = 3
}
}
}
+12
View File
@@ -0,0 +1,12 @@
namespace MtApi.MtProtocol
{
public class MtTick
{
public double Bid { get; set; } // Current Bid price
public double Ask { get; set; } // Current Ask price
public long Time { get; set; } // Time of the last prices update
public double Last { get; set; } // Price of the last deal (Last)
public ulong Volume { get; set; } // Volume for the current Last price
public double VolumeReal { get; set; } // Volume for the current Last price with greater accuracy
}
}
+9
View File
@@ -0,0 +1,9 @@
namespace MtApi.MtProtocol
{
internal class MtRpcQuote
{
public MtTick? Tick { get; set; }
public string? Instrument { get; set; }
public int ExpertHandle { get; set; }
}
}
+10
View File
@@ -0,0 +1,10 @@
namespace MtApi.MtProtocol
{
internal class Response<T>
{
public int ErrorCode { get; set; }
public string? ErrorMessage { get; set; }
public T? Value { get; set; }
}
}
+6 -9
View File
@@ -2,10 +2,10 @@
{
public class MtQuote
{
public string Instrument { get; private set; }
public double Bid { get; private set; }
public double Ask { get; private set; }
public int ExpertHandle { get; private set; }
public string Instrument { get; set; } = string.Empty;
public double Bid { get; set; }
public double Ask { get; set; }
public int ExpertHandle { get; set; }
public MtQuote(string instrument, double bid, double ask)
{
@@ -14,12 +14,9 @@
Ask = ask;
}
internal MtQuote(MTApiService.MtQuote quote)
public MtQuote()
{
Instrument = quote.Instrument;
Bid = quote.Bid;
Ask = quote.Ask;
ExpertHandle = quote.ExpertHandle;
}
}
}
+3 -10
View File
@@ -1,14 +1,7 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtQuoteEventArgs : EventArgs
public class MtQuoteEventArgs(MtQuote quote) : EventArgs
{
public MtQuote Quote { get; private set; }
public MtQuoteEventArgs(MtQuote quote)
{
Quote = quote;
}
public MtQuote Quote { get; private set; } = quote;
}
}
+8
View File
@@ -0,0 +1,8 @@
namespace MtApi
{
public class MtQuotesEventArgs(IEnumerable<MtQuote> quotes) : EventArgs
{
public IEnumerable<MtQuote> Quotes { get; } = quotes;
}
}
+2 -4
View File
@@ -1,10 +1,8 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtSession
{
public string Symbol { get; set; }
public string? Symbol { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public uint Index { get; set; }
public int MtFromTime { get; set; }
+2 -4
View File
@@ -1,10 +1,8 @@
using System;
namespace MtApi
namespace MtApi
{
public class MtTimeBar
{
public string Symbol { get; set; }
public string Symbol { get; set; } = string.Empty;
public int MtOpenTime { get; set; }
public int MtCloseTime { get; set; }
public double Open { get; set; }
+1 -3
View File
@@ -1,6 +1,4 @@
// ReSharper disable InconsistentNaming
namespace MtApi
namespace MtApi
{
public enum ENUM_TERMINAL_INFO_STRING
{
+1 -6
View File
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
public enum OrderSelectMode
{
+1 -6
View File
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
public enum OrderSelectSource
{
+1 -6
View File
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
public enum PriceConstantsType
{
-36
View File
@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MtApi")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("DW")]
[assembly: AssemblyProduct("MtApi")]
[assembly: AssemblyCopyright("Copyright © DW 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("650e3c56-dbce-45d4-a844-94bbe9f9a3bf")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.43.0")]
[assembly: AssemblyFileVersion("1.0.43.0")]
-43
View File
@@ -1,43 +0,0 @@
namespace MtApi.Requests
{
internal abstract class CopyRatesRequestBase : RequestBase
{
public enum CopyRatesTypeEnum
{
CopyRates_1 = 1,
CopyRates_2 = 2,
CopyRates_3 = 3,
}
public override RequestType RequestType => RequestType.CopyRates;
public abstract CopyRatesTypeEnum CopyRatesType { get; }
public string SymbolName { get; set; }
public ENUM_TIMEFRAMES Timeframe { get; set; }
}
internal class CopyRates1Request : CopyRatesRequestBase
{
public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_1;
public int StartPos { get; set; }
public int Count { get; set; }
}
internal class CopyRates2Request : CopyRatesRequestBase
{
public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_2;
public int StartTime { get; set; }
public int Count { get; set; }
}
internal class CopyRates3Request : CopyRatesRequestBase
{
public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_3;
public int StartTime { get; set; }
public int StopTime { get; set; }
}
}
-11
View File
@@ -1,11 +0,0 @@
namespace MtApi.Requests
{
internal class GetOrderRequest: RequestBase
{
public int Index { get; set; }
public int Select { get; set; }
public int Pool { get; set; }
public override RequestType RequestType => RequestType.GetOrder;
}
}
-9
View File
@@ -1,9 +0,0 @@
namespace MtApi.Requests
{
internal class GetOrdersRequest: RequestBase
{
public int Pool { get; set; }
public override RequestType RequestType => RequestType.GetOrders;
}
}
-25
View File
@@ -1,25 +0,0 @@
using System.Collections;
namespace MtApi.Requests
{
internal class ICustomRequest : RequestBase
{
public enum ParametersType
{
Int = 0,
Double = 1,
String = 2,
Boolean = 3
}
public string Symbol { get; set; }
public int Timeframe { get; set; }
public string Name { get; set; }
public int Mode { get; set; }
public int Shift { get; set; }
public ArrayList Params { get; set; }
public ParametersType ParamsType { get; set; }
public override RequestType RequestType => RequestType.iCustom;
}
}
-12
View File
@@ -1,12 +0,0 @@
namespace MtApi.Requests
{
internal class OrderCloseByRequest: RequestBase
{
public int Ticket { get; set; }
public int Opposite { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType => RequestType.OrderCloseBy;
}
}
-14
View File
@@ -1,14 +0,0 @@
namespace MtApi.Requests
{
internal class OrderCloseRequest: RequestBase
{
public int Ticket { get; set; }
public double? Lots { get; set; }
public double? Price { get; set; }
public int? Slippage { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType => RequestType.OrderClose;
}
}
-11
View File
@@ -1,11 +0,0 @@
namespace MtApi.Requests
{
internal class OrderDeleteRequest: RequestBase
{
public int Ticket { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType => RequestType.OrderDelete;
}
}
-15
View File
@@ -1,15 +0,0 @@
namespace MtApi.Requests
{
internal class OrderModifyRequest: RequestBase
{
public int Ticket { get; set; }
public double Price { get; set; }
public double Stoploss { get; set; }
public double Takeprofit { get; set; }
public int Expiration { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType => RequestType.OrderModify;
}
}
-20
View File
@@ -1,20 +0,0 @@
namespace MtApi.Requests
{
internal class OrderSendRequest: RequestBase
{
public string Symbol { get; set; }
public int Cmd { get; set; }
public double Volume { get; set; }
public double? Price { get; set; }
public int? Slippage { get; set; }
public double? Stoploss { get; set; }
public double? Takeprofit { get; set; }
public string Comment { get; set; }
public int? Magic { get; set; }
public int? Expiration { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType => RequestType.OrderSend;
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MtApi.Requests
{
internal abstract class RequestBase
{
public abstract RequestType RequestType { get; }
}
}
-20
View File
@@ -1,20 +0,0 @@
namespace MtApi.Requests
{
internal enum RequestType
{
Unknown = 0,
GetOrder = 1,
GetOrders = 2,
OrderSend = 3,
OrderClose = 4,
OrderCloseBy = 5,
OrderDelete = 6,
OrderModify = 7,
iCustom = 8,
CopyRates = 9,
Session = 10,
SeriesInfoInteger = 11,
SymbolInfoDouble = 12,
SymbolInfoTick = 13
}
}
@@ -1,11 +0,0 @@
namespace MtApi.Requests
{
internal class SeriesInfoIntegerRequest: RequestBase
{
public override RequestType RequestType => RequestType.SeriesInfoInteger;
public string SymbolName { get; set; }
public int Timeframe { get; set; }
public int PropId { get; set; }
}
}
-14
View File
@@ -1,14 +0,0 @@
using System;
namespace MtApi.Requests
{
internal class SessionRequest : RequestBase
{
public string Symbol { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public int SessionIndex { get; set; }
public SessionType SessionType { get; set; }
public override RequestType RequestType => RequestType.Session;
}
}
-12
View File
@@ -1,12 +0,0 @@
using System;
namespace MtApi.Requests
{
internal class SymbolInfoDoubleRequest : RequestBase
{
public override RequestType RequestType => RequestType.SymbolInfoDouble;
public string SymbolName { get; set; }
public int PropId { get; set; }
}
}
-9
View File
@@ -1,9 +0,0 @@
namespace MtApi.Requests
{
internal class SymbolInfoTickRequest: RequestBase
{
public override RequestType RequestType => RequestType.SymbolInfoTick;
public string Symbol { get; set; }
}
}
-9
View File
@@ -1,9 +0,0 @@
using System.Collections.Generic;
namespace MtApi.Responses
{
internal class CopyRatesResponse: ResponseBase
{
public List<MqlRates> Rates { get; set; }
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class GetOrderResponse: ResponseBase
{
public MtOrder Order { get; set; }
}
}
-9
View File
@@ -1,9 +0,0 @@
using System.Collections.Generic;
namespace MtApi.Responses
{
internal class GetOrdersResponse: ResponseBase
{
public List<MtOrder> Orders { get; set; }
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class ICustomResponse: ResponseBase
{
public double Value { get; set; }
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class OrderSendResponse: ResponseBase
{
public int Ticket { get; set; }
}
}
-8
View File
@@ -1,8 +0,0 @@
namespace MtApi.Responses
{
internal class ResponseBase
{
public int ErrorCode { get; set; }
public string ErrorMessage { get; set; }
}
}
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class SeriesInfoIntegerResponse: ResponseBase
{
public long Value { get; set; }
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class SessionResponse : ResponseBase
{
public MtSession Session { get; set; }
}
}
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class SymbolInfoDoubleResponse: ResponseBase
{
public double Value { get; set; }
}
}
@@ -1,7 +0,0 @@
namespace MtApi.Responses
{
internal class SymbolInfoTickResponse: ResponseBase
{
public MqlTick Tick { get; set; }
}
}
+1 -6
View File
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MtApi
namespace MtApi
{
public enum SeriesIdentifier
{
+1 -3
View File
@@ -1,6 +1,4 @@
using System;
namespace MtApi
namespace MtApi
{
public class TimeBarArgs: EventArgs
{
Regular → Executable
View File