Merge branch 'dev'

This commit is contained in:
Viacheslav Demydiuk
2025-10-05 20:59:00 +03:00
6 changed files with 39 additions and 1 deletions
+8
View File
@@ -5,12 +5,18 @@ namespace MtApi5
public class MqlTick
{
public MqlTick(DateTime time, double bid, double ask, double last, ulong volume)
: this(time, bid, ask, last, volume, 0)
{
}
public MqlTick(DateTime time, double bid, double ask, double last, ulong volume, ENUM_TICK_FLAGS flags)
{
MtTime = Mt5TimeConverter.ConvertToMtTime(time);
this.bid = bid;
this.ask = ask;
this.last = last;
this.volume = volume;
this.flags = flags;
}
public MqlTick()
@@ -27,6 +33,7 @@ namespace MtApi5
last = tick.Last;
volume = tick.Volume;
volume_real = tick.VolumeReal;
flags = (ENUM_TICK_FLAGS)tick.Flags;
}
}
@@ -37,6 +44,7 @@ namespace MtApi5
public double last { get; set; } // Price of the last deal (Last)
public ulong volume { get; set; } // Volume for the current Last price
public double volume_real { get; set; } // Volume for the current Last price with greater accuracy
public ENUM_TICK_FLAGS flags { get; set; } // Tick flags (used for analyzing to find out what data have been changed)
public DateTime time => Mt5TimeConverter.ConvertFromMtTime(MtTime);
}
+12
View File
@@ -862,6 +862,18 @@ namespace MtApi5
STO_CLOSECLOSE = 1 //Calculation is based on Close/Close prices
}
[Flags]
public enum ENUM_TICK_FLAGS
{
TICK_FLAG_NONE = 0,
TICK_FLAG_BID = 2, // Tick has changed a Bid price
TICK_FLAG_ASK = 4, // Tick has changed an Ask price
TICK_FLAG_LAST = 8, // Tick has changed the last deal price
TICK_FLAG_VOLUME = 16, // Tick has changed a volume
TICK_FLAG_BUY = 32, // Tick is a result of a buy deal
TICK_FLAG_SELL = 64 // Tick is a result of a sell deal
}
#endregion //Price Constants
#region Smoothing Methods
+1
View File
@@ -8,5 +8,6 @@
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
public uint Flags { get; set; } // Tick flags
}
}
+2 -1
View File
@@ -1071,7 +1071,7 @@ namespace MtApi5TestClient
{
foreach (var v in result)
{
var tickStr = $"time = {v.time}, bid = {v.bid}, ask = {v.ask}, last = {v.last}, volume = {v.volume}";
var tickStr = $"time = {v.time}, bid = {v.bid}, ask = {v.ask}, last = {v.last}, volume = {v.volume}, flags = {v.flags}";
TimeSeriesResults.Add(tickStr);
}
});
@@ -1159,6 +1159,7 @@ namespace MtApi5TestClient
AddLog($"SymbolInfoTick(EURUSD) tick.last = {result.last}");
AddLog($"SymbolInfoTick(EURUSD) tick.volume = {result.volume}");
AddLog($"SymbolInfoTick(EURUSD) tick.volume_real = {result.volume_real}");
AddLog($"SymbolInfoTick(EURUSD) tick.flags = {result.flags}");
}
private async void ExecuteSymbolInfoSessionQuote(object o)
BIN
View File
Binary file not shown.
+16
View File
@@ -3801,6 +3801,21 @@ bool JsonToMqlTradeRequest(JSONObject *jo, MqlTradeRequest& request)
JSONObject* MqlTickToJson(const MqlTick& tick)
{
// MT5 can add some additional non-documented flags, so we need to filter required documented flags only
int summ=0;
if((tick.flags & TICK_FLAG_BID)==TICK_FLAG_BID)
summ+=TICK_FLAG_BID;
if((tick.flags & TICK_FLAG_ASK)==TICK_FLAG_ASK)
summ+=TICK_FLAG_ASK;
if((tick.flags & TICK_FLAG_LAST)==TICK_FLAG_LAST)
summ+=TICK_FLAG_LAST;
if((tick.flags & TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME)
summ+=TICK_FLAG_VOLUME;
if((tick.flags & TICK_FLAG_BUY)==TICK_FLAG_BUY)
summ+=TICK_FLAG_BUY;
if((tick.flags & TICK_FLAG_SELL)==TICK_FLAG_SELL)
summ+=TICK_FLAG_SELL;
JSONObject *jo = new JSONObject();
jo.put("Time", new JSONNumber((long)tick.time));
jo.put("Bid", new JSONNumber(tick.bid));
@@ -3808,6 +3823,7 @@ JSONObject* MqlTickToJson(const MqlTick& tick)
jo.put("Last", new JSONNumber(tick.last));
jo.put("Volume", new JSONNumber(tick.volume));
jo.put("VolumeReal", new JSONNumber(tick.volume_real));
jo.put("Flags", new JSONNumber(summ));
return jo;
}