2018-02-19 17:02:19 +02:00
// ReSharper disable InconsistentNaming
using System ;
2016-05-10 17:56:39 +03:00
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Windows ;
using MtApi5 ;
using System.Collections.ObjectModel ;
2016-10-06 14:04:17 +03:00
using System.Globalization ;
2016-10-17 11:57:54 +03:00
using System.Threading.Tasks ;
2018-03-11 19:26:25 -03:00
using System.IO ;
2018-03-12 11:17:12 -03:00
using Microsoft.Win32 ;
2016-05-10 17:56:39 +03:00
namespace MtApi5TestClient
{
public class ViewModel : INotifyPropertyChanged
{
#region Commands
public DelegateCommand ConnectCommand { get ; private set ; }
public DelegateCommand DisconnectCommand { get ; private set ; }
public DelegateCommand OrderSendCommand { get ; private set ; }
2018-02-19 17:02:19 +02:00
public DelegateCommand OrderCheckCommand { get ; private set ; }
2018-03-08 17:45:22 +02:00
public DelegateCommand PositionGetTicketCommand { get ; private set ; }
2018-02-19 17:02:19 +02:00
2018-02-04 14:39:09 +02:00
public DelegateCommand HistoryOrderGetIntegerCommand { get ; private set ; }
2018-01-11 15:28:57 +02:00
public DelegateCommand HistoryDealGetDoubleCommand { get ; private set ; }
public DelegateCommand HistoryDealGetIntegerCommand { get ; private set ; }
public DelegateCommand HistoryDealGetStringCommand { get ; private set ; }
2018-02-08 18:04:15 +02:00
public DelegateCommand HistoryDealMethodsCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand AccountInfoDoubleCommand { get ; private set ; }
public DelegateCommand AccountInfoIntegerCommand { get ; private set ; }
public DelegateCommand AccountInfoStringCommand { get ; private set ; }
2018-03-12 22:37:06 -03:00
public DelegateCommand TerminalInfoDoubleCommand { get ; private set ; }
public DelegateCommand TerminalInfoIntegerCommand { get ; private set ; }
public DelegateCommand TerminalInfoStringCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand CopyRatesCommand { get ; private set ; }
public DelegateCommand CopyTimesCommand { get ; private set ; }
public DelegateCommand CopyOpenCommand { get ; private set ; }
public DelegateCommand CopyHighCommand { get ; private set ; }
public DelegateCommand CopyLowCommand { get ; private set ; }
public DelegateCommand CopyCloseCommand { get ; private set ; }
2018-02-26 18:21:44 +02:00
public DelegateCommand IndicatorCreateCommand { get ; private set ; }
public DelegateCommand IndicatorReleaseCommand { get ; private set ; }
2020-08-26 21:06:26 +03:00
public DelegateCommand iCustomCommand { get ; private set ; }
public DelegateCommand iBullsPowerCommand { get ; private set ; }
public DelegateCommand iBearsPowerCommand { get ; private set ; }
public DelegateCommand BarsCalculatedCommand { get ; private set ; }
public DelegateCommand CopyBufferCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand CopyTickVolumeCommand { get ; private set ; }
public DelegateCommand CopyRealVolumeCommand { get ; private set ; }
public DelegateCommand CopySpreadCommand { get ; private set ; }
2016-11-05 00:52:52 +02:00
public DelegateCommand CopyTicksCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand SymbolsTotalCommand { get ; private set ; }
public DelegateCommand SymbolNameCommand { get ; private set ; }
public DelegateCommand SymbolSelectCommand { get ; private set ; }
public DelegateCommand SymbolIsSynchronizedCommand { get ; private set ; }
public DelegateCommand SymbolInfoDoubleCommand { get ; private set ; }
public DelegateCommand SymbolInfoIntegerCommand { get ; private set ; }
public DelegateCommand SymbolInfoStringCommand { get ; private set ; }
2018-03-13 11:40:16 +02:00
public DelegateCommand SymbolInfoString2Command { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand SymbolInfoTickCommand { get ; private set ; }
public DelegateCommand SymbolInfoSessionQuoteCommand { get ; private set ; }
public DelegateCommand SymbolInfoSessionTradeCommand { get ; private set ; }
2016-10-06 14:04:17 +03:00
public DelegateCommand MarketBookAddCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
public DelegateCommand MarketBookReleaseCommand { get ; private set ; }
2016-10-06 14:04:17 +03:00
public DelegateCommand MarketBookGetCommand { get ; private set ; }
public DelegateCommand PositionOpenCommand { get ; private set ; }
2018-06-04 17:48:14 +03:00
public DelegateCommand PositionCloseCommand { get ; private set ; }
2018-06-06 14:24:39 +03:00
public DelegateCommand PositionCloseAllCommand { get ; private set ; }
2020-10-13 14:14:59 +03:00
public DelegateCommand BuyCommand { get ; private set ; }
public DelegateCommand SellCommand { get ; private set ; }
2016-10-21 17:52:54 +03:00
2018-03-09 19:18:54 +02:00
public DelegateCommand GetLastErrorCommand { get ; private set ; }
public DelegateCommand ResetLastErrorCommand { get ; private set ; }
2016-10-21 17:52:54 +03:00
public DelegateCommand PrintCommand { get ; private set ; }
2018-03-13 18:24:40 +02:00
public DelegateCommand AlertCommand { get ; private set ; }
2019-05-04 10:36:46 +03:00
public DelegateCommand TesterStopCommand { get ; private set ; }
2018-02-19 11:07:37 +02:00
2018-02-19 18:48:31 +02:00
public DelegateCommand TimeCurrentCommand { get ; private set ; }
2018-03-11 19:26:25 -03:00
public DelegateCommand ChartOpenCommand { get ; private set ; }
2018-03-13 17:28:21 +02:00
public DelegateCommand ChartTimePriceToXYCommand { get ; private set ; }
public DelegateCommand ChartXYToTimePriceCommand { get ; private set ; }
2018-03-11 19:26:25 -03:00
public DelegateCommand ChartApplyTemplateCommand { get ; private set ; }
2018-03-12 23:08:04 -03:00
public DelegateCommand ChartSaveTemplateCommand { get ; private set ; }
2018-03-19 16:23:55 +02:00
public DelegateCommand ChartIdCommand { get ; private set ; }
2020-10-25 19:20:44 +02:00
public DelegateCommand ChartIdByExpertHandleCommand { get ; private set ; }
2018-03-19 16:23:55 +02:00
public DelegateCommand ChartRedrawCommand { get ; private set ; }
2018-03-19 17:23:16 +02:00
public DelegateCommand ChartWindowFindCommand { get ; private set ; }
public DelegateCommand ChartCloseCommand { get ; private set ; }
2018-03-19 18:39:15 +02:00
public DelegateCommand ChartPeriodCommand { get ; private set ; }
public DelegateCommand ChartSetDoubleCommand { get ; private set ; }
2018-03-19 18:58:12 +02:00
public DelegateCommand ChartSetIntegerCommand { get ; private set ; }
public DelegateCommand ChartSetStringCommand { get ; private set ; }
2018-03-19 19:10:51 +02:00
public DelegateCommand ChartGetDoubleCommand { get ; private set ; }
public DelegateCommand ChartGetIntegerCommand { get ; private set ; }
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
public DelegateCommand ChartNavigateCommand { get ; private set ; }
2018-03-27 10:22:16 +03:00
public DelegateCommand ChartIndicatorAddCommand { get ; private set ; }
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
public DelegateCommand ChartIndicatorDeleteCommand { get ; private set ; }
2018-03-27 10:22:16 +03:00
public DelegateCommand ChartIndicatorGetCommand { get ; private set ; }
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
public DelegateCommand ChartIndicatorNameCommand { get ; private set ; }
public DelegateCommand ChartIndicatorsTotalCommand { get ; private set ; }
public DelegateCommand ChartWindowOnDroppedCommand { get ; private set ; }
public DelegateCommand ChartPriceOnDroppedCommand { get ; private set ; }
public DelegateCommand ChartTimeOnDroppedCommand { get ; private set ; }
public DelegateCommand ChartXOnDroppedCommand { get ; private set ; }
public DelegateCommand ChartYOnDroppedCommand { get ; private set ; }
public DelegateCommand ChartSetSymbolPeriodCommand { get ; private set ; }
public DelegateCommand ChartScreenShotCommand { get ; private set ; }
2018-03-11 19:26:25 -03:00
2018-02-19 18:48:31 +02:00
public DelegateCommand TimeTradeServerCommand { get ; private set ; }
public DelegateCommand TimeLocalCommand { get ; private set ; }
public DelegateCommand TimeGMTCommand { get ; private set ; }
2018-06-04 13:53:55 +03:00
public DelegateCommand GlobalVariableCheckCommand { get ; private set ; }
public DelegateCommand GlobalVariableTimeCommand { get ; private set ; }
public DelegateCommand GlobalVariableDelCommand { get ; private set ; }
public DelegateCommand GlobalVariableGetCommand { get ; private set ; }
public DelegateCommand GlobalVariableNameCommand { get ; private set ; }
public DelegateCommand GlobalVariableSetCommand { get ; private set ; }
public DelegateCommand GlobalVariablesFlushCommand { get ; private set ; }
public DelegateCommand GlobalVariableTempCommand { get ; private set ; }
public DelegateCommand GlobalVariableSetOnConditionCommand { get ; private set ; }
public DelegateCommand GlobalVariablesDeleteAllCommand { get ; private set ; }
public DelegateCommand GlobalVariablesTotalCommand { get ; private set ; }
2018-06-05 19:19:35 +03:00
public DelegateCommand UnlockTicksCommand { get ; private set ; }
2016-05-10 17:56:39 +03:00
#endregion
#region Properties
2016-10-06 14:04:17 +03:00
private Mt5ConnectionState _connectionState ;
2016-05-10 17:56:39 +03:00
public Mt5ConnectionState ConnectionState
{
2016-10-06 14:04:17 +03:00
get { return _connectionState ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_connectionState = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "ConnectionState" );
}
}
2016-10-06 14:04:17 +03:00
private string _connectionMessage ;
2016-05-10 17:56:39 +03:00
public string ConnectionMessage
{
2016-10-06 14:04:17 +03:00
get { return _connectionMessage ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_connectionMessage = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "ConnectionMessage" );
}
}
2016-10-06 14:04:17 +03:00
private string _host ;
2016-05-10 17:56:39 +03:00
public string Host
{
2016-10-06 14:04:17 +03:00
get { return _host ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_host = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "Host" );
}
}
2016-10-06 14:04:17 +03:00
private int _port ;
2016-05-10 17:56:39 +03:00
public int Port
{
2016-10-06 14:04:17 +03:00
get { return _port ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_port = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "Port" );
}
}
2016-10-06 14:04:17 +03:00
public ObservableCollection < QuoteViewModel > Quotes { get ; } = new ObservableCollection < QuoteViewModel >();
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
private QuoteViewModel _selectedQuote ;
2016-05-10 17:56:39 +03:00
public QuoteViewModel SelectedQuote
{
2016-10-06 14:04:17 +03:00
get { return _selectedQuote ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_selectedQuote = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "SelectedQuote" );
OnSelectedQuoteChanged ();
}
}
2016-10-06 14:04:17 +03:00
public ObservableCollection < string > History { get ; } = new ObservableCollection < string >();
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
public ObservableCollection < MqlTradeRequestViewModel > TradeRequests { get ; } = new ObservableCollection < MqlTradeRequestViewModel >();
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
private MqlTradeRequestViewModel _tradeRequest ;
2016-05-10 17:56:39 +03:00
public MqlTradeRequestViewModel TradeRequest
{
2016-10-06 14:04:17 +03:00
get { return _tradeRequest ; }
2016-05-10 17:56:39 +03:00
set
{
2016-10-06 14:04:17 +03:00
_tradeRequest = value ;
2016-05-10 17:56:39 +03:00
OnPropertyChanged ( "TradeRequest" );
}
}
public ENUM_ACCOUNT_INFO_DOUBLE AccountInfoDoublePropertyId { get ; set ; }
public ENUM_ACCOUNT_INFO_INTEGER AccountInfoIntegerPropertyId { get ; set ; }
public ENUM_ACCOUNT_INFO_STRING AccountInfoStringPropertyId { get ; set ; }
2018-03-12 22:37:06 -03:00
public ENUM_TERMINAL_INFO_DOUBLE TerminalInfoDoublePropertyId { get ; set ; }
public ENUM_TERMINAL_INFO_INTEGER TerminalInfoIntegerPropertyId { get ; set ; }
public ENUM_TERMINAL_INFO_STRING TerminalInfoStringPropertyId { get ; set ; }
2016-05-10 17:56:39 +03:00
public TimeSeriesValueViewModel TimeSeriesValues { get ; set ; }
2016-10-06 14:04:17 +03:00
public ObservableCollection < string > TimeSeriesResults { get ; } = new ObservableCollection < string >();
2016-10-21 17:52:54 +03:00
private string _messageText = "Print some text in MetaTrader expert console" ;
public string MessageText
{
get { return _messageText ; }
set
{
_messageText = value ;
OnPropertyChanged ( "MessageText" );
}
}
2018-03-13 17:28:21 +02:00
private string _chartFunctionsSymbolValue = "EURUSD" ;
public string ChartFunctionsSymbolValue
{
get { return _chartFunctionsSymbolValue ; }
set
{
_chartFunctionsSymbolValue = value ;
OnPropertyChanged ( "ChartFunctionsSymbolValue" );
}
}
2018-03-19 16:23:55 +02:00
private long _chartFunctionsChartIdValue ;
public long ChartFunctionsChartIdValue
{
get { return _chartFunctionsChartIdValue ; }
set
{
_chartFunctionsChartIdValue = value ;
OnPropertyChanged ( "ChartFunctionsChartIdValue" );
}
}
2018-06-04 13:53:55 +03:00
private string _globalVarName ;
public string GlobalVarName
{
get { return _globalVarName ; }
set
{
_globalVarName = value ;
OnPropertyChanged ( "GlobalVarName" );
}
}
private double _globalVarValue ;
public double GlobalVarValue
{
get { return _globalVarValue ; }
set
{
_globalVarValue = value ;
OnPropertyChanged ( "GlobalVarValue" );
}
}
2018-06-04 17:48:14 +03:00
private ulong _positionTicketValue ;
public ulong PositionTicketValue
{
get { return _positionTicketValue ; }
set
{
_positionTicketValue = value ;
OnPropertyChanged ( "PositionTicketValue" );
}
}
2016-05-10 17:56:39 +03:00
#endregion
#region Public Methods
public ViewModel ()
{
// Init MtApi client
2016-10-06 14:04:17 +03:00
_mtApiClient = new MtApi5Client ();
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
_mtApiClient . ConnectionStateChanged += mMtApiClient_ConnectionStateChanged ;
_mtApiClient . QuoteAdded += mMtApiClient_QuoteAdded ;
_mtApiClient . QuoteRemoved += mMtApiClient_QuoteRemoved ;
2018-03-19 15:10:09 +02:00
_mtApiClient . QuoteUpdate += mMtApiClient_QuoteUpdate ;
2018-03-01 11:20:12 +02:00
_mtApiClient . OnTradeTransaction += mMtApiClient_OnTradeTransaction ;
2018-03-02 11:43:03 +02:00
_mtApiClient . OnBookEvent += _mtApiClient_OnBookEvent ;
2018-06-06 12:46:24 +03:00
_mtApiClient . OnLastTimeBar += _mtApiClient_OnLastTimeBar ;
_mtApiClient . OnLockTicks += _mtApiClient_OnLockTicks ;
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
ConnectionState = _mtApiClient . ConnectionState ;
2016-05-10 17:56:39 +03:00
ConnectionMessage = "Disconnected" ;
Port = 8228 ; //default local port
InitCommands ();
var request = new MqlTradeRequest { Action = ENUM_TRADE_REQUEST_ACTIONS . TRADE_ACTION_DEAL
, Type = ENUM_ORDER_TYPE . ORDER_TYPE_BUY
, Volume = 0.1
, Comment = "Test Trade Request"
};
TradeRequest = new MqlTradeRequestViewModel ( request );
2016-10-06 14:04:17 +03:00
TimeSeriesValues = new TimeSeriesValueViewModel { Count = 100 };
2016-05-10 17:56:39 +03:00
}
public void Close ()
{
2016-10-06 14:04:17 +03:00
_mtApiClient . BeginDisconnect ();
2016-05-10 17:56:39 +03:00
}
#endregion
#region Private Methods
private void InitCommands ()
{
ConnectCommand = new DelegateCommand ( ExecuteConnect , CanExecuteConnect );
DisconnectCommand = new DelegateCommand ( ExecuteDisconnect , CanExecuteDisconnect );
OrderSendCommand = new DelegateCommand ( ExecuteOrderSend );
2018-02-19 17:02:19 +02:00
OrderCheckCommand = new DelegateCommand ( ExecuteOrderCheck );
2018-03-08 17:45:22 +02:00
PositionGetTicketCommand = new DelegateCommand ( ExecutePositionGetTicket );
2018-02-19 17:02:19 +02:00
2018-02-04 14:39:09 +02:00
HistoryOrderGetIntegerCommand = new DelegateCommand ( ExecuteHistoryOrderGetInteger );
2018-01-11 15:28:57 +02:00
HistoryDealGetDoubleCommand = new DelegateCommand ( ExecuteHistoryDealGetDouble );
HistoryDealGetIntegerCommand = new DelegateCommand ( ExecuteHistoryDealGetInteger );
HistoryDealGetStringCommand = new DelegateCommand ( ExecuteHistoryDealGetString );
2018-02-08 18:04:15 +02:00
HistoryDealMethodsCommand = new DelegateCommand ( ExecuteHistoryDealMethods );
2016-05-10 17:56:39 +03:00
AccountInfoDoubleCommand = new DelegateCommand ( ExecuteAccountInfoDouble );
AccountInfoIntegerCommand = new DelegateCommand ( ExecuteAccountInfoInteger );
AccountInfoStringCommand = new DelegateCommand ( ExecuteAccountInfoString );
2018-03-12 22:37:06 -03:00
TerminalInfoDoubleCommand = new DelegateCommand ( ExecuteTerminalInfoDouble );
TerminalInfoIntegerCommand = new DelegateCommand ( ExecuteTerminalInfoInteger );
TerminalInfoStringCommand = new DelegateCommand ( ExecuteTerminalInfoString );
2016-05-10 17:56:39 +03:00
CopyRatesCommand = new DelegateCommand ( ExecuteCopyRates );
CopyTimesCommand = new DelegateCommand ( ExecuteCopyTime );
CopyOpenCommand = new DelegateCommand ( ExecuteCopyOpen );
CopyHighCommand = new DelegateCommand ( ExecuteCopyHigh );
CopyLowCommand = new DelegateCommand ( ExecuteCopyLow );
CopyCloseCommand = new DelegateCommand ( ExecuteCopyClose );
2018-02-26 18:21:44 +02:00
IndicatorCreateCommand = new DelegateCommand ( ExecuteIndicatorCreate );
IndicatorReleaseCommand = new DelegateCommand ( ExecuteIndicatorRelease );
2020-08-26 21:06:26 +03:00
iCustomCommand = new DelegateCommand ( ExecuteICustom );
iBullsPowerCommand = new DelegateCommand ( ExecuteIBullsPowerCommand );
iBearsPowerCommand = new DelegateCommand ( ExecuteIBearsPowerCommand );
BarsCalculatedCommand = new DelegateCommand ( ExecuteBarsCalculatedCommand );
CopyBufferCommand = new DelegateCommand ( ExecuteCopyBufferCommand );
2016-05-10 17:56:39 +03:00
CopyTickVolumeCommand = new DelegateCommand ( ExecuteCopyTickVolume );
CopyRealVolumeCommand = new DelegateCommand ( ExecuteCopyRealVolume );
CopySpreadCommand = new DelegateCommand ( ExecuteCopySpread );
2016-11-05 00:52:52 +02:00
CopyTicksCommand = new DelegateCommand ( ExecuteCopyTicks );
2016-05-10 17:56:39 +03:00
SymbolsTotalCommand = new DelegateCommand ( ExecuteSymbolsTotal );
SymbolNameCommand = new DelegateCommand ( ExecuteSymbolName );
SymbolSelectCommand = new DelegateCommand ( ExecuteSymbolSelect );
SymbolIsSynchronizedCommand = new DelegateCommand ( ExecuteSymbolIsSynchronized );
SymbolInfoDoubleCommand = new DelegateCommand ( ExecuteSymbolInfoDouble );
SymbolInfoIntegerCommand = new DelegateCommand ( ExecuteSymbolInfoInteger );
SymbolInfoStringCommand = new DelegateCommand ( ExecuteSymbolInfoString );
2018-03-13 11:40:16 +02:00
SymbolInfoString2Command = new DelegateCommand ( ExecuteSymbolInfoString2 );
2016-05-10 17:56:39 +03:00
SymbolInfoTickCommand = new DelegateCommand ( ExecuteSymbolInfoTick );
SymbolInfoSessionQuoteCommand = new DelegateCommand ( ExecuteSymbolInfoSessionQuote );
SymbolInfoSessionTradeCommand = new DelegateCommand ( ExecuteSymbolInfoSessionTrade );
MarketBookAddCommand = new DelegateCommand ( ExecuteMarketBookAdd );
MarketBookReleaseCommand = new DelegateCommand ( ExecuteMarketBookRelease );
2016-10-06 14:04:17 +03:00
MarketBookGetCommand = new DelegateCommand ( ExecuteMarketBookGet );
PositionOpenCommand = new DelegateCommand ( ExecutePositionOpen );
2018-06-04 17:48:14 +03:00
PositionCloseCommand = new DelegateCommand ( ExecutePositionClose );
2018-06-06 14:24:39 +03:00
PositionCloseAllCommand = new DelegateCommand ( ExecutePositionCloseAll );
2020-10-13 14:14:59 +03:00
BuyCommand = new DelegateCommand ( ExecuteBuy );
SellCommand = new DelegateCommand ( ExecuteSell );
2016-10-21 17:52:54 +03:00
PrintCommand = new DelegateCommand ( ExecutePrint );
2018-03-13 18:24:40 +02:00
AlertCommand = new DelegateCommand ( ExecuteAlert );
2018-03-09 19:18:54 +02:00
GetLastErrorCommand = new DelegateCommand ( ExecuteGetLastError );
ResetLastErrorCommand = new DelegateCommand ( ExecuteResetLastError );
2019-05-04 10:36:46 +03:00
TesterStopCommand = new DelegateCommand ( ExecuteTesterStop );
2018-02-19 11:07:37 +02:00
2018-03-11 19:26:25 -03:00
ChartOpenCommand = new DelegateCommand ( ExecuteChartOpen );
2018-03-13 17:28:21 +02:00
ChartTimePriceToXYCommand = new DelegateCommand ( ExecuteChartTimePriceToXY );
ChartXYToTimePriceCommand = new DelegateCommand ( ExecuteChartXYToTimePrice );
2018-03-11 19:26:25 -03:00
ChartApplyTemplateCommand = new DelegateCommand ( ExecuteChartApplyTemplate );
2018-03-12 23:08:04 -03:00
ChartSaveTemplateCommand = new DelegateCommand ( ExecuteChartSaveTemplate );
2018-03-19 16:23:55 +02:00
ChartIdCommand = new DelegateCommand ( ExecuteChartId );
2020-10-25 19:20:44 +02:00
ChartIdByExpertHandleCommand = new DelegateCommand ( ExecuteChartIdByExpertHandle );
2018-03-19 16:23:55 +02:00
ChartRedrawCommand = new DelegateCommand ( ExecuteChartRedraw );
2018-03-19 17:23:16 +02:00
ChartWindowFindCommand = new DelegateCommand ( ExecuteChartWindowFind );
ChartCloseCommand = new DelegateCommand ( ExecuteChartClose );
2018-03-19 18:39:15 +02:00
ChartPeriodCommand = new DelegateCommand ( ExecuteChartPeriod );
ChartSetDoubleCommand = new DelegateCommand ( ExecuteChartSetDouble );
2018-03-19 18:58:12 +02:00
ChartSetIntegerCommand = new DelegateCommand ( ExecuteChartSetInteger );
ChartSetStringCommand = new DelegateCommand ( ExecuteChartSetString );
2018-03-19 19:10:51 +02:00
ChartGetDoubleCommand = new DelegateCommand ( ExecuteChartGetDouble );
ChartGetIntegerCommand = new DelegateCommand ( ExecuteChartGetInteger );
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
ChartNavigateCommand = new DelegateCommand ( ExecuteChartNavigate );
2018-03-27 10:22:16 +03:00
ChartIndicatorAddCommand = new DelegateCommand ( ExecuteChartIndicatorAdd );
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
ChartIndicatorDeleteCommand = new DelegateCommand ( ExecuteChartIndicatorDelete );
2018-03-27 10:22:16 +03:00
ChartIndicatorGetCommand = new DelegateCommand ( ExecuteChartIndicatorGet );
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
ChartIndicatorNameCommand = new DelegateCommand ( ExecuteChartIndicatorName );
ChartIndicatorsTotalCommand = new DelegateCommand ( ExecuteChartIndicatorsTotal );
ChartWindowOnDroppedCommand = new DelegateCommand ( ExecuteChartWindowOnDropped );
ChartPriceOnDroppedCommand = new DelegateCommand ( ExecuteChartPriceOnDropped );
ChartTimeOnDroppedCommand = new DelegateCommand ( ExecuteChartTimeOnDropped );
ChartXOnDroppedCommand = new DelegateCommand ( ExecuteChartXOnDropped );
ChartYOnDroppedCommand = new DelegateCommand ( ExecuteChartYOnDropped );
ChartSetSymbolPeriodCommand = new DelegateCommand ( ExecuteChartSetSymbolPeriod );
ChartScreenShotCommand = new DelegateCommand ( ExecuteChartScreenShot );
2018-03-11 19:26:25 -03:00
2018-02-19 18:48:31 +02:00
TimeCurrentCommand = new DelegateCommand ( ExecuteTimeCurrent );
TimeTradeServerCommand = new DelegateCommand ( ExecuteTimeTradeServer );
TimeLocalCommand = new DelegateCommand ( ExecuteTimeLocal );
TimeGMTCommand = new DelegateCommand ( ExecuteTimeGMT );
2018-06-04 13:53:55 +03:00
GlobalVariableCheckCommand = new DelegateCommand ( ExecuteGlobalVariableCheck );
GlobalVariableTimeCommand = new DelegateCommand ( ExecuteGlobalVariableTime );
GlobalVariableDelCommand = new DelegateCommand ( ExecuteGlobalVariableDel );
GlobalVariableGetCommand = new DelegateCommand ( ExecuteGlobalVariableGet );
GlobalVariableNameCommand = new DelegateCommand ( ExecuteGlobalVariableName );
GlobalVariableSetCommand = new DelegateCommand ( ExecuteGlobalVariableSet );
GlobalVariablesFlushCommand = new DelegateCommand ( ExecuteGlobalVariablesFlush );
GlobalVariableTempCommand = new DelegateCommand ( ExecuteGlobalVariableTemp );
GlobalVariableSetOnConditionCommand = new DelegateCommand ( ExecuteGlobalVariableSetOnCondition );
GlobalVariablesDeleteAllCommand = new DelegateCommand ( ExecuteGlobalVariablesDeleteAll );
GlobalVariablesTotalCommand = new DelegateCommand ( ExecuteGlobalVariablesTotal );
2018-06-05 19:19:35 +03:00
UnlockTicksCommand = new DelegateCommand ( ExecuteUnlockTicks );
2016-05-10 17:56:39 +03:00
}
private bool CanExecuteConnect ( object o )
{
return ConnectionState == Mt5ConnectionState . Disconnected || ConnectionState == Mt5ConnectionState . Failed ;
}
private void ExecuteConnect ( object o )
{
if ( string . IsNullOrEmpty ( Host ))
{
2016-10-06 14:04:17 +03:00
_mtApiClient . BeginConnect ( Port );
2016-05-10 17:56:39 +03:00
}
else
{
2016-10-06 14:04:17 +03:00
_mtApiClient . BeginConnect ( Host , Port );
2016-05-10 17:56:39 +03:00
}
}
private bool CanExecuteDisconnect ( object o )
{
return ConnectionState == Mt5ConnectionState . Connected ;
}
private void ExecuteDisconnect ( object o )
{
2016-10-06 14:04:17 +03:00
_mtApiClient . BeginDisconnect ();
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteOrderSend ( object o )
2016-05-10 17:56:39 +03:00
{
var request = TradeRequest . GetMqlTradeRequest ();
2018-02-17 00:10:10 +02:00
MqlTradeResult result = null ;
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() =>
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var ok = _mtApiClient . OrderSend ( request , out result );
2018-02-17 00:10:10 +02:00
return ok ;
2016-10-17 11:57:54 +03:00
});
2016-05-10 17:56:39 +03:00
2018-02-19 17:02:19 +02:00
var message = retVal ? $"OrderSend: success. {result}" : $"OrderSend: fail. {result}" ;
AddLog ( message );
}
private async void ExecuteOrderCheck ( object obj )
{
var request = TradeRequest . GetMqlTradeRequest ();
MqlTradeCheckResult result = null ;
var retVal = await Execute (() =>
{
var ok = _mtApiClient . OrderCheck ( request , out result );
return ok ;
});
var message = retVal ? $"OrderCheck: success. {result}" : $"OrderCheck: fail. {result}" ;
2016-10-17 11:57:54 +03:00
AddLog ( message );
2016-05-10 17:56:39 +03:00
}
2018-03-08 17:45:22 +02:00
private async void ExecutePositionGetTicket ( object obj )
{
const int index = 0 ;
var retVal = await Execute (() =>
{
var ok = _mtApiClient . PositionGetTicket ( index );
return ok ;
});
var message = $"PositionGetTicket: result = {retVal}" ;
AddLog ( message );
}
2018-02-04 14:39:09 +02:00
private async void ExecuteHistoryOrderGetInteger ( object o )
{
const ulong ticket = 12345 ;
const ENUM_ORDER_PROPERTY_INTEGER propertyId = ENUM_ORDER_PROPERTY_INTEGER . ORDER_POSITION_ID ;
var retVal = await Execute (() => _mtApiClient . HistoryOrderGetInteger ( ticket , propertyId ));
AddLog ( $"HistoryOrderGetInteger: {retVal}" );
}
2018-01-11 15:28:57 +02:00
private async void ExecuteHistoryDealGetDouble ( object o )
{
const ulong ticket = 12345 ;
const ENUM_DEAL_PROPERTY_DOUBLE propertyId = ENUM_DEAL_PROPERTY_DOUBLE . DEAL_PROFIT ;
var retVal = await Execute (() => _mtApiClient . HistoryDealGetDouble ( ticket , propertyId ));
AddLog ( $"HistoryDealGetDouble: {retVal}" );
}
private async void ExecuteHistoryDealGetInteger ( object o )
{
const ulong ticket = 12345 ;
const ENUM_DEAL_PROPERTY_INTEGER propertyId = ENUM_DEAL_PROPERTY_INTEGER . DEAL_TICKET ;
var retVal = await Execute (() => _mtApiClient . HistoryDealGetInteger ( ticket , propertyId ));
AddLog ( $"HistoryDealGetInteger: {retVal}" );
}
private async void ExecuteHistoryDealGetString ( object o )
{
const ulong ticket = 12345 ;
const ENUM_DEAL_PROPERTY_STRING propertyId = ENUM_DEAL_PROPERTY_STRING . DEAL_SYMBOL ;
var retVal = await Execute (() => _mtApiClient . HistoryDealGetString ( ticket , propertyId ));
AddLog ( $"HistoryDealGetString: {retVal}" );
}
2018-02-08 18:04:15 +02:00
private async void ExecuteHistoryDealMethods ( object o )
{
try
{
2018-02-19 17:02:19 +02:00
var posId = await Execute (() => _mtApiClient . PositionGetInteger ( ENUM_POSITION_PROPERTY_INTEGER . POSITION_IDENTIFIER ));
var history = await Execute (() => _mtApiClient . HistorySelectByPosition ( posId ));
var historyDealsTotal = await Execute (() => _mtApiClient . HistoryDealsTotal ());
var histDealTicket = await Execute (() => _mtApiClient . HistoryDealGetTicket ( 0 ));
var histDealPrice = await Execute (() => _mtApiClient . HistoryDealGetDouble ( histDealTicket , ENUM_DEAL_PROPERTY_DOUBLE . DEAL_PRICE ));
2018-02-08 18:04:15 +02:00
}
catch ( Exception ex )
{
AddLog ( ex . Message );
return ;
}
AddLog ( "ExecuteHistoryDealMethods: success." );
}
2016-10-17 11:57:54 +03:00
private async void ExecuteAccountInfoDouble ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = await Execute (() => _mtApiClient . AccountInfoDouble ( AccountInfoDoublePropertyId ));
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var message = $"AccountInfoDouble: property_id = {AccountInfoDoublePropertyId}; result = {result}" ;
AddLog ( message );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteAccountInfoInteger ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = await Execute (() => _mtApiClient . AccountInfoInteger ( AccountInfoIntegerPropertyId ));
2016-05-10 17:56:39 +03:00
2018-03-12 22:37:06 -03:00
var message = $"AccountInfoInteger: property_id = {AccountInfoIntegerPropertyId}; result = {result}" ;
2016-10-17 11:57:54 +03:00
AddLog ( message );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteAccountInfoString ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = await Execute (() => _mtApiClient . AccountInfoString ( AccountInfoStringPropertyId ));
2016-05-10 17:56:39 +03:00
2018-03-12 22:37:06 -03:00
var message = $"AccountInfoString: property_id = {AccountInfoStringPropertyId}; result = {result}" ;
AddLog ( message );
}
private async void ExecuteTerminalInfoDouble ( object o )
{
var result = await Execute (() => _mtApiClient . TerminalInfoDouble ( TerminalInfoDoublePropertyId ));
var message = $"TerminalInfoDouble: property_id = {TerminalInfoDoublePropertyId}; result = {result}" ;
AddLog ( message );
}
private async void ExecuteTerminalInfoInteger ( object o )
{
var result = await Execute (() => _mtApiClient . TerminalInfoInteger ( TerminalInfoIntegerPropertyId ));
var message = $"TerminalInfoInteger: property_id = {TerminalInfoIntegerPropertyId}; result = {result}" ;
AddLog ( message );
}
private async void ExecuteTerminalInfoString ( object o )
{
var result = await Execute (() => _mtApiClient . TerminalInfoString ( TerminalInfoStringPropertyId ));
var message = $"TerminalInfoString: property_id = {TerminalInfoStringPropertyId}; result = {result}" ;
2016-10-17 11:57:54 +03:00
AddLog ( message );
2016-05-10 17:56:39 +03:00
}
2018-03-12 22:37:06 -03:00
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyTime ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
var result = await Execute (() =>
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
DateTime [] array ;
var count = _mtApiClient . CopyTime ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyTime: result is null" );
return ;
}
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var time in result )
{
TimeSeriesResults . Add ( time . ToString ( CultureInfo . CurrentCulture ));
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
});
AddLog ( "CopyTime: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyOpen ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
var result = await Execute (() =>
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
double [] array ;
var count = _mtApiClient . CopyOpen ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyOpen: result is null" );
return ;
}
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var open in result )
{
TimeSeriesResults . Add ( open . ToString ( CultureInfo . CurrentCulture ));
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
});
AddLog ( "CopyOpen: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyHigh ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
TimeSeriesResults . Clear ();
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
double [] array ;
2016-10-06 14:04:17 +03:00
var count = _mtApiClient . CopyHigh ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
2016-10-17 11:57:54 +03:00
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyHigh: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ( CultureInfo . CurrentCulture ));
}
});
AddLog ( "CopyHigh: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyLow ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
double [] array ;
2016-10-06 14:04:17 +03:00
var count = _mtApiClient . CopyLow ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
2016-10-17 11:57:54 +03:00
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyLow: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ( CultureInfo . CurrentCulture ));
}
});
AddLog ( "CopyLow: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyClose ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
TimeSeriesResults . Clear ();
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
double [] array ;
2016-10-17 11:57:54 +03:00
var count = _mtApiClient . CopyClose ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame ,
TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyClose: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ( CultureInfo . CurrentCulture ));
}
});
AddLog ( "CopyClose: success" );
2016-05-10 17:56:39 +03:00
}
2018-02-26 18:21:44 +02:00
private async void ExecuteIndicatorCreate ( object o )
{
var parameters = new List < MqlParam >
{
new MqlParam
{
DataType = ENUM_DATATYPE . TYPE_INT ,
2018-02-27 18:26:37 +02:00
IntegerValue = 12
2018-02-26 18:21:44 +02:00
},
new MqlParam
{
DataType = ENUM_DATATYPE . TYPE_INT ,
2018-02-27 18:26:37 +02:00
IntegerValue = 26
},
new MqlParam
{
DataType = ENUM_DATATYPE . TYPE_INT ,
IntegerValue = 9
2018-02-26 18:21:44 +02:00
},
new MqlParam
{
DataType = ENUM_DATATYPE . TYPE_INT ,
IntegerValue = ( int ) ENUM_APPLIED_PRICE . PRICE_CLOSE
}
};
2018-03-01 11:20:12 +02:00
var retVal = await Execute (() =>
_mtApiClient . IndicatorCreate ( TimeSeriesValues . SymbolValue ,
TimeSeriesValues . TimeFrame , TimeSeriesValues . IndicatorType , parameters ));
2018-02-27 18:26:37 +02:00
TimeSeriesValues . IndicatorHandle = retVal ;
2018-02-26 18:21:44 +02:00
AddLog ( $"IndicatorCreate [IND_MA]: result - {retVal}" );
}
private async void ExecuteIndicatorRelease ( object o )
{
2018-02-27 18:26:37 +02:00
var indicatorHandle = TimeSeriesValues . IndicatorHandle ;
2018-02-26 18:21:44 +02:00
var retVal = await Execute (() => _mtApiClient . IndicatorRelease ( indicatorHandle ));
2018-02-27 18:26:37 +02:00
AddLog ( $"IndicatorRelease [{indicatorHandle}]: result - {retVal}" );
2018-02-26 18:21:44 +02:00
}
2020-08-26 21:06:26 +03:00
private async void ExecuteICustom ( object o )
{
const string name = @"Examples\Custom Moving Average" ;
int [] parameters = { 0 , 21 , ( int ) ENUM_APPLIED_PRICE . PRICE_CLOSE };
var retVal = await Execute (() => _mtApiClient . iCustom ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , name , parameters ));
TimeSeriesValues . IndicatorHandle = retVal ;
AddLog ( $"Custom Moving Average: result - {retVal}" );
}
private async void ExecuteIBullsPowerCommand ( object o )
{
const int maPeriod = 13 ;
var retVal = await Execute (() => _mtApiClient . iBullsPower ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , maPeriod ));
TimeSeriesValues . IndicatorHandle = retVal ;
AddLog ( $"iBullPower: result - {retVal}" );
}
private async void ExecuteIBearsPowerCommand ( object o )
{
const int maPeriod = 13 ;
var retVal = await Execute (() => _mtApiClient . iBearsPower ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , maPeriod ));
TimeSeriesValues . IndicatorHandle = retVal ;
AddLog ( $"iBearsPower: result - {retVal}" );
}
private async void ExecuteBarsCalculatedCommand ( object o )
{
var retVal = await Execute (() => _mtApiClient . BarsCalculated ( TimeSeriesValues . IndicatorHandle ));
AddLog ( $"BarsCalculated: result - {retVal}" );
}
private async void ExecuteCopyBufferCommand ( object o )
{
TimeSeriesResults . Clear ();
var result = await Execute (() =>
{
var count = _mtApiClient . CopyBuffer ( TimeSeriesValues . IndicatorHandle , 0 , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out var values );
return count > 0 ? values : null ;
});
if ( result == null )
{
AddLog ( "CopyRates: result is null" );
return ;
}
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( $"{value:F6}" );
}
});
AddLog ( "CopyRates: success" );
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyRates ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
var result = await Execute (() =>
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
MqlRates [] array ;
var count = _mtApiClient . CopyRates ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame , TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyRates: result is null" );
return ;
}
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var rates in result )
{
TimeSeriesResults . Add (
2018-06-04 15:04:12 +03:00
$"time={rates.time}; mt_time={rates.mt_time}; open={rates.open}; high={rates.high}; low={rates.low}; close={rates.close}; tick_volume={rates.tick_volume}; spread={rates.spread}; real_volume={rates.tick_volume}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
});
AddLog ( "CopyRates: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyTickVolume ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
long [] array ;
2016-10-17 11:57:54 +03:00
var count = _mtApiClient . CopyTickVolume ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame ,
TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyTickVolume: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ());
}
});
AddLog ( "CopyTickVolume: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopyRealVolume ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
TimeSeriesResults . Clear ();
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
long [] array ;
2016-10-17 11:57:54 +03:00
var count = _mtApiClient . CopyRealVolume ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame ,
TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopyRealVolume: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ());
}
});
AddLog ( "CopyRealVolume: success" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteCopySpread ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var result = await Execute (() =>
{
2016-05-10 17:56:39 +03:00
int [] array ;
2016-10-17 11:57:54 +03:00
var count = _mtApiClient . CopySpread ( TimeSeriesValues . SymbolValue , TimeSeriesValues . TimeFrame ,
TimeSeriesValues . StartPos , TimeSeriesValues . Count , out array );
return count > 0 ? array : null ;
});
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "CopySpread: result is null" );
return ;
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
RunOnUiThread (() =>
{
foreach ( var value in result )
{
TimeSeriesResults . Add ( value . ToString ());
}
});
AddLog ( "CopySpread: success" );
2016-05-10 17:56:39 +03:00
}
2016-11-05 00:52:52 +02:00
private async void ExecuteCopyTicks ( object o )
{
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
TimeSeriesResults . Clear ();
var result = await Execute (() => _mtApiClient . CopyTicks ( TimeSeriesValues . SymbolValue ));
if ( result == null )
{
AddLog ( "CopyTicks: result is null" );
return ;
}
AddLog ( "CopyTicks: success." );
RunOnUiThread (() =>
{
foreach ( var v in result )
{
var tickStr = $"time = {v.time}, bid = {v.bid}, ask = {v.ask}, last = {v.last}, volume = {v.volume}" ;
TimeSeriesResults . Add ( tickStr );
}
});
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolsTotal ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var selectedCount = await Execute (() => _mtApiClient . SymbolsTotal ( true ));
AddLog ( $"SymbolsTotal(true) success, result = {selectedCount}" );
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var commonCount = await Execute (() => _mtApiClient . SymbolsTotal ( false ));
AddLog ( $"SymbolsTotal(false) success, result = {commonCount}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolName ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var selectedSymbol = await Execute (() => _mtApiClient . SymbolName ( 5 , true ));
AddLog ( $"SymbolName(5, true) success, result = {selectedSymbol}" );
2016-05-10 17:56:39 +03:00
2016-10-17 11:57:54 +03:00
var commonSymbol = await Execute (() => _mtApiClient . SymbolName ( 5 , false ));
AddLog ( $"SymbolName(5, false) success, result = {commonSymbol}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolSelect ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() => _mtApiClient . SymbolSelect ( "AUDJPY" , true ));
AddLog ( "SymbolSelect(AUDJPY, true) success, result = " + retVal );
2016-05-10 17:56:39 +03:00
2016-10-06 14:04:17 +03:00
//var retVal1 = _mtApiClient.SymbolSelect("AUDJPY", false);
2016-10-17 11:57:54 +03:00
//AddLog("SymbolSelect(AUDJPY, false) success, result = " + retVal1);
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolIsSynchronized ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() => _mtApiClient . SymbolIsSynchronized ( "EURUSD" ));
AddLog ( "SymbolIsSynchronized(EURUSD): result = " + retVal );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoDouble ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() => _mtApiClient . SymbolInfoDouble ( "EURUSD" , ENUM_SYMBOL_INFO_DOUBLE . SYMBOL_BID ));
AddLog ( $"SymbolInfoDouble(EURUSD, ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_BID): result = {retVal}" );
2019-03-18 18:26:17 +02:00
retVal = await Execute (() => _mtApiClient . SymbolInfoDouble ( "EURUSD" , ENUM_SYMBOL_INFO_DOUBLE . SYMBOL_VOLUME_REAL ));
AddLog ( $"SymbolInfoDouble(EURUSD, ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_VOLUME_REAL): result = {retVal}" );
retVal = await Execute (() => _mtApiClient . SymbolInfoDouble ( "EURUSD" , ENUM_SYMBOL_INFO_DOUBLE . SYMBOL_VOLUMEHIGH_REAL ));
AddLog ( $"SymbolInfoDouble(EURUSD, ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_VOLUMEHIGH_REAL): result = {retVal}" );
retVal = await Execute (() => _mtApiClient . SymbolInfoDouble ( "EURUSD" , ENUM_SYMBOL_INFO_DOUBLE . SYMBOL_VOLUMELOW_REAL ));
AddLog ( $"SymbolInfoDouble(EURUSD, ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_VOLUMELOW_REAL): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoInteger ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() => _mtApiClient . SymbolInfoInteger ( "EURUSD" , ENUM_SYMBOL_INFO_INTEGER . SYMBOL_SPREAD ));
AddLog ( $"SymbolInfoInteger(EURUSD, ENUM_SYMBOL_INFO_INTEGER.SYMBOL_SPREAD): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoString ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() => _mtApiClient . SymbolInfoString ( "EURUSD" , ENUM_SYMBOL_INFO_STRING . SYMBOL_DESCRIPTION ));
AddLog ( $"SymbolInfoString(EURUSD, ENUM_SYMBOL_INFO_STRING.SYMBOL_DESCRIPTION): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2018-03-13 11:40:16 +02:00
private async void ExecuteSymbolInfoString2 ( object o )
{
string stringVar = null ;
var retVal = await Execute (() => _mtApiClient . SymbolInfoString ( "EURUSD" , ENUM_SYMBOL_INFO_STRING . SYMBOL_DESCRIPTION , out stringVar ));
AddLog ( $"SymbolInfoString-2 (EURUSD, ENUM_SYMBOL_INFO_STRING.SYMBOL_DESCRIPTION): result = {retVal}, stringVar = {stringVar}" );
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoTick ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = await Execute (() =>
{
MqlTick tick ;
var ok = _mtApiClient . SymbolInfoTick ( "EURUSD" , out tick );
return ok ? tick : null ;
});
if ( result == null ) return ;
AddLog ( "SymbolInfoTick(EURUSD) success" );
AddLog ( $"SymbolInfoTick(EURUSD) tick.time = {result.time}" );
AddLog ( $"SymbolInfoTick(EURUSD) tick.bid = {result.bid}" );
AddLog ( $"SymbolInfoTick(EURUSD) tick.ask = {result.ask}" );
AddLog ( $"SymbolInfoTick(EURUSD) tick.last = {result.last}" );
AddLog ( $"SymbolInfoTick(EURUSD) tick.volume = {result.volume}" );
2019-03-18 17:31:54 +02:00
AddLog ( $"SymbolInfoTick(EURUSD) tick.volume_real = {result.volume_real}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoSessionQuote ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() =>
{
DateTime from ;
DateTime to ;
var ok = _mtApiClient . SymbolInfoSessionQuote ( "EURUSD" , ENUM_DAY_OF_WEEK . MONDAY , 0 , out from , out to );
if ( ok )
{
AddLog ( $"SymbolInfoSessionQuote(EURUSD) from = {from}" );
AddLog ( $"SymbolInfoSessionQuote(EURUSD) to = {to}" );
}
return ok ;
});
AddLog ( $"SymbolInfoSessionQuote(EURUSD): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteSymbolInfoSessionTrade ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var retVal = await Execute (() =>
{
DateTime from ;
DateTime to ;
var ok = _mtApiClient . SymbolInfoSessionTrade ( "EURUSD" , ENUM_DAY_OF_WEEK . MONDAY , 0 , out from , out to );
if ( ok )
{
AddLog ( $"SymbolInfoSessionTrade(EURUSD) from = {from}" );
AddLog ( $"SymbolInfoSessionTrade(EURUSD) to = {to}" );
}
return ok ;
});
AddLog ( "SymbolInfoSessionTrade(EURUSD): result = " + retVal );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteMarketBookAdd ( object o )
2016-05-10 17:56:39 +03:00
{
2018-02-21 14:43:25 +02:00
var retVal = await Execute (() => _mtApiClient . MarketBookAdd ( "EURUSD" ));
AddLog ( $"MarketBookAdd(EURUSD): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteMarketBookRelease ( object o )
2016-05-10 17:56:39 +03:00
{
2018-02-21 14:43:25 +02:00
var retVal = await Execute (() => _mtApiClient . MarketBookRelease ( "EURUSD" ));
AddLog ( $"MarketBookRelease(EURUSD): result = {retVal}" );
2016-05-10 17:56:39 +03:00
}
2016-10-17 11:57:54 +03:00
private async void ExecuteMarketBookGet ( object o )
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = await Execute (() =>
{
MqlBookInfo [] book ;
var ok = _mtApiClient . MarketBookGet ( "EURUSD" , out book );
return ok ? book : null ;
});
2016-10-06 14:04:17 +03:00
2016-10-17 11:57:54 +03:00
if ( result == null )
{
AddLog ( "MarketBookGet(EURUSD): result is null" );
return ;
}
2018-02-21 14:43:25 +02:00
AddLog ( $"MarketBookGet(EURUSD): success. Count = {result.Length}" );
2016-10-06 14:04:17 +03:00
2016-10-17 11:57:54 +03:00
for ( var i = 0 ; i < result . Length ; i ++)
2016-05-10 17:56:39 +03:00
{
2019-03-18 17:31:54 +02:00
AddLog ( $"MarketBookGet: [{i}] - {result[i].price} | {result[i].volume} | {result[i].type} | {result[i].volume_real}" );
2016-05-10 17:56:39 +03:00
}
}
2016-10-17 11:57:54 +03:00
private async void ExecutePositionOpen ( object obj )
2016-05-10 17:56:39 +03:00
{
2016-10-06 14:04:17 +03:00
const string symbol = "EURUSD" ;
const ENUM_ORDER_TYPE orderType = ENUM_ORDER_TYPE . ORDER_TYPE_BUY ;
const double volume = 0.1 ;
2017-09-29 19:05:06 +03:00
const double price = 1.18129 ;
const double sl = 1.1811 ;
const double tp = 1.1814 ;
2016-10-06 14:04:17 +03:00
const string comment = "Test PositionOpen" ;
2017-09-29 19:05:06 +03:00
MqlTradeResult tradeResult = null ;
2016-10-06 14:04:17 +03:00
2017-09-29 19:05:06 +03:00
var retVal = await Execute (() => _mtApiClient . PositionOpen ( symbol , orderType , volume , price , sl , tp , comment , out tradeResult ));
AddLog ( $"PositionOpen: symbol EURUSD retVal = {retVal}, result = {tradeResult}" );
2016-05-10 17:56:39 +03:00
}
2018-06-04 17:48:14 +03:00
private async void ExecutePositionClose ( object obj )
{
var ticket = PositionTicketValue ;
MqlTradeResult tradeResult = null ;
var retVal = await Execute (() => _mtApiClient . PositionClose ( ticket , out tradeResult ));
AddLog ( $"PositionClose: ticket {ticket} retVal = {retVal}, result = {tradeResult}" );
}
2018-06-06 14:24:39 +03:00
private async void ExecutePositionCloseAll ( object obj )
{
var retVal = await Execute (() => _mtApiClient . PositionCloseAll ());
AddLog ( $"PositionCloseAll: count = {retVal}" );
}
2020-10-13 14:14:59 +03:00
private async void ExecuteBuy ( object obj )
{
const string symbol = "EURUSD" ;
const double volume = 0.1 ;
MqlTradeResult tradeResult = null ;
var retVal = await Execute (() => _mtApiClient . Buy ( out tradeResult , volume , symbol ));
AddLog ( $"Buy: symbol EURUSD retVal = {retVal}, result = {tradeResult}" );
}
private async void ExecuteSell ( object obj )
{
const string symbol = "EURUSD" ;
const double volume = 0.1 ;
MqlTradeResult tradeResult = null ;
var retVal = await Execute (() => _mtApiClient . Sell ( out tradeResult , volume , symbol ));
AddLog ( $"Sell: symbol EURUSD retVal = {retVal}, result = {tradeResult}" );
}
2016-10-21 17:52:54 +03:00
private async void ExecutePrint ( object obj )
{
var message = MessageText ;
var retVal = await Execute (() => _mtApiClient . Print ( message ));
AddLog ( $"Print: message print in MetaTrader - {retVal}" );
}
2018-03-13 18:24:40 +02:00
private void ExecuteAlert ( object obj )
{
var message = MessageText ;
_mtApiClient . Alert ( message );
AddLog ( $"Alert: send alert to MetaTrader - {message}." );
}
2018-03-09 19:18:54 +02:00
private async void ExecuteGetLastError ( object obj )
{
var retVal = await Execute (() => _mtApiClient . GetLastError ());
AddLog ( $"GetLastError: last error = {retVal}" );
}
private void ExecuteResetLastError ( object obj )
{
_mtApiClient . ResetLastError ();
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
AddLog ( "ResetLastError: executed." );
2018-03-09 19:18:54 +02:00
}
2019-05-04 10:36:46 +03:00
private void ExecuteTesterStop ( object obj )
{
_mtApiClient . TesterStop ();
AddLog ( "TesterStop: executed." );
}
2018-02-19 18:48:31 +02:00
private async void ExecuteTimeCurrent ( object o )
{
var retVal = await Execute (() => _mtApiClient . TimeCurrent ());
AddLog ( $"TimeCurrent: {retVal}" );
}
private async void ExecuteTimeTradeServer ( object o )
{
var retVal = await Execute (() => _mtApiClient . TimeTradeServer ());
AddLog ( $"TimeTradeServer: {retVal}" );
}
private async void ExecuteTimeLocal ( object o )
{
var retVal = await Execute (() => _mtApiClient . TimeLocal ());
AddLog ( $"TimeLocal: {retVal}" );
}
private async void ExecuteTimeGMT ( object o )
{
var retVal = await Execute (() => _mtApiClient . TimeGMT ());
AddLog ( $"TimeGMT: {retVal}" );
}
2018-06-04 13:53:55 +03:00
#region Global Variable Commands
private async void ExecuteGlobalVariableCheck ( object obj )
{
var name = GlobalVarName ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableCheck ( name ));
AddLog ( $"GlobalVariableCheck: {retVal}" );
}
private async void ExecuteGlobalVariableTime ( object obj )
{
var name = GlobalVarName ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableTime ( name ));
AddLog ( $"GlobalVariableTime: {retVal}" );
}
private async void ExecuteGlobalVariableDel ( object obj )
{
var name = GlobalVarName ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableDel ( name ));
AddLog ( $"GlobalVariableDel: {retVal}" );
}
private async void ExecuteGlobalVariableGet ( object obj )
{
var name = GlobalVarName ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableGet ( name ));
GlobalVarValue = retVal ;
AddLog ( $"GlobalVariableGet: {retVal}" );
}
private async void ExecuteGlobalVariableName ( object obj )
{
var retVal = await Execute (() => _mtApiClient . GlobalVariableName ( 0 ));
GlobalVarName = retVal ;
AddLog ( $"GlobalVariableName: {retVal}" );
}
private async void ExecuteGlobalVariableSet ( object obj )
{
var name = GlobalVarName ;
var value = GlobalVarValue ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableSet ( name , value ));
AddLog ( $"GlobalVariableSet: {retVal}" );
}
private void ExecuteGlobalVariablesFlush ( object obj )
{
_mtApiClient . GlobalVariablesFlush ();
AddLog ( "GlobalVariablesFlush: executed." );
}
private async void ExecuteGlobalVariableTemp ( object obj )
{
var name = GlobalVarName ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableTemp ( name ));
AddLog ( $"GlobalVariableTemp: {retVal}" );
}
private async void ExecuteGlobalVariableSetOnCondition ( object obj )
{
var name = GlobalVarName ;
var value = GlobalVarValue ;
const double checkValue = 2 ;
var retVal = await Execute (() => _mtApiClient . GlobalVariableSetOnCondition ( name , value , checkValue ));
AddLog ( $"GlobalVariableSetOnCondition: {retVal}" );
}
private async void ExecuteGlobalVariablesDeleteAll ( object obj )
{
var retVal = await Execute (() => _mtApiClient . GlobalVariablesDeleteAll ());
AddLog ( $"GlobalVariablesDeleteAll: {retVal}" );
}
private async void ExecuteGlobalVariablesTotal ( object obj )
{
var retVal = await Execute (() => _mtApiClient . GlobalVariablesTotal ());
AddLog ( $"GlobalVariablesTotal: {retVal}" );
}
#endregion
2018-03-19 15:10:09 +02:00
#region Chart Commands
private async void ExecuteChartOpen ( object o )
{
AddLog ( "Executed #1" );
if ( string . IsNullOrEmpty ( ChartFunctionsSymbolValue ))
{
AddLog ( "ChartOpen [ERROR]: Symbol is not defined!" );
return ;
}
AddLog ( $"Executed #2 s:{ChartFunctionsSymbolValue}" );
var result = await Execute (() =>
{
var SymbolAddReturn = _mtApiClient . SymbolSelect ( ChartFunctionsSymbolValue , true );
var ChartId = _mtApiClient . ChartOpen ( ChartFunctionsSymbolValue , TimeSeriesValues . TimeFrame );
return ChartId ;
});
if ( result == - 1 )
{
AddLog ( "ChartOpen: result is null" );
return ;
}
AddLog ( $"ChartOpen: success chartid=>{result}" );
}
private async void ExecuteChartTimePriceToXY ( object o )
{
const long chartId = 0 ;
const int subWindow = 0 ;
var time = DateTime . Now ;
const double price = 1.131 ;
var x = 0 ;
var y = 0 ;
var result = await Execute (() => _mtApiClient . ChartTimePriceToXY ( chartId , subWindow , time , price , out x , out y ));
if ( result == false )
{
AddLog ( "ChartTimePriceToXY: result is false" );
return ;
}
AddLog ( $"ChartTimePriceToXY: success. x = {x}; Y = {y}" );
}
private async void ExecuteChartXYToTimePrice ( object o )
{
const long chartId = 0 ;
const int x = 0 ;
const int y = 0 ;
var subWindow = 0 ;
DateTime ? time = null ;
double price = double . NaN ;
var result = await Execute (() => _mtApiClient . ChartXYToTimePrice ( chartId , x , y , out subWindow , out time , out price ));
if ( result == false )
{
AddLog ( "ChartXYToTimePrice: result is false" );
return ;
}
AddLog ( $"ChartXYToTimePrice: success. subWindow = {subWindow}; time = {time}; price = {price}" );
}
private async void ExecuteChartApplyTemplate ( object o )
{
if ( string . IsNullOrEmpty ( TimeSeriesValues ?. SymbolValue )) return ;
AddLog ( $"ExecuteChartApplyTemplate #2 s:{TimeSeriesValues?.SymbolValue}" );
var result = await Execute (() =>
{
var SymbolAddReturn = _mtApiClient . SymbolSelect ( TimeSeriesValues ?. SymbolValue , true );
var ChartId = _mtApiClient . ChartOpen ( TimeSeriesValues ?. SymbolValue , TimeSeriesValues . TimeFrame );
var MT5Path = _mtApiClient . TerminalInfoString ( ENUM_TERMINAL_INFO_STRING . TERMINAL_DATA_PATH );
OpenFileDialog openFileDialog = new OpenFileDialog ();
openFileDialog . Filter = "Template File (*.tpl)|*.tpl|All files (*.*)|*.*" ;
if ( openFileDialog . ShowDialog () == true )
{
var TemplateName = "\\Files\\mt5api_copy.tpl" ;
var TemplateStringContent = File . ReadAllLines ( openFileDialog . FileName );
var DestPath = $"{MT5Path}\\MQL5{TemplateName}" ;
File . WriteAllLines ( $"{MT5Path}\\MQL5{TemplateName}" , TemplateStringContent );
_mtApiClient . ChartApplyTemplate ( ChartId , TemplateName );
}
return ChartId ;
});
if ( result == - 1 )
{
AddLog ( "ExecuteChartApplyTemplate: result is null" );
return ;
}
AddLog ( $"ExecuteChartApplyTemplate: success chartid=>{result}" );
}
private async void ExecuteChartSaveTemplate ( object o )
{
AddLog ( "ExecuteSaveApplyTemplate #1" );
var result = await Execute (() =>
{
var MT5Path = _mtApiClient . TerminalInfoString ( ENUM_TERMINAL_INFO_STRING . TERMINAL_DATA_PATH );
int ChartId = 0 ; // Actual Chart
var TemplateName = "\\Files\\exported.tpl" ;
_mtApiClient . ChartSaveTemplate ( ChartId , TemplateName );
var DestPath = $"{MT5Path}\\MQL5{TemplateName}" ;
AddLog ( $"Destination: {TemplateName}" );
return ChartId ;
});
if ( result == - 1 )
{
AddLog ( "ChartOpen: result is null" );
return ;
}
AddLog ( $"ChartOpen: success chartid=>{result}" );
}
2018-03-19 16:23:55 +02:00
private async void ExecuteChartId ( object o )
{
var result = await Execute (() => _mtApiClient . ChartId ());
RunOnUiThread (() =>
{
ChartFunctionsChartIdValue = result ;
});
AddLog ( $"ChartId: chartid = {result}" );
}
2020-10-25 19:20:44 +02:00
private async void ExecuteChartIdByExpertHandle ( object o )
{
if ( SelectedQuote == null )
{
AddLog ( "Instrument is not selected." );
return ;
}
var result = await Execute (() => _mtApiClient . ChartId ( SelectedQuote . ExpertHandle ));
RunOnUiThread (() =>
{
ChartFunctionsChartIdValue = result ;
});
AddLog ( $"ChartIdByExpertHandle: chartid = {result}" );
}
2018-03-19 16:23:55 +02:00
private void ExecuteChartRedraw ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
_mtApiClient . ChartRedraw ( chartId );
AddLog ( $"ChartRedraw: executed for chartid = {chartId}" );
2018-03-19 17:23:16 +02:00
}
private async void ExecuteChartWindowFind ( object o )
{
const string shortname = "MACD(12,26,9)" ;
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartWindowFind ( chartId , shortname ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartRedraw: result {result} for chartid {chartId}" );
2018-03-19 17:23:16 +02:00
}
private async void ExecuteChartClose ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartClose ( chartId ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartClose: result {result} for chartid {chartId}" );
2018-03-19 18:39:15 +02:00
}
private async void ExecuteChartPeriod ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartPeriod ( chartId ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartPeriod: result {result} for chartid {chartId}" );
2018-03-19 18:39:15 +02:00
}
private async void ExecuteChartSetDouble ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartSetDouble ( chartId , ENUM_CHART_PROPERTY_DOUBLE . CHART_PRICE_MAX , 1.13 ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartSetDouble: result {result} for chartid {chartId}" );
2018-03-19 18:58:12 +02:00
}
private async void ExecuteChartSetInteger ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartSetInteger ( chartId , ENUM_CHART_PROPERTY_INTEGER . CHART_SHOW_GRID , 0 ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartSetInteger: result {result} for chartid {chartId}" );
2018-03-19 18:58:12 +02:00
}
private async void ExecuteChartSetString ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartSetString ( chartId , ENUM_CHART_PROPERTY_STRING . CHART_COMMENT , "This is test comment from MtApi5" ));
2018-03-19 19:10:51 +02:00
AddLog ( $"ChartSetString: result {result} for chartid {chartId}" );
}
private async void ExecuteChartGetDouble ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartGetDouble ( chartId , ENUM_CHART_PROPERTY_DOUBLE . CHART_PRICE_MAX , 0 ));
AddLog ( $"ChartGetDouble: result {result} for chartid {chartId}" );
}
private async void ExecuteChartGetInteger ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartGetInteger ( chartId , ENUM_CHART_PROPERTY_INTEGER . CHART_VISIBLE_BARS , 0 ));
AddLog ( $"ChartGetInteger: result {result} for chartid {chartId}" );
2018-03-19 16:23:55 +02:00
}
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
private async void ExecuteChartNavigate ( object o )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartNavigate ( chartId , ENUM_CHART_POSITION . CHART_BEGIN , 0 ));
AddLog ( $"ChartNavigate: result {result} for chartid {chartId}" );
}
2018-03-27 10:22:16 +03:00
private async void ExecuteChartIndicatorAdd ( object obj )
{
var chartId = ChartFunctionsChartIdValue ;
var symbol = ChartFunctionsSymbolValue ;
var indicatorHandle = await Execute (() => _mtApiClient . iMACD ( symbol , ENUM_TIMEFRAMES . PERIOD_CURRENT , 12 , 26 , 9 , ENUM_APPLIED_PRICE . PRICE_CLOSE ));
var result = await Execute (() => _mtApiClient . ChartIndicatorAdd ( chartId , 1 , indicatorHandle ));
AddLog ( $"ChartIndicatorAdd: result {result} for chartid {chartId} with indicator {indicatorHandle}" );
}
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
private async void ExecuteChartIndicatorDelete ( object o )
{
const string shortname = "MACD(12,26,9)" ;
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartIndicatorDelete ( chartId , 1 , shortname ));
AddLog ( $"ChartIndicatorDelete: result {result} for chartid {chartId}" );
}
2018-03-27 10:22:16 +03:00
private async void ExecuteChartIndicatorGet ( object obj )
{
const string shortname = "MACD(12,26,9)" ;
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartIndicatorGet ( chartId , 1 , shortname ));
AddLog ( $"hartIndicatorGet: result {result} for chartid {chartId}" );
}
Updated test application (MT5) to perform testing functions ChartNavigate, ChartIndicatorDelete, ChartIndicatorName, ChartIndicatorsTotal, ChartWindowOnDropped, ChartPriceOnDropped, ChartTimeOnDropped, ChartXOnDropped, ChartYOnDropped, ChartSetSymbolPeriod, ChartScreenShot
2018-03-24 19:08:40 +02:00
private async void ExecuteChartIndicatorName ( object obj )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartIndicatorName ( chartId , 1 , 0 ));
AddLog ( $"ChartIndicatorName: result {result} for chartid {chartId}" );
}
private async void ExecuteChartIndicatorsTotal ( object obj )
{
var chartId = ChartFunctionsChartIdValue ;
var result = await Execute (() => _mtApiClient . ChartIndicatorsTotal ( chartId , 1 ));
AddLog ( $"ChartIndicatorsTotal: result {result} for chartid {chartId}" );
}
private async void ExecuteChartWindowOnDropped ( object obj )
{
var result = await Execute (() => _mtApiClient . ChartWindowOnDropped ());
AddLog ( $"ChartWindowOnDropped: result {result}" );
}
private async void ExecuteChartPriceOnDropped ( object obj )
{
var result = await Execute (() => _mtApiClient . ChartPriceOnDropped ());
AddLog ( $"ChartPriceOnDropped: result {result}" );
}
private async void ExecuteChartTimeOnDropped ( object obj )
{
var result = await Execute (() => _mtApiClient . ChartTimeOnDropped ());
AddLog ( $"ChartTimeOnDropped: result {result}" );
}
private async void ExecuteChartXOnDropped ( object obj )
{
var result = await Execute (() => _mtApiClient . ChartXOnDropped ());
AddLog ( $"ChartXOnDropped: result {result}" );
}
private async void ExecuteChartYOnDropped ( object obj )
{
var result = await Execute (() => _mtApiClient . ChartYOnDropped ());
AddLog ( $"ChartYOnDropped: result {result}" );
}
private async void ExecuteChartSetSymbolPeriod ( object obj )
{
var chartId = ChartFunctionsChartIdValue ;
var symbol = ChartFunctionsSymbolValue ;
var result = await Execute (() => _mtApiClient . ChartSetSymbolPeriod ( chartId , symbol , ENUM_TIMEFRAMES . PERIOD_M5 ));
AddLog ( $"ChartSetSymbolPeriod: result {result} for chartid {chartId}" );
}
private async void ExecuteChartScreenShot ( object obj )
{
var chartId = ChartFunctionsChartIdValue ;
var filename = "ChartScreenShot_TestMtApi.gif" ;
const int width = 800 ;
const int height = 600 ;
var result = await Execute (() => _mtApiClient . ChartScreenShot ( chartId , filename , width , height ));
AddLog ( $"ChartScreenShot: result {result} for chartid {chartId}. Filename {filename}" );
}
2018-03-19 15:10:09 +02:00
#endregion
2018-06-05 19:19:35 +03:00
private void ExecuteUnlockTicks ( object o )
{
_mtApiClient . UnlockTicks ();
}
2016-10-06 14:04:17 +03:00
private static void RunOnUiThread ( Action action )
2016-05-10 17:56:39 +03:00
{
2016-10-06 14:04:17 +03:00
Application . Current ?. Dispatcher . Invoke ( action );
2016-05-10 17:56:39 +03:00
}
2016-10-06 14:04:17 +03:00
private static void RunOnUiThread < T >( Action < T > action , params object [] args )
{
Application . Current ?. Dispatcher . Invoke ( action , args );
}
2016-05-10 17:56:39 +03:00
2018-03-19 15:10:09 +02:00
private void mMtApiClient_QuoteUpdate ( object sender , Mt5QuoteEventArgs e )
{
2018-05-08 14:53:31 +03:00
var q = e . Quote ;
Console . WriteLine ( @"Quote: Symbol = {0}, Bid = {1}, Ask = {2}, Volume = {3}, Time = {4}, Last = {5}"
, q . Instrument , q . Bid , q . Ask , q . Volume , q . Time , q . Last );
2018-03-19 15:10:09 +02:00
if ( _quotesMap . ContainsKey ( e . Quote . ExpertHandle ))
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
var qvm = _quotesMap [ e . Quote . ExpertHandle ];
qvm . Bid = e . Quote . Bid ;
qvm . Ask = e . Quote . Ask ;
}
if ( string . Equals ( e . Quote . Instrument , TradeRequest . Symbol ))
{
if ( TradeRequest . Type == ENUM_ORDER_TYPE . ORDER_TYPE_BUY )
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
TradeRequest . Price = e . Quote . Ask ;
2016-05-10 17:56:39 +03:00
}
2018-03-19 15:10:09 +02:00
else if ( TradeRequest . Type == ENUM_ORDER_TYPE . ORDER_TYPE_SELL )
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
TradeRequest . Price = e . Quote . Bid ;
2016-05-10 17:56:39 +03:00
}
}
}
private void mMtApiClient_QuoteRemoved ( object sender , Mt5QuoteEventArgs e )
{
2016-10-06 14:04:17 +03:00
RunOnUiThread < Mt5Quote >( RemoveQuote , e . Quote );
2016-05-10 17:56:39 +03:00
}
private void mMtApiClient_QuoteAdded ( object sender , Mt5QuoteEventArgs e )
{
2016-10-06 14:04:17 +03:00
RunOnUiThread < Mt5Quote >( AddQuote , e . Quote );
2016-05-10 17:56:39 +03:00
}
private void mMtApiClient_ConnectionStateChanged ( object sender , Mt5ConnectionEventArgs e )
{
ConnectionState = e . Status ;
ConnectionMessage = e . ConnectionMessage ;
2016-10-06 14:04:17 +03:00
RunOnUiThread ( ConnectCommand . RaiseCanExecuteChanged );
RunOnUiThread ( DisconnectCommand . RaiseCanExecuteChanged );
2016-05-10 17:56:39 +03:00
switch ( e . Status )
{
case Mt5ConnectionState . Connected :
2016-10-06 14:04:17 +03:00
RunOnUiThread ( OnConnected );
2016-05-10 17:56:39 +03:00
break ;
case Mt5ConnectionState . Disconnected :
2016-10-06 14:04:17 +03:00
RunOnUiThread ( OnDisconnected );
2016-05-10 17:56:39 +03:00
break ;
}
}
2018-03-01 11:20:12 +02:00
private void mMtApiClient_OnTradeTransaction ( object sender , Mt5TradeTransactionEventArgs e )
{
AddLog ( $"OnTradeTransaction: ExpertHandle = {e.ExpertHandle}.{Environment.NewLine}Transaction = {e.Trans}.{Environment.NewLine}Request = {e.Request}.{Environment.NewLine}Result = {e.Result}." );
}
2018-03-02 11:43:03 +02:00
private void _mtApiClient_OnBookEvent ( object sender , Mt5BookEventArgs e )
{
AddLog ( $"OnBookEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}" );
}
2018-06-06 12:46:24 +03:00
private void _mtApiClient_OnLastTimeBar ( object sender , Mt5TimeBarArgs e )
2018-06-05 19:19:35 +03:00
{
2020-06-18 05:03:21 +02:00
AddLog ( $"OnLastTimeBarEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}, open = {e.Rates.open}, close = {e.Rates.close}, time = {e.Rates.time}, high = {e.Rates.high}, low = {e.Rates.low}" );
2018-06-05 19:19:35 +03:00
}
2018-06-06 12:46:24 +03:00
private void _mtApiClient_OnLockTicks ( object sender , Mt5LockTicksEventArgs e )
{
AddLog ( $"OnLockTicksEvent: Symbol = {e.Symbol}" );
}
2016-05-10 17:56:39 +03:00
private void AddQuote ( Mt5Quote quote )
{
2018-03-19 15:10:09 +02:00
if ( _quotesMap . ContainsKey ( quote . ExpertHandle ))
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
AddLog ( $"AddQuote: Quote {quote.Instrument} with handle {quote.ExpertHandle} is present list. Skipped!" );
return ;
2016-05-10 17:56:39 +03:00
}
2018-03-19 15:10:09 +02:00
var qvm = new QuoteViewModel ( quote . Instrument )
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
ExpertHandle = quote . ExpertHandle ,
Bid = quote . Bid ,
Ask = quote . Ask
};
2016-05-10 17:56:39 +03:00
2018-03-19 15:10:09 +02:00
_quotesMap [ quote . ExpertHandle ] = qvm ;
Quotes . Add ( qvm );
2016-05-10 17:56:39 +03:00
}
private void RemoveQuote ( Mt5Quote quote )
{
2018-03-19 15:10:09 +02:00
if ( _quotesMap . ContainsKey ( quote . ExpertHandle ) == false )
2016-05-10 17:56:39 +03:00
{
2018-03-19 15:10:09 +02:00
AddLog ( $"RemoveQuote: Quote {quote.Instrument} with handle {quote.ExpertHandle} is NOT present list. Skipped!" );
return ;
2016-05-10 17:56:39 +03:00
}
2018-03-19 15:10:09 +02:00
var qvm = _quotesMap [ quote . ExpertHandle ];
_quotesMap . Remove ( quote . ExpertHandle );
Quotes . Remove ( qvm );
2016-05-10 17:56:39 +03:00
}
private void OnConnected ()
{
2016-10-06 14:04:17 +03:00
var quotes = _mtApiClient . GetQuotes ();
2016-05-10 17:56:39 +03:00
if ( quotes != null )
{
foreach ( var quote in quotes )
{
AddQuote ( quote );
}
}
}
private void OnDisconnected ()
{
_quotesMap . Clear ();
Quotes . Clear ();
}
private void OnSelectedQuoteChanged ()
{
2016-10-17 11:57:54 +03:00
if ( SelectedQuote == null ) return ;
TradeRequest . Symbol = SelectedQuote . Instrument ;
TimeSeriesValues . SymbolValue = SelectedQuote . Instrument ;
}
private async Task < TResult > Execute < TResult >( Func < TResult > func )
{
return await Task . Factory . StartNew (() =>
2016-05-10 17:56:39 +03:00
{
2016-10-17 11:57:54 +03:00
var result = default ( TResult );
try
{
result = func ();
}
2018-02-21 14:43:25 +02:00
catch ( ExecutionException ex )
{
AddLog ( $"Exception: {ex.ErrorCode} - {ex.Message}" );
}
2016-10-17 11:57:54 +03:00
catch ( Exception ex )
{
AddLog ( $"Exception: {ex.Message}" );
}
return result ;
});
2016-05-10 17:56:39 +03:00
}
2018-03-11 19:26:25 -03:00
2016-10-17 11:57:54 +03:00
private void AddLog ( string msg )
{
RunOnUiThread (() =>
{
var time = DateTime . Now . ToString ( "h:mm:ss tt" );
History . Add ( $"[{time}]: {msg}" );
});
}
2016-05-10 17:56:39 +03:00
#endregion
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged ;
protected virtual void OnPropertyChanged ( string propertyName )
{
2016-10-06 14:04:17 +03:00
PropertyChanged ?. Invoke ( this , new PropertyChangedEventArgs ( propertyName ));
2016-05-10 17:56:39 +03:00
}
#endregion
#region Private Fields
2016-10-06 14:04:17 +03:00
private readonly MtApi5Client _mtApiClient ;
2016-05-10 17:56:39 +03:00
2018-03-19 15:10:09 +02:00
private readonly Dictionary < int , QuoteViewModel > _quotesMap = new Dictionary < int , QuoteViewModel >();
2016-05-10 17:56:39 +03:00
#endregion
}
}