mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 02:57:56 +00:00
284 lines
8.4 KiB
Matlab
284 lines
8.4 KiB
Matlab
|
|
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
|
||
|
|
|