Files
mtapi/Examples/MatLab/AdvancedExample/+DataStore/@Bars/Bars.m
T

284 lines
8.4 KiB
Matlab
Raw Normal View History

2020-10-24 10:14:58 +02:00
classdef Bars < handle
%BARS Summary of this class goes here
% Detailed explanation goes here
properties
chSymbol = 'EURUSD' ;
iSize = int32(0) ;
iLast = int32(0) ;
sStart = "" ;
sEnd = "" ;
sdtStart = System.DateTime.Now;
sdtEnd = System.DateTime.Now;
enTimeframe = MtApi5.ENUM_TIMEFRAMES;
mqlRates = NET.createArray('MtApi5.MqlRates', 0);
sdOpen = NET.createArray('System.Double[]', 3) ;
sdHigh = NET.createArray('System.Double[]', 3) ;
sdLow = NET.createArray('System.Double[]', 3) ;
sdClose = NET.createArray('System.Double[]', 3) ;
sdtTime = NET.createArray('System.DateTime[]', 3) ;
si32Spread = NET.createArray('System.Int32[]', 3) ;
si64TickVolume = NET.createArray('System.Int64[]', 3) ;
si64RealVolume = NET.createArray('System.Int64[]', 3) ;
si64RealVolumeH = NET.createArray('System.Int64[]', 3) ;
si64RealVolumeL = NET.createArray('System.Int64[]', 3) ;
dOpen = double(0);
dHigh = double(0);
dLow = double(0);
dClose = double(0);
i64MTtime = int64(0) ;
dtTime = datetime();
i32Spread = int32(0) ;
i64TickVol = int64(0) ;
i64RealVol = int64(0) ;
i64RealVolH = int64(0) ;
i64RealVolL = int64(0) ;
end
methods
function obj = Bars(chSymbol,enTF,iSize)
switch nargin
case 0
obj.chSymbol = 'EURUSD';
obj.iSize = 1000;
obj.enTimeframe = MtApi5.ENUM_TIMEFRAMES.PERIOD_M1;
return
case 1
case 2
case 3
obj.chSymbol = chSymbol;
obj.iSize = iSize;
obj.enTimeframe = enTF;
otherwise
end
obj.mqlRates = NET.createArray('MtApi5.MqlRates', obj.iSize);
obj.sdOpen = NET.createArray('System.Double', obj.iSize);
obj.sdHigh = NET.createArray('System.Double', obj.iSize);
obj.sdLow = NET.createArray('System.Double', obj.iSize);
obj.sdClose = NET.createArray('System.Double', obj.iSize);
obj.sdtTime = NET.createArray('System.DateTime', obj.iSize);
obj.si32Spread = NET.createArray('System.Int32', obj.iSize);
obj.si64TickVolume = NET.createArray('System.Int64', obj.iSize);
obj.si64RealVolume = NET.createArray('System.Int64', obj.iSize);
obj.sdtStart = System.DateTime.Now;
obj.sdtEnd = System.DateTime.Now;
obj.sStart = char(obj.sdtStart.ToString);
obj.sEnd = char(obj.sdtStart.ToString);
obj.enTimeframe = enTF;
obj.dOpen = zeros(obj.iSize,1,'double') ;
obj.dHigh = zeros(obj.iSize,1,'double') ;
obj.dLow = zeros(obj.iSize,1,'double') ;
obj.dClose = zeros(obj.iSize,1,'double') ;
obj.i32Spread = zeros(obj.iSize,1,'int32') ;
obj.i64TickVol = zeros(obj.iSize,1,'int64') ;
obj.i64RealVol = zeros(obj.iSize,1,'int64') ;
obj.i64RealVolH = zeros(obj.iSize,1,'int64') ;
obj.i64RealVolL = zeros(obj.iSize,1,'int64') ;
obj.i64MTtime = zeros(obj.iSize,1,'int64') ;
obj.dtTime(iSize,1) = datetime;
obj.dtTime.Format = 'default';
end
function setMqlRates(self,MqlRates)
self.MqlRates = MqlRates;
end
function saveDataAsByteStream(self,filename)
mc = ?DataStore.Bars;
propList = mc.PropertyList;
propCnt = length(propList);
for i=1:1:propCnt
bytestream.(propList(i).Name) = [];
end
formatter = System.Runtime.Serialization.Formatters.Binary.BinaryFormatter;
for idx=1:1:propCnt
if isa(propList(idx).DefaultValue,'System.Object')
stream = System.IO.MemoryStream;
formatter.Serialize(stream,self.(propList(idx).Name));
data = uint8(stream.ToArray);
bytestream.(propList(idx).Name) = data;
else
% stream = System.IO.MemoryStream;
% formatter.Serialize(stream,self.(propList(idx).Name));
% data = uint8(stream.ToArray);
bytestream.(propList(idx).Name) = self.(propList(idx).Name);
end
end
save(filename,'bytestream');
end
function ok = loadDataAsByteStream(self,filename)
ok = false;
load(filename);
mc = ?DataStore.Bars;
propList = mc.PropertyList;
propCnt = length(propList);
formatter = System.Runtime.Serialization.Formatters.Binary.BinaryFormatter;
for idx=1:1:propCnt
if isa(propList(idx).DefaultValue,'System.Object')
data = bytestream.(propList(idx).Name);
stream = System.IO.MemoryStream(data);
self.(propList(idx).Name) = formatter.Deserialize(stream);
else
data = bytestream.(propList(idx).Name);
self.(propList(idx).Name) = data;
end
end
ok = true;
end
function saveableData = Get_Saveable_MATfileData(self,varargin)
switch nargin
case 1 % no options
first = 1;
last = self.iLast;
case 2 % first = 1 , last = input
first = 1;
last = varargin{2};
case 3
first = varargin{1};
last = varargin{2};
end
if last > self.iLast
last = self.iLast;
warn('Index is out of array')
warn('Using iLast for last')
end
saveableData.chSymbol = self.chSymbol;
saveableData.iSize = self.iLast;
saveableData.iLast = self.iLast;
saveableData.sStart = self.sStart;
saveableData.sEnd = self.sEnd;
saveableData.dOpen = self.dOpen(first:last,1);
saveableData.dHigh = self.dHigh(first:last,1);
saveableData.dLow = self.dLow(first:last,1);
saveableData.dClose = self.dClose(first:last,1);
saveableData.dtTime = self.dtTime(first:last,1);
saveableData.i64MTtime = self.i64MTtime(first:last,1);
saveableData.i32Spread = self.i32Spread(first:last,1);
saveableData.i64TickVol = self.i64TickVol(first:last,1);
saveableData.i64RealVol = self.i64RealVol(first:last,1);
end
function tt= Get_TimeTable(self,varargin)
switch nargin
case 1 % no options
first = 1;
last = self.iLast;
case 2 % first = 1 , last = input
first = 1;
last = varargin{2};
case 3
first = varargin{1};
last = varargin{2};
end
if last > self.iLast
last = self.iLast;
warn('Index is out of array')
warn('Using iLast for last')
end
Open = self.dOpen(first:last,1);
High = self.dHigh(first:last,1);
Low = self.dLow(first:last,1);
Close = self.dClose(first:last,1);
Time = self.dtTime(first:last,1);
TicklVol = self.i64TickVol(first:last,1);
tt = timetable(Time,Open,High,Low,Close,TicklVol);
tt.Properties.VariableNames = {'Open','High','Low','Close','TickVol'};
end
end
end