Skip to content

Commit

Permalink
Add a advanced example
Browse files Browse the repository at this point in the history
It uses its own API which I packed between MTApi5 and MatLab.
Possible that this is useless, but errors from the .NET assembly are more tradable.
  • Loading branch information
xnet-Dev committed Oct 24, 2020
1 parent 9eedf15 commit 76a6216
Show file tree
Hide file tree
Showing 35 changed files with 7,125 additions and 0 deletions.
283 changes: 283 additions & 0 deletions Examples/MatLab/AdvancedExample/+DataStore/@Bars/Bars.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
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

46 changes: 46 additions & 0 deletions Examples/MatLab/AdvancedExample/+DataStore/@Deal/Deal.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
classdef Deal < handle
%DEAL Summary of this class goes here
% Detailed explanation goes here

properties
% Integer
DEAL_TICKET = int32([]); % Das Ticket des Trades. Das ist eine einmalige Nummer, die jedem Trade zugewiesen wird.
DEAL_ORDER = int32([]); % Order, auf deren Grund der Deal abgeschlossen wurde
DEAL_TIME = datetime([],[],[]); % Zeit des Dealabschlusses
DEAL_TIME_MSC = int32([]) % Zeitpunkt der Transaktion in Millisekunden seit 01.01.1970
DEAL_TYPE = MtApi5.ENUM_DEAL_TYPE; % Typ des Deals
DEAL_ENTRY = MtApi5.ENUM_DEAL_ENTRY; % Dealsrichtung - Markteingang, Marktausgang oder Kehrwendung
DEAL_MAGIC = int32([]) % Magic number für Deal (sehen Sie ORDER_MAGIC)
DEAL_REASON = MtApi5.ENUM_DEAL_REASON; % Grund oder Ursprung der Ausführung eines Abschlusses
DEAL_POSITION_ID = int32([]) % Indetifikator der Position, an deren Öffnung, Veränderung oder Schliessung sich der Deal teilnahm. Jede Position hat ihren unikalen Identifikator, der allen Deals zugeordnet wird, die im Instrument innerhalb des ganzen Lebens der Position abgeschlossen wurde.

% Double
DEAL_VOLUME = double([]); % Dealvolumen
DEAL_PRICE = double([]); % Dealpreis
DEAL_COMMISSION = double([]); % Dealkommission
DEAL_SWAP = double([]); % Gesamtswap beim Schliessen
DEAL_PROFIT = double([]); % finanzielles Ergebnis des Deals

% String
DEAL_SYMBOL = char([]); % Dealssymbol
DEAL_COMMENT = char([]); % Kommentar zum Deal
DEAL_EXTERNAL_ID = char([]); % Identifikator des Deals im Außenhandelssystem (an der Börse)

end

methods
function obj = Deal()
% DEAL Construct an instance of this class
% Detailed explanation goes here
% Create an empty Deal Object

end

function outputArg = method1(obj,inputArg)
%METHOD1 Summary of this method goes here
% Detailed explanation goes here
outputArg = obj.Property1 + inputArg;
end
end
end

38 changes: 38 additions & 0 deletions Examples/MatLab/AdvancedExample/+DataStore/@Position/Position.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
classdef Position < handle
%POSITION Summary of this class goes here
% Detailed explanation goes here

properties
POSITION_TIME = datetime([],[],[]);
POSITION_TICKET = int64([]);
POSITION_TIME_MSC = int64([]);
POSITION_TIME_UPDATE = int64([]);
POSITION_TIME_UPDATE_MSC = int64([]);
POSITION_TYPE = MtApi5.ENUM_POSITION_TYPE;
POSITION_MAGIC = int64([]);
POSITION_IDENTIFIER = int64([]);
POSITION_REASON = MtApi5.ENUM_POSITION_REASON;

POSITION_VOLUME = double([]);
POSITION_PRICE_OPEN = double([]);
POSITION_SL = double([]);
POSITION_TP = double([]);
POSITION_PRICE_CURRENT = double([]);
POSITION_SWAP = double([]);
POSITION_PROFIT = double([]);

POSITION_SYMBOL = char([]);
POSITION_COMMENT = char([]);
end

methods
function obj = Position()
%POSITION Construct an instance of this class
% Detailed explanation goes here

end


end
end

29 changes: 29 additions & 0 deletions Examples/MatLab/AdvancedExample/+DataStore/@Tick/Tick.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
classdef Tick < handle
% Tick Summary of this class goes here
% Detailed explanation goes here

properties

sdt_Time; % Zeit des letzten Updates der Preise
d_Bid; % Laufender Preis Bid
d_Ask; % Laufender Preis Ask
d_Last; % Laufender Preis des letzten Deals (Last)
uI_Volume; % Volumen für laufenden Preis Last
I_Time_msc; % Zeit der letzten Aktualisierung der Preise in Millisekunden
I_MtTime; % Zeit der letzten Aktualisierung der Preise
ui_Flags % Tick-Flags


end

methods

function obj = Tick()


end


end
end

Loading

0 comments on commit 76a6216

Please sign in to comment.