mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 19:17:48 +00:00
107 lines
3.3 KiB
Matlab
107 lines
3.3 KiB
Matlab
|
|
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
|