-
Notifications
You must be signed in to change notification settings - Fork 277
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #216 from KptKuck/dev_matlab_adv_example
Add a advanced MatLab example
- Loading branch information
Showing
37 changed files
with
7,197 additions
and
0 deletions.
There are no files selected for viewing
283 changes: 283 additions & 0 deletions
283
Examples/MatLab/AdvancedExample/+DataStore/@Bars/Bars.m
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
38
Examples/MatLab/AdvancedExample/+DataStore/@Position/Position.m
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
Oops, something went wrong.