forked from vdemydiuk/mtapi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestClient.m
More file actions
107 lines (75 loc) · 3.28 KB
/
Copy pathTestClient.m
File metadata and controls
107 lines (75 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
function TestClient
% Main program
% interfaces to the MT5 client
% receives price data from MT5 via .NET interface
% recieives history bars from MT5
ordersend_ok = false;
[output_figH,output_listH] = NT_CreateOutputWindow('Test OutputWindow ',[400,400,800,200]);
NT_TextToOutputWindow(output_listH,'Startup ...');
[Trades_figH,Trades_listH] = NT_CreateOutputWindow('Trades OutputWindow ',[400,800,800,200]);
NT_TextToOutputWindow(Trades_listH,'Startup Trades Window ...');
[Events_figH,Events_listH] = NT_CreateOutputWindow('Events OutputWindow ',[400,1200,800,200]);
NT_TextToOutputWindow(Events_listH,'Startup Events Window ...');
format short
MTApi5_dll_Location = 'C:\Program Files\MtApi5\MtApi5.dll';
%% Connect to .NET
asm1 = NET.addAssembly (MTApi5_dll_Location);
NT_TextToOutputWindow(output_listH,'MtApi5.dll loaded ...');
%% Open the Metatrader Link via .NET
MT5 = ConnectToMT5_Api; % creates the MT5 object
MT5.setOutputWindowHandle(Events_listH) % copy output window pointer to listener
MT5.setConnectionListener; % create connection listener
MT5.setQuoteListener; % create quote listener
MT5.setQuoteAddedListener; % create quote added listener
port = 8301;
addr = '127.0.0.1';
MT5.startMT5(addr,port); % establishes .NET connection
NT_TextToOutputWindow(output_listH,'Setup Mt5Api ...');
while MT5.h.ConnectionState ~= MtApi5.Mt5ConnectionState.Connected
pause(0.01);
NT_TextToOutputWindow(output_listH,'Waiting for Connection....');
end
NT_TextToOutputWindow(output_listH,'Connected ...');
%% Test SymbolsTotal
text_to = sprintf('Symbols= %d ', MT5.SymbolsTotal(true));
NT_TextToOutputWindow(output_listH,text_to);
%% Test AccountInfo
text_to = sprintf('Balance = %d \n',MT5.AccountInfoDouble(MtApi5.ENUM_ACCOUNT_INFO_DOUBLE.ACCOUNT_BALANCE));
NT_TextToOutputWindow(output_listH,text_to);
%% Test OrderSend
request = MtApi5.MqlTradeRequest;
tick = MtApi5.MqlTick;
% [tick] = MT5.SymbolInfoTick('EURUSD');
request.Action = MtApi5.ENUM_TRADE_REQUEST_ACTIONS.TRADE_ACTION_DEAL;
request.Symbol = 'EURUSD';
request.Deviation = 30;
request.Volume = 0.01; %% Account MIN 10000 !
request.Type = MtApi5.ENUM_ORDER_TYPE.ORDER_TYPE_BUY;
request.Price = tick.ask;
try
[ordersend_ok,result] = MT5.OrderSend(request);
catch exception
text_to = sprintf('NET Error in OrderSend = %s\n ',exception.message);
NT_TextToOutputWindow(Trades_listH,text_to);
end
if (ordersend_ok)
text_to = sprintf('OrderSend OK \n');
NT_TextToOutputWindow(Trades_listH,text_to);
text_to = sprintf('Result: %s \n',char(result.ToString));
NT_TextToOutputWindow(Trades_listH,text_to);
else
text_to = sprintf('OrderSend ERROR \n');
NT_TextToOutputWindow(Trades_listH,text_to);
end
%% while not pressed 0
while true
pause(0.1);
prompt = 'Press 0 key to stop\n';
x = input(prompt);
if (x == 0)
break;
end
end
MT5.stopMT5;
fprintf('Connection Stopped \n');
end