Migrated to VS2015

This commit is contained in:
DW
2016-05-10 17:56:39 +03:00
parent 18226cc9e8
commit 8b333f599d
56 changed files with 7292 additions and 213 deletions
+4
View File
@@ -70,6 +70,10 @@ ipch/
*.sdf
*.cachefile
# Visual Studio 2015 files
*.VC.opendb
*.VC.db
# Visual Studio profiler
*.psess
*.vsp
-143
View File
@@ -1,143 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer", "TestServer\TestServer.csproj", "{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApiClientUI", "TestApiClientUI\TestApiClientUI.csproj", "{663CC515-EAAE-47D4-8933-5008C2DA1160}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Licensing", "Licensing\Licensing.csproj", "{21FA6E21-EE5D-4A84-B0ED-E1D8876B41FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MTApiService", "MTApiService\MTApiService.csproj", "{DE76D5C7-B99C-4467-8408-78173BDD84E0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MTConnector", "MTConnector\MTConnector.vcxproj", "{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi", "MtApi\MtApi.csproj", "{7A76C388-A8FB-4949-8170-24D4742E934E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi5", "MtApi5\MtApi5.csproj", "{AC8B5010-DA75-477E-9CA5-547C649E12D8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MT5Connector", "MT5Connector\MT5Connector.vcxproj", "{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi5TestClient", "MtApi5TestClient\MtApi5TestClient.csproj", "{38B9C657-BC2F-44F0-8824-54B31F2A64F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectionsManager", "ConnectionsManager\ConnectionsManager.csproj", "{C8751BA1-6A85-468C-87BD-758F37B8C0DD}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestMtApi", "TestMtApi\TestMtApi\TestMtApi.vbproj", "{EB7C228D-9494-4985-845E-B8312450DF3D}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "MtApi5Setup_x64", "MtApi5Setup_x64\MtApi5Setup_x64.vdproj", "{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "MtApi5Setup_x86", "MtApi5Setup_x86\MtApi5Setup_x86.vdproj", "{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MtApiInstaller", "MtApiInstaller\MtApiInstaller.wixproj", "{78B94552-DB17-40EC-B7C6-23D32DB85DC1}"
ProjectSection(ProjectDependencies) = postProject
{7A76C388-A8FB-4949-8170-24D4742E934E} = {7A76C388-A8FB-4949-8170-24D4742E934E}
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F} = {2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}
{DE76D5C7-B99C-4467-8408-78173BDD84E0} = {DE76D5C7-B99C-4467-8408-78173BDD84E0}
EndProjectSection
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MtApi5Installer", "MtApi5Installer\MtApi5Installer.wixproj", "{A9ED070F-AB4D-4380-9DDE-5D931AC71333}"
ProjectSection(ProjectDependencies) = postProject
{AC8B5010-DA75-477E-9CA5-547C649E12D8} = {AC8B5010-DA75-477E-9CA5-547C649E12D8}
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556} = {CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}
{DE76D5C7-B99C-4467-8408-78173BDD84E0} = {DE76D5C7-B99C-4467-8408-78173BDD84E0}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|Win32.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|x64.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|Win32.ActiveCfg = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|x64.ActiveCfg = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Win32.ActiveCfg = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|x64.ActiveCfg = Debug|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Win32.ActiveCfg = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|x64.ActiveCfg = Release|Any CPU
{21FA6E21-EE5D-4A84-B0ED-E1D8876B41FB}.Debug|Win32.ActiveCfg = Debug|Any CPU
{21FA6E21-EE5D-4A84-B0ED-E1D8876B41FB}.Debug|x64.ActiveCfg = Debug|Any CPU
{21FA6E21-EE5D-4A84-B0ED-E1D8876B41FB}.Release|Win32.ActiveCfg = Release|Any CPU
{21FA6E21-EE5D-4A84-B0ED-E1D8876B41FB}.Release|x64.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Win32.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Win32.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|x64.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|x64.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Win32.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Win32.Build.0 = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x64.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x64.Build.0 = Release|Any CPU
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Win32.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Win32.Build.0 = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|x64.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Win32.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Win32.Build.0 = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|x64.ActiveCfg = Release|Win32
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Win32.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Win32.Build.0 = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|x64.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Win32.ActiveCfg = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Win32.Build.0 = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|x64.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Win32.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Win32.Build.0 = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|x64.Build.0 = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Win32.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Win32.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x64.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x64.Build.0 = Release|Any CPU
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Win32.ActiveCfg = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Win32.Build.0 = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x64.ActiveCfg = Debug|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x64.Build.0 = Debug|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Win32.ActiveCfg = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Win32.Build.0 = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x64.ActiveCfg = Release|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x64.Build.0 = Release|x64
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Win32.ActiveCfg = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x64.ActiveCfg = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x64.Build.0 = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Win32.ActiveCfg = Release|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|x64.ActiveCfg = Release|Any CPU
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Debug|Win32.ActiveCfg = Debug|x86
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Debug|x64.ActiveCfg = Debug|Any CPU
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Debug|x64.Build.0 = Debug|Any CPU
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Release|Win32.ActiveCfg = Release|x86
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Release|x64.ActiveCfg = Release|Any CPU
{C8751BA1-6A85-468C-87BD-758F37B8C0DD}.Release|x64.Build.0 = Release|Any CPU
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|Win32.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x64.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|Win32.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x64.ActiveCfg = Release|x86
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Debug|Win32.ActiveCfg = Debug
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Debug|x64.ActiveCfg = Debug
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Debug|x64.Build.0 = Debug
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Release|Win32.ActiveCfg = Release
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Release|x64.ActiveCfg = Release
{E86F9CEB-2255-40D0-AF59-E89DEF6752BE}.Release|x64.Build.0 = Release
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Debug|Win32.ActiveCfg = Debug
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Debug|Win32.Build.0 = Debug
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Debug|x64.ActiveCfg = Debug
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Release|Win32.ActiveCfg = Release
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Release|Win32.Build.0 = Release
{84516D9A-0CEC-4C64-B200-E9D78BBA52FD}.Release|x64.ActiveCfg = Release
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Win32.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Win32.Build.0 = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|x64.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Win32.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Win32.Build.0 = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|x64.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Win32.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Win32.Build.0 = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|x64.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Win32.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Win32.Build.0 = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|x64.ActiveCfg = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+50 -65
View File
@@ -1,11 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer", "TestServer\TestServer.csproj", "{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApiClientUI", "TestApiClientUI\TestApiClientUI.csproj", "{663CC515-EAAE-47D4-8933-5008C2DA1160}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApiClientUI", "TestClients\TestApiClientUI\TestApiClientUI.csproj", "{663CC515-EAAE-47D4-8933-5008C2DA1160}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MTApiService", "MTApiService\MTApiService.csproj", "{DE76D5C7-B99C-4467-8408-78173BDD84E0}"
EndProject
@@ -17,9 +15,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi5", "MtApi5\MtApi5.csp
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MT5Connector", "MT5Connector\MT5Connector.vcxproj", "{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi5TestClient", "MtApi5TestClient\MtApi5TestClient.csproj", "{38B9C657-BC2F-44F0-8824-54B31F2A64F5}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApi5TestClient", "TestClients\MtApi5TestClient\MtApi5TestClient.csproj", "{38B9C657-BC2F-44F0-8824-54B31F2A64F5}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestMtApi", "TestMtApi\TestMtApi\TestMtApi.vbproj", "{EB7C228D-9494-4985-845E-B8312450DF3D}"
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestMtApi", "TestClients\TestMtApi\TestMtApi\TestMtApi.vbproj", "{EB7C228D-9494-4985-845E-B8312450DF3D}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MtApiInstaller", "MtApiInstaller\MtApiInstaller.wixproj", "{78B94552-DB17-40EC-B7C6-23D32DB85DC1}"
ProjectSection(ProjectDependencies) = postProject
@@ -37,177 +35,159 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MtApi5Installer", "MtApi5In
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MtApiSetupActions", "MtApiSetupActions\MtApiSetupActions.csproj", "{10800F37-F71B-4818-8351-8CF744295F80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestClients", "TestClients", "{B91FF338-E05D-4EF1-948B-A2376DB37ECA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Any CPU = Debug|Any CPU
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Mixed Platforms = Release|Mixed Platforms
Release|Any CPU = Release|Any CPU
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|Mixed Platforms.Build.0 = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|Win32.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|x64.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|x86.ActiveCfg = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Debug|x86.Build.0 = Debug|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|Mixed Platforms.ActiveCfg = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|Mixed Platforms.Build.0 = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|Win32.ActiveCfg = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|x64.ActiveCfg = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|x86.ActiveCfg = Release|x86
{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}.Release|x86.Build.0 = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Mixed Platforms.Build.0 = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Any CPU.Build.0 = Debug|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|Win32.ActiveCfg = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|x64.ActiveCfg = Debug|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|x86.ActiveCfg = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Debug|x86.Build.0 = Debug|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Mixed Platforms.ActiveCfg = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Mixed Platforms.Build.0 = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Any CPU.ActiveCfg = Release|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Any CPU.Build.0 = Release|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|Win32.ActiveCfg = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|x64.ActiveCfg = Release|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|x64.Build.0 = Release|Any CPU
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|x86.ActiveCfg = Release|x86
{663CC515-EAAE-47D4-8933-5008C2DA1160}.Release|x86.Build.0 = Release|x86
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Win32.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|Win32.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|x64.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|x64.Build.0 = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Debug|x86.ActiveCfg = Debug|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Any CPU.Build.0 = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Win32.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|Win32.Build.0 = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x64.ActiveCfg = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x64.Build.0 = Release|Any CPU
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x86.ActiveCfg = Release|Any CPU
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{DE76D5C7-B99C-4467-8408-78173BDD84E0}.Release|x86.Build.0 = Release|Any CPU
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Any CPU.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Win32.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|Win32.Build.0 = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|x64.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|x86.ActiveCfg = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Debug|x86.Build.0 = Debug|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Mixed Platforms.Build.0 = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Any CPU.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Win32.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|Win32.Build.0 = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|x64.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|x86.ActiveCfg = Release|Win32
{2BE5FAC1-7FB7-45C3-9215-31A5BC4B964F}.Release|x86.Build.0 = Release|Win32
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Win32.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|Win32.Build.0 = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|x64.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Debug|x86.ActiveCfg = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Any CPU.Build.0 = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Win32.ActiveCfg = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|Win32.Build.0 = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|x64.ActiveCfg = Release|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|x86.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7A76C388-A8FB-4949-8170-24D4742E934E}.Release|x86.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Win32.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|Win32.Build.0 = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|x64.Build.0 = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Any CPU.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Win32.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|Win32.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x64.ActiveCfg = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x64.Build.0 = Release|Any CPU
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x86.ActiveCfg = Release|Any CPU
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{AC8B5010-DA75-477E-9CA5-547C649E12D8}.Release|x86.Build.0 = Release|Any CPU
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Any CPU.ActiveCfg = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Win32.ActiveCfg = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|Win32.Build.0 = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x64.ActiveCfg = Debug|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x64.Build.0 = Debug|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x86.ActiveCfg = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Debug|x86.Build.0 = Debug|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Mixed Platforms.Build.0 = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Any CPU.ActiveCfg = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Win32.ActiveCfg = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|Win32.Build.0 = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x64.ActiveCfg = Release|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x64.Build.0 = Release|x64
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x86.ActiveCfg = Release|Win32
{CB6D4A3E-2F2E-4C67-929D-3C2A8FD1C556}.Release|x86.Build.0 = Release|Win32
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Mixed Platforms.Build.0 = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|Win32.ActiveCfg = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x64.ActiveCfg = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x64.Build.0 = Debug|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x86.ActiveCfg = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Debug|x86.Build.0 = Debug|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Mixed Platforms.ActiveCfg = Release|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Mixed Platforms.Build.0 = Release|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Any CPU.Build.0 = Release|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|Win32.ActiveCfg = Release|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|x64.ActiveCfg = Release|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|x64.Build.0 = Release|Any CPU
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|x86.ActiveCfg = Release|x86
{38B9C657-BC2F-44F0-8824-54B31F2A64F5}.Release|x86.Build.0 = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|Mixed Platforms.Build.0 = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|Any CPU.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|Win32.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x64.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x86.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x86.Build.0 = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|Mixed Platforms.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|Mixed Platforms.Build.0 = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|Any CPU.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|Win32.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x64.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x86.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x86.Build.0 = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Mixed Platforms.Build.0 = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Any CPU.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Win32.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|Win32.Build.0 = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|x64.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|x86.ActiveCfg = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Debug|x86.Build.0 = Debug|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Mixed Platforms.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Mixed Platforms.Build.0 = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Any CPU.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Win32.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|Win32.Build.0 = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|x64.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|x86.ActiveCfg = Release|x86
{78B94552-DB17-40EC-B7C6-23D32DB85DC1}.Release|x86.Build.0 = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Mixed Platforms.Build.0 = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Any CPU.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Win32.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|Win32.Build.0 = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|x64.ActiveCfg = Debug|x64
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|x64.Build.0 = Debug|x64
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|x86.ActiveCfg = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Debug|x86.Build.0 = Debug|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Mixed Platforms.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Mixed Platforms.Build.0 = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Any CPU.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Win32.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|Win32.Build.0 = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|x64.ActiveCfg = Release|x64
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|x64.Build.0 = Release|x64
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|x86.ActiveCfg = Release|x86
{A9ED070F-AB4D-4380-9DDE-5D931AC71333}.Release|x86.Build.0 = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|Mixed Platforms.Build.0 = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|Any CPU.ActiveCfg = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|Win32.ActiveCfg = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|Win32.Build.0 = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|x64.ActiveCfg = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|x86.ActiveCfg = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Debug|x86.Build.0 = Debug|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|Mixed Platforms.ActiveCfg = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|Mixed Platforms.Build.0 = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|Any CPU.ActiveCfg = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|Win32.ActiveCfg = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|Win32.Build.0 = Release|x86
{10800F37-F71B-4818-8351-8CF744295F80}.Release|x64.ActiveCfg = Release|x86
@@ -217,4 +197,9 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{663CC515-EAAE-47D4-8933-5008C2DA1160} = {B91FF338-E05D-4EF1-948B-A2376DB37ECA}
{38B9C657-BC2F-44F0-8824-54B31F2A64F5} = {B91FF338-E05D-4EF1-948B-A2376DB37ECA}
{EB7C228D-9494-4985-845E-B8312450DF3D} = {B91FF338-E05D-4EF1-948B-A2376DB37ECA}
EndGlobalSection
EndGlobal
+8
View File
@@ -0,0 +1,8 @@
<Application x:Class="MtApi5TestClient.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
+16
View File
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace MtApi5TestClient
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}
@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace MtApi5TestClient
{
public class DelegateCommand : ICommand
{
private readonly Predicate<object> _canExecute;
private readonly Action<object> _execute;
public event EventHandler CanExecuteChanged;
public DelegateCommand(Action<object> execute)
: this(execute, null)
{
}
public DelegateCommand(Action<object> execute,
Predicate<object> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (_canExecute == null)
{
return true;
}
return _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
}
}
@@ -0,0 +1,391 @@
<Window x:Class="MtApi5TestClient.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mtapi5="clr-namespace:MtApi5;assembly=MtApi5"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="700" Width="650"
Closing="Window_Closing">
<Window.Resources>
<DataTemplate x:Key="ConnectionTextBlockTemplate" DataType="{x:Type mtapi5:Mt5ConnectionState}">
<TextBlock Text="{Binding}" x:Name="PART_Text" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="Connected">
<Setter TargetName="PART_Text" Property="Text" Value="Connected" />
<Setter TargetName="PART_Text" Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Connecting">
<Setter TargetName="PART_Text" Property="Text" Value="Connecting..." />
<Setter TargetName="PART_Text" Property="Foreground" Value="Gold" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Failed">
<Setter TargetName="PART_Text" Property="Text" Value="Connection Failed" />
<Setter TargetName="PART_Text" Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Disconnected">
<Setter TargetName="PART_Text" Property="Text" Value="Disconnected" />
<Setter TargetName="PART_Text" Property="Foreground" Value="Black" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<ObjectDataProvider x:Key="ENUM_TRADE_REQUEST_ACTIONS_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_TRADE_REQUEST_ACTIONS"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ORDER_TYPE_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ORDER_TYPE"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ORDER_TYPE_FILLING_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ORDER_TYPE_FILLING"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ORDER_TYPE_TIME_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ORDER_TYPE_TIME"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ACCOUNT_INFO_DOUBLE_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ACCOUNT_INFO_DOUBLE"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ACCOUNT_INFO_STRING_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ACCOUNT_INFO_STRING"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_ACCOUNT_INFO_INTEGER_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_ACCOUNT_INFO_INTEGER"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ENUM_TIMEFRAMES_Key" MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="mtapi5:ENUM_TIMEFRAMES"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid x:Name="_MainLayout">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Expander ExpandDirection="Right" IsExpanded="True"
Grid.Row="0" Grid.Column="0" Margin="5">
<Expander.Header>
<TextBlock Text="Connection" RenderTransformOrigin="0.5,0.5" Margin="0,0,0,0" Width="Auto">
<TextBlock.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="-90"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</TextBlock.LayoutTransform>
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</Expander.Header>
<Expander.Content>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Host"/>
<TextBox Grid.Row="0" Grid.Column="1"
Margin="5,0,0,0"
Text="{Binding Host, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Port"/>
<TextBox Grid.Row="1" Grid.Column="1"
Margin="5,0,0,0"
Text="{Binding Port, UpdateSourceTrigger=PropertyChanged}"/>
<StackPanel Grid.Row="2" Grid.ColumnSpan="2" Margin="5" Orientation="Horizontal">
<Button Content="Connect" Width="70" Command="{Binding ConnectCommand}" />
<Button Margin="5,0,0,0" Width="70" Content="Disconnect" Command="{Binding DisconnectCommand}" />
</StackPanel>
</Grid>
</Expander.Content>
</Expander>
<ListView Grid.Row="0" Grid.Column="1"
ItemsSource="{Binding Quotes}"
SelectedItem="{Binding SelectedQuote}"
SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Instrument" DisplayMemberBinding="{Binding Instrument}" />
<GridViewColumn Width="80" Header="Bid" DisplayMemberBinding="{Binding Bid}" />
<GridViewColumn Width="80" Header="Ask" DisplayMemberBinding="{Binding Ask}" />
<GridViewColumn Width="80" Header="Feeds Count" DisplayMemberBinding="{Binding FeedCount}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
<TabControl Grid.Row="1" >
<TabItem Header="Trade Functions">
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Expander Header="MqlTradeRequest" Margin="10">
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="Action"/>
<ComboBox Grid.Column="1" Grid.Row="0" ItemsSource="{Binding Source={StaticResource ENUM_TRADE_REQUEST_ACTIONS_Key}}"
SelectedItem="{Binding TradeRequest.Action}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="0" Text="Magic" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="0" Text="{Binding TradeRequest.Magic}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="Order"/>
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding TradeRequest.Order}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="1" Text="Symbol" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="1" Text="{Binding TradeRequest.Symbol}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="Volume"/>
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding TradeRequest.Volume}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="2" Text="Price" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="2" Text="{Binding TradeRequest.Price}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="Stoplimit"/>
<TextBox Grid.Column="1" Grid.Row="3" Text="{Binding TradeRequest.Stoplimit}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="3" Text="Sl" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="3" Text="{Binding TradeRequest.Sl}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="4" Text="Tp"/>
<TextBox Grid.Column="1" Grid.Row="4" Text="{Binding TradeRequest.Tp}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="4" Text="Deviation" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="4" Text="{Binding TradeRequest.Deviation}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="5" Text="Type"/>
<ComboBox Grid.Column="1" Grid.Row="5" ItemsSource="{Binding Source={StaticResource ENUM_ORDER_TYPE_Key}}"
SelectedItem="{Binding TradeRequest.Type}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="5" Text="Type_filling" Margin="10,0,0,0"/>
<ComboBox Grid.Column="3" Grid.Row="5" ItemsSource="{Binding Source={StaticResource ENUM_ORDER_TYPE_FILLING_Key}}"
SelectedItem="{Binding TradeRequest.Type_filling}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="6" Text="Type_time"/>
<ComboBox Grid.Column="1" Grid.Row="6" ItemsSource="{Binding Source={StaticResource ENUM_ORDER_TYPE_TIME_Key}}"
SelectedItem="{Binding TradeRequest.Type_time}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="2" Grid.Row="6" Text="Expiration" Margin="10,0,0,0"/>
<TextBox Grid.Column="3" Grid.Row="6" Text="{Binding TradeRequest}" Margin="5,0,0,0"/>
<TextBlock Grid.Column="0" Grid.Row="7" Text="Comment"/>
<TextBox Grid.Column="1" Grid.Row="7" Grid.ColumnSpan="3" Text="{Binding TradeRequest}" Margin="5,0,0,0"/>
</Grid>
</Expander>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Content="OrderSend" Command="{Binding OrderSendCommand}" Width="100" Height="25"/>
</StackPanel>
</Grid>
</ScrollViewer>
</TabItem>
<TabItem Header="Account Information">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ComboBox Grid.Column="0" Grid.Row="0"
SelectedItem="{Binding AccountInfoDoublePropertyId}"
ItemsSource="{Binding Source={StaticResource ENUM_ACCOUNT_INFO_DOUBLE_Key}}"/>
<Button Grid.Column="1" Grid.Row="0" Margin="10,0,0,0"
Command="{Binding AccountInfoDoubleCommand}"
Content="AccountInfoDouble" HorizontalAlignment="Left" />
<ComboBox Grid.Column="0" Grid.Row="1"
SelectedItem="{Binding AccountInfoIntegerPropertyId}"
ItemsSource="{Binding Source={StaticResource ENUM_ACCOUNT_INFO_INTEGER_Key}}"/>
<Button Grid.Column="1" Grid.Row="1" Margin="10,0,0,0"
Command="{Binding AccountInfoIntegerCommand}"
Content="AccountInfoInteger" HorizontalAlignment="Left" />
<ComboBox Grid.Column="0" Grid.Row="2"
SelectedItem="{Binding AccountInfoStringPropertyId}"
ItemsSource="{Binding Source={StaticResource ENUM_ACCOUNT_INFO_STRING_Key}}"/>
<Button Grid.Column="1" Grid.Row="2" Margin="10,0,0,0"
Command="{Binding AccountInfoStringCommand}"
Content="AccountInfoString" HorizontalAlignment="Left" />
</Grid>
</TabItem>
<TabItem Header="Timeseries and Indicators Access">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Text="symbol_name"/>
<TextBox Grid.Row="1" Text="timeframe"/>
<TextBox Grid.Row="2" Text="start_pos"/>
<TextBox Grid.Row="3" Text="count"/>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding TimeSeriesValues.SymbolValue}"/>
<ComboBox Grid.Row="1" Grid.Column="1"
ItemsSource="{Binding Source={StaticResource ENUM_TIMEFRAMES_Key}}"
SelectedItem="{Binding TimeSeriesValues.TimeFrame}"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding TimeSeriesValues.StartPos}"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding TimeSeriesValues.Count}"/>
<WrapPanel Grid.Row="4" Grid.ColumnSpan="2" Margin="10">
<Button Command="{Binding CopyRatesCommand}"
Content="CopyRates" HorizontalAlignment="Left" />
<Button Command="{Binding CopyTimesCommand}"
Content="CopyTimes" HorizontalAlignment="Left" />
<Button Command="{Binding CopyOpenCommand}"
Content="CopyOpen" HorizontalAlignment="Left" />
<Button Command="{Binding CopyHighCommand}"
Content="CopyHigh" HorizontalAlignment="Left" />
<Button Command="{Binding CopyLowCommand}"
Content="CopyLow" HorizontalAlignment="Left" />
<Button Command="{Binding CopyCloseCommand}"
Content="CopyClose" HorizontalAlignment="Left" />
<Button Command="{Binding CopyTickVolumeCommand}"
Content="CopyTickVolume" HorizontalAlignment="Left" />
<Button Command="{Binding CopyRealVolumeCommand}"
Content="CopyRealVolume" HorizontalAlignment="Left" />
<Button Command="{Binding CopySpreadCommand}"
Content="CopySpread" HorizontalAlignment="Left" />
</WrapPanel>
</Grid>
<ListBox ItemsSource="{Binding TimeSeriesResults}" />
</Grid>
</TabItem>
<TabItem Header=" Market Info">
<WrapPanel VerticalAlignment="Top" Margin="5">
<Button Command="{Binding SymbolsTotalCommand}" Content="SymbolsTotal" Margin="2"/>
<Button Command="{Binding SymbolNameCommand}" Content="SymbolName" Margin="2"/>
<Button Command="{Binding SymbolSelectCommand}" Content="SymbolSelect" Margin="2"/>
<Button Command="{Binding SymbolIsSynchronizedCommand}" Content="SymbolIsSynchronized" Margin="2"/>
<Button Command="{Binding SymbolInfoDoubleCommand}" Content="SymbolInfoDouble" Margin="2"/>
<Button Command="{Binding SymbolInfoIntegerCommand}" Content="SymbolInfoInteger" Margin="2"/>
<Button Command="{Binding SymbolInfoStringCommand}" Content="SymbolInfoString" Margin="2"/>
<Button Command="{Binding SymbolInfoTickCommand}" Content="SymbolInfoTick" Margin="2"/>
<Button Command="{Binding SymbolInfoSessionQuoteCommand}" Content="SymbolInfoSessionQuote" Margin="2"/>
<Button Command="{Binding SymbolInfoSessionTradeCommand}" Content="SymbolInfoSessionTrade" Margin="2"/>
<Button Command="{Binding MarketBookAddCommand}" Content="MarketBookAdd" Margin="2"/>
<Button Command="{Binding MarketBookReleaseCommand}" Content="MarketBookRelease" Margin="2"/>
<Button Command="{Binding MarketBookGetCommand}" Content="MarketBookGet" Margin="2"/>
</WrapPanel>
</TabItem>
</TabControl>
<Expander Grid.Row="2" Header="History" IsExpanded="True">
<ListBox Height="200" ItemsSource="{Binding History}"/>
</Expander>
<StatusBar Grid.Row="3">
<StatusBarItem>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding ConnectionState}"
ToolTip="{Binding ConnectionMessage}"
ContentTemplate="{StaticResource ConnectionTextBlockTemplate}"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MtApi5TestClient
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
ViewModel _vm { get; set; }
public MainWindow()
{
InitializeComponent();
_vm = new ViewModel();
_MainLayout.DataContext = _vm;
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
_vm.Close();
}
}
}
@@ -0,0 +1,187 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using MtApi5;
namespace MtApi5TestClient
{
public class MqlTradeRequestViewModel : INotifyPropertyChanged
{
public MqlTradeRequestViewModel(MqlTradeRequest reqest)
{
if (reqest == null)
throw new ArgumentNullException();
TradeRequest = reqest;
}
private MqlTradeRequest TradeRequest { get; set; }
public ENUM_TRADE_REQUEST_ACTIONS Action
{
get { return TradeRequest.Action; }
set
{
TradeRequest.Action = value;
OnPropertyChanged("Action");
}
}
public uint Magic
{
get { return TradeRequest.Magic; }
set
{
TradeRequest.Magic = value;
OnPropertyChanged("Magic");
}
}
public uint Order
{
get { return TradeRequest.Order; }
set
{
TradeRequest.Order = value;
OnPropertyChanged("Order");
}
}
public string Symbol
{
get { return TradeRequest.Symbol; }
set
{
TradeRequest.Symbol = value;
OnPropertyChanged("Symbol");
}
}
public double Volume
{
get { return TradeRequest.Volume; }
set
{
TradeRequest.Volume = value;
OnPropertyChanged("Volume");
}
}
public double Price
{
get { return TradeRequest.Price; }
set
{
TradeRequest.Price = value;
OnPropertyChanged("Price");
}
}
public double Stoplimit
{
get { return TradeRequest.Stoplimit; }
set
{
TradeRequest.Stoplimit = value;
OnPropertyChanged("Stoplimit");
}
}
public double Sl
{
get { return TradeRequest.Sl; }
set
{
TradeRequest.Sl = value;
OnPropertyChanged("Sl");
}
}
public double Tp
{
get { return TradeRequest.Tp; }
set
{
TradeRequest.Tp = value;
OnPropertyChanged("Tp");
}
}
public uint Deviation
{
get { return TradeRequest.Deviation; }
set
{
TradeRequest.Deviation = value;
OnPropertyChanged("Deviation");
}
}
public ENUM_ORDER_TYPE Type
{
get { return TradeRequest.Type; }
set
{
TradeRequest.Type = value;
OnPropertyChanged("Type");
}
}
public ENUM_ORDER_TYPE_FILLING Type_filling
{
get { return TradeRequest.Type_filling; }
set
{
TradeRequest.Type_filling = value;
OnPropertyChanged("Type_filling");
}
}
public ENUM_ORDER_TYPE_TIME Type_time
{
get { return TradeRequest.Type_time; }
set
{
TradeRequest.Type_time = value;
OnPropertyChanged("Type_time");
}
}
public DateTime Expiration
{
get { return TradeRequest.Expiration; }
set
{
TradeRequest.Expiration = value;
OnPropertyChanged("Expiration");
}
}
public string Comment
{
get { return TradeRequest.Comment; }
set
{
TradeRequest.Comment = value;
OnPropertyChanged("Comment");
}
}
public MqlTradeRequest GetMqlTradeRequest()
{
return TradeRequest;
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{38B9C657-BC2F-44F0-8824-54B31F2A64F5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MtApi5TestClient</RootNamespace>
<AssemblyName>MtApi5TestClient</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Debug\MtApi5TestClient.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Release\MtApi5TestClient.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="DelegateCommand.cs" />
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="MqlTradeRequestViewModel.cs" />
<Compile Include="QuoteViewModel.cs" />
<Compile Include="TimeSeriesValueViewModel.cs" />
<Compile Include="ViewModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<AppDesigner Include="Properties\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\MtApi5\MtApi5.csproj">
<Project>{AC8B5010-DA75-477E-9CA5-547C649E12D8}</Project>
<Name>MtApi5</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MtApi5TestClient")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MtApi5TestClient")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MtApi5TestClient.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MtApi5TestClient.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MtApi5TestClient.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace MtApi5TestClient
{
public class QuoteViewModel: INotifyPropertyChanged
{
#region Properties
public string Instrument { get; private set; }
private double _Bid;
public double Bid
{
get { return _Bid; }
set
{
_Bid = value;
OnPropertyChanged("Bid");
}
}
private double _Ask;
public double Ask
{
get { return _Ask; }
set
{
_Ask = value;
OnPropertyChanged("Ask");
}
}
private int _FeedCount = 0;
public int FeedCount
{
get { return _FeedCount; }
set
{
_FeedCount = value;
OnPropertyChanged("FeedCount");
}
}
#endregion
#region Public Methods
public QuoteViewModel(string instrument)
{
Instrument = instrument;
}
#endregion
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MtApi5;
using System.ComponentModel;
namespace MtApi5TestClient
{
public class TimeSeriesValueViewModel : INotifyPropertyChanged
{
private string _SymbolValue;
public string SymbolValue
{
get { return _SymbolValue; }
set
{
_SymbolValue = value;
OnPropertyChanged("SymbolValue");
}
}
public ENUM_TIMEFRAMES TimeFrame { get; set; }
public int StartPos { get; set; }
public int Count { get; set; }
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
+765
View File
@@ -0,0 +1,765 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows;
using MtApi5;
using System.Collections.ObjectModel;
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; }
public DelegateCommand AccountInfoDoubleCommand { get; private set; }
public DelegateCommand AccountInfoIntegerCommand { get; private set; }
public DelegateCommand AccountInfoStringCommand { get; private set; }
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; }
public DelegateCommand CopyTickVolumeCommand { get; private set; }
public DelegateCommand CopyRealVolumeCommand { get; private set; }
public DelegateCommand CopySpreadCommand { get; private set; }
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; }
public DelegateCommand SymbolInfoTickCommand { get; private set; }
public DelegateCommand SymbolInfoSessionQuoteCommand { get; private set; }
public DelegateCommand SymbolInfoSessionTradeCommand { get; private set; }
public DelegateCommand MarketBookAddCommand { get; private set; }
public DelegateCommand MarketBookReleaseCommand { get; private set; }
public DelegateCommand MarketBookGetCommand { get; private set; }
#endregion
#region Properties
private Mt5ConnectionState _ConnectionState;
public Mt5ConnectionState ConnectionState
{
get { return _ConnectionState; }
set
{
_ConnectionState = value;
OnPropertyChanged("ConnectionState");
}
}
private string _ConnectionMessage;
public string ConnectionMessage
{
get { return _ConnectionMessage; }
set
{
_ConnectionMessage = value;
OnPropertyChanged("ConnectionMessage");
}
}
private string _Host;
public string Host
{
get { return _Host; }
set
{
_Host = value;
OnPropertyChanged("Host");
}
}
private int _Port;
public int Port
{
get { return _Port; }
set
{
_Port = value;
OnPropertyChanged("Port");
}
}
private ObservableCollection<QuoteViewModel> _Quotes = new ObservableCollection<QuoteViewModel>();
public ObservableCollection<QuoteViewModel> Quotes
{
get { return _Quotes; }
}
private QuoteViewModel _SelectedQuote;
public QuoteViewModel SelectedQuote
{
get { return _SelectedQuote; }
set
{
_SelectedQuote = value;
OnPropertyChanged("SelectedQuote");
OnSelectedQuoteChanged();
}
}
private ObservableCollection<string> _History = new ObservableCollection<string>();
public ObservableCollection<string> History
{
get { return _History; }
}
private ObservableCollection<MqlTradeRequestViewModel> _TradeRequests = new ObservableCollection<MqlTradeRequestViewModel>();
public ObservableCollection<MqlTradeRequestViewModel> TradeRequests
{
get { return _TradeRequests; }
}
private MqlTradeRequestViewModel _TradeRequest;
public MqlTradeRequestViewModel TradeRequest
{
get { return _TradeRequest; }
set
{
_TradeRequest = value;
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; }
public TimeSeriesValueViewModel TimeSeriesValues { get; set; }
private ObservableCollection<string> _TimeSeriesResults = new ObservableCollection<string>();
public ObservableCollection<string> TimeSeriesResults
{
get { return _TimeSeriesResults; }
}
#endregion
#region Public Methods
public ViewModel()
{
// Init MtApi client
mMtApiClient = new MtApi5Client();
mMtApiClient.ConnectionStateChanged += new EventHandler<Mt5ConnectionEventArgs>(mMtApiClient_ConnectionStateChanged);
mMtApiClient.QuoteAdded += new EventHandler<Mt5QuoteEventArgs>(mMtApiClient_QuoteAdded);
mMtApiClient.QuoteRemoved += new EventHandler<Mt5QuoteEventArgs>(mMtApiClient_QuoteRemoved);
mMtApiClient.QuoteUpdated += new MtApi5Client.QuoteHandler(mMtApiClient_QuoteUpdated);
_quotesMap = new Dictionary<string, QuoteViewModel>();
ConnectionState = mMtApiClient.ConnectionState;
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);
TimeSeriesValues = new TimeSeriesValueViewModel();
TimeSeriesValues.Count = 100;
}
public void Close()
{
mMtApiClient.BeginDisconnect();
}
#endregion
#region Private Methods
private void InitCommands()
{
ConnectCommand = new DelegateCommand(ExecuteConnect, CanExecuteConnect);
DisconnectCommand = new DelegateCommand(ExecuteDisconnect, CanExecuteDisconnect);
OrderSendCommand = new DelegateCommand(ExecuteOrderSend);
AccountInfoDoubleCommand = new DelegateCommand(ExecuteAccountInfoDouble);
AccountInfoIntegerCommand = new DelegateCommand(ExecuteAccountInfoInteger);
AccountInfoStringCommand = new DelegateCommand(ExecuteAccountInfoString);
CopyRatesCommand = new DelegateCommand(ExecuteCopyRates);
CopyTimesCommand = new DelegateCommand(ExecuteCopyTime);
CopyOpenCommand = new DelegateCommand(ExecuteCopyOpen);
CopyHighCommand = new DelegateCommand(ExecuteCopyHigh);
CopyLowCommand = new DelegateCommand(ExecuteCopyLow);
CopyCloseCommand = new DelegateCommand(ExecuteCopyClose);
CopyTickVolumeCommand = new DelegateCommand(ExecuteCopyTickVolume);
CopyRealVolumeCommand = new DelegateCommand(ExecuteCopyRealVolume);
CopySpreadCommand = new DelegateCommand(ExecuteCopySpread);
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);
SymbolInfoTickCommand = new DelegateCommand(ExecuteSymbolInfoTick);
SymbolInfoSessionQuoteCommand = new DelegateCommand(ExecuteSymbolInfoSessionQuote);
SymbolInfoSessionTradeCommand = new DelegateCommand(ExecuteSymbolInfoSessionTrade);
MarketBookAddCommand = new DelegateCommand(ExecuteMarketBookAdd);
MarketBookReleaseCommand = new DelegateCommand(ExecuteMarketBookRelease);
MarketBookGetCommand = new DelegateCommand(ExecuteMarketBookGet);
}
private bool CanExecuteConnect(object o)
{
return ConnectionState == Mt5ConnectionState.Disconnected || ConnectionState == Mt5ConnectionState.Failed;
}
private void ExecuteConnect(object o)
{
if (string.IsNullOrEmpty(Host))
{
mMtApiClient.BeginConnect(Port);
}
else
{
mMtApiClient.BeginConnect(Host, Port);
}
}
private bool CanExecuteDisconnect(object o)
{
return ConnectionState == Mt5ConnectionState.Connected;
}
private void ExecuteDisconnect(object o)
{
mMtApiClient.BeginDisconnect();
}
private void ExecuteOrderSend(object o)
{
var request = TradeRequest.GetMqlTradeRequest();
MqlTradeResult result;
bool retVal = mMtApiClient.OrderSend(request, out result);
string historyItem;
if (retVal == true)
{
historyItem = "OrderSend successed. " + MqlTradeResultToString(result);
}
else
{
historyItem = "OrderSend failed. " + MqlTradeResultToString(result);
}
History.Add(historyItem);
}
private void ExecuteAccountInfoDouble(object o)
{
var result = mMtApiClient.AccountInfoDouble(AccountInfoDoublePropertyId);
var historyItem = string.Format("AccountInfoDouble: property_id = {0}; result = {1}", AccountInfoDoublePropertyId, result);
History.Add(historyItem);
}
private void ExecuteAccountInfoInteger(object o)
{
var result = mMtApiClient.AccountInfoInteger(AccountInfoIntegerPropertyId);
var historyItem = string.Format("AccountInfoInteger: property_id = {0}; result = {1}", AccountInfoDoublePropertyId, result);
History.Add(historyItem);
}
private void ExecuteAccountInfoString(object o)
{
var result = mMtApiClient.AccountInfoString(AccountInfoStringPropertyId);
var historyItem = string.Format("AccountInfoString: property_id = {0}; result = {1}", AccountInfoDoublePropertyId, result);
History.Add(historyItem);
}
private void ExecuteCopyTime(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
DateTime[] timesArray;
var count = mMtApiClient.CopyTime(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out timesArray);
if (count > 0)
{
foreach (var time in timesArray)
{
TimeSeriesResults.Add(time.ToString());
}
History.Add("CopyTime success");
}
}
}
private void ExecuteCopyOpen(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
double[] opensArray;
var count = mMtApiClient.CopyOpen(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out opensArray);
if (count > 0)
{
foreach (var open in opensArray)
{
TimeSeriesResults.Add(open.ToString());
}
History.Add("CopyOpen success");
}
}
}
private void ExecuteCopyHigh(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
double[] array;
var count = mMtApiClient.CopyHigh(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopyHigh success");
}
}
}
private void ExecuteCopyLow(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
double[] array;
var count = mMtApiClient.CopyLow(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopyLow success");
}
}
}
private void ExecuteCopyClose(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
double[] array;
var count = mMtApiClient.CopyClose(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopyClose success");
}
}
}
private void ExecuteCopyRates(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
MqlRates[] ratesArray;
var count = mMtApiClient.CopyRates(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out ratesArray);
if (count > 0)
{
foreach (var rates in ratesArray)
{
TimeSeriesResults.Add(string.Format("time={0}; open={1}; high={2}; low={3}; close={4}; tick_volume={5}; spread={6}; real_volume={7}",
rates.time, rates.open, rates.high, rates.low, rates.close, rates.tick_volume, rates.spread, rates.tick_volume));
}
History.Add("CopyRates success");
}
}
}
private void ExecuteCopyTickVolume(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
long[] array;
var count = mMtApiClient.CopyTickVolume(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopyTickVolume success");
}
}
}
private void ExecuteCopyRealVolume(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
long[] array;
var count = mMtApiClient.CopyRealVolume(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopyRealVolume success");
}
}
}
private void ExecuteCopySpread(object o)
{
if (TimeSeriesValues != null && string.IsNullOrEmpty(TimeSeriesValues.SymbolValue) == false)
{
TimeSeriesResults.Clear();
int[] array;
var count = mMtApiClient.CopySpread(TimeSeriesValues.SymbolValue, TimeSeriesValues.TimeFrame, TimeSeriesValues.StartPos, TimeSeriesValues.Count, out array);
if (count > 0)
{
foreach (var value in array)
{
TimeSeriesResults.Add(value.ToString());
}
History.Add("CopySpread success");
}
}
}
private void ExecuteSymbolsTotal(object o)
{
var selectedCount = mMtApiClient.SymbolsTotal(true);
History.Add("SymbolsTotal(true) success, result = " + selectedCount.ToString());
var commonCount = mMtApiClient.SymbolsTotal(false);
History.Add("SymbolsTotal(false) success, result = " + selectedCount.ToString());
}
private void ExecuteSymbolName(object o)
{
var selectedSymbol = mMtApiClient.SymbolName(5, true);
History.Add("SymbolName(5, true) success, result = " + selectedSymbol);
var commonSymbol = mMtApiClient.SymbolName(5, false);
History.Add("SymbolName(5, false) success, result = " + commonSymbol);
}
private void ExecuteSymbolSelect(object o)
{
var retVal = mMtApiClient.SymbolSelect("AUDJPY", true);
History.Add("SymbolSelect(AUDJPY, true) success, result = " + retVal);
//var retVal1 = mMtApiClient.SymbolSelect("AUDJPY", false);
//History.Add("SymbolSelect(AUDJPY, false) success, result = " + retVal1);
}
private void ExecuteSymbolIsSynchronized(object o)
{
var retVal = mMtApiClient.SymbolIsSynchronized("EURUSD");
History.Add("SymbolIsSynchronized(EURUSD) success, result = " + retVal);
}
private void ExecuteSymbolInfoDouble(object o)
{
var retVal = mMtApiClient.SymbolInfoDouble("EURUSD", ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_BID);
History.Add("SymbolInfoDouble(EURUSD, ENUM_SYMBOL_INFO_DOUBLE.SYMBOL_BID) success, result = " + retVal);
}
private void ExecuteSymbolInfoInteger(object o)
{
var retVal = mMtApiClient.SymbolInfoInteger("EURUSD", ENUM_SYMBOL_INFO_INTEGER.SYMBOL_SPREAD);
History.Add("SymbolInfoInteger(EURUSD, ENUM_SYMBOL_INFO_INTEGER.SYMBOL_SPREAD) success, result = " + retVal);
}
private void ExecuteSymbolInfoString(object o)
{
var retVal = mMtApiClient.SymbolInfoString("EURUSD", ENUM_SYMBOL_INFO_STRING.SYMBOL_DESCRIPTION);
History.Add("SymbolInfoString(EURUSD, ENUM_SYMBOL_INFO_STRING.SYMBOL_DESCRIPTION) success, result = " + retVal);
}
private void ExecuteSymbolInfoTick(object o)
{
MqlTick tick;
var retVal = mMtApiClient.SymbolInfoTick("EURUSD", out tick);
History.Add("SymbolInfoTick(EURUSD) success, result = " + retVal);
History.Add("SymbolInfoTick(EURUSD) tick.time = " + tick.time);
History.Add("SymbolInfoTick(EURUSD) tick.bid = " + tick.bid);
History.Add("SymbolInfoTick(EURUSD) tick.ask = " + tick.ask);
History.Add("SymbolInfoTick(EURUSD) tick.last = " + tick.last);
History.Add("SymbolInfoTick(EURUSD) tick.volume = " + tick.volume);
}
private void ExecuteSymbolInfoSessionQuote(object o)
{
DateTime from;
DateTime to;
var retVal = mMtApiClient.SymbolInfoSessionQuote("EURUSD", ENUM_DAY_OF_WEEK.MONDAY, 0, out from, out to);
History.Add("SymbolInfoSessionQuote(EURUSD) success, result = " + retVal);
History.Add("SymbolInfoSessionQuote(EURUSD) from = " + from);
History.Add("SymbolInfoSessionQuote(EURUSD) to = " + to);
}
private void ExecuteSymbolInfoSessionTrade(object o)
{
DateTime from;
DateTime to;
var retVal = mMtApiClient.SymbolInfoSessionTrade("EURUSD", ENUM_DAY_OF_WEEK.MONDAY, 0, out from, out to);
History.Add("SymbolInfoSessionTrade(EURUSD) success, result = " + retVal);
History.Add("SymbolInfoSessionTrade(EURUSD) from = " + from);
History.Add("SymbolInfoSessionTrade(EURUSD) to = " + to);
}
private void ExecuteMarketBookAdd(object o)
{
var retVal = mMtApiClient.MarketBookAdd("CHFJPY");
History.Add("MarketBookAdd(CHFJPY) success, result = " + retVal);
}
private void ExecuteMarketBookRelease(object o)
{
var retVal = mMtApiClient.MarketBookRelease("CHFJPY");
History.Add("MarketBookRelease(CHFJPY) success, result = " + retVal);
}
private void ExecuteMarketBookGet(object o)
{
MqlBookInfo[] book;
var retVal = mMtApiClient.MarketBookGet("EURUSD", out book);
History.Add("MarketBookGet(EURUSD) success, result = " + retVal);
if (retVal == true && book != null)
{
for (int i = 0; i < book.Length; i++)
{
History.Add(String.Format("MarketBookGet: book[{0}].price = {1}", i, book[i].price));
History.Add(String.Format("MarketBookGet: book[{0}].price = {1}", i, book[i].volume));
History.Add(String.Format("MarketBookGet: book[{0}].price = {1}", i, book[i].type));
}
}
}
private void runOnUIThread(Action action)
{
if (Application.Current != null)
{
Application.Current.Dispatcher.Invoke(action);
}
}
private void runOnUIThread<T>(Action<T> action, params Object[] args)
{
if (Application.Current != null)
{
Application.Current.Dispatcher.Invoke(action, args);
}
}
private object mLocker = new object();
private void mMtApiClient_QuoteUpdated(object sender, string symbol, double bid, double ask)
{
if (string.IsNullOrEmpty(symbol) == false)
{
if (_quotesMap.ContainsKey(symbol) == true)
{
var qvm = _quotesMap[symbol];
qvm.Bid = bid;
qvm.Ask = ask;
}
if (string.Equals(symbol, TradeRequest.Symbol))
{
if (TradeRequest.Type == ENUM_ORDER_TYPE.ORDER_TYPE_BUY)
{
TradeRequest.Price = ask;
}
else if (TradeRequest.Type == ENUM_ORDER_TYPE.ORDER_TYPE_SELL)
{
TradeRequest.Price = bid;
}
}
}
}
private void mMtApiClient_QuoteRemoved(object sender, Mt5QuoteEventArgs e)
{
runOnUIThread<Mt5Quote>(RemoveQuote, e.Quote);
}
private void mMtApiClient_QuoteAdded(object sender, Mt5QuoteEventArgs e)
{
runOnUIThread<Mt5Quote>(AddQuote, e.Quote);
}
private void mMtApiClient_ConnectionStateChanged(object sender, Mt5ConnectionEventArgs e)
{
ConnectionState = e.Status;
ConnectionMessage = e.ConnectionMessage;
runOnUIThread(ConnectCommand.RaiseCanExecuteChanged);
runOnUIThread(DisconnectCommand.RaiseCanExecuteChanged);
switch (e.Status)
{
case Mt5ConnectionState.Connected:
runOnUIThread(OnConnected);
break;
case Mt5ConnectionState.Disconnected:
runOnUIThread(OnDisconnected);
break;
}
}
private void AddQuote(Mt5Quote quote)
{
if (quote == null)
return;
QuoteViewModel qvm = null;
if (_quotesMap.ContainsKey(quote.Instrument) == false)
{
qvm = new QuoteViewModel(quote.Instrument);
_quotesMap[quote.Instrument] = qvm;
Quotes.Add(qvm);
}
else
{
qvm = _quotesMap[quote.Instrument];
}
qvm.FeedCount++;
qvm.Bid = quote.Bid;
qvm.Ask = quote.Ask;
}
private void RemoveQuote(Mt5Quote quote)
{
if (quote == null)
return;
if (_quotesMap.ContainsKey(quote.Instrument) == true)
{
var qvm = _quotesMap[quote.Instrument];
qvm.FeedCount--;
if (qvm.FeedCount <= 0)
{
_quotesMap.Remove(quote.Instrument);
Quotes.Remove(qvm);
}
}
}
private void OnConnected()
{
var quotes = mMtApiClient.GetQuotes();
if (quotes != null)
{
foreach (var quote in quotes)
{
AddQuote(quote);
}
}
}
private void OnDisconnected()
{
_quotesMap.Clear();
Quotes.Clear();
}
private static string MqlTradeResultToString(MqlTradeResult result)
{
return result != null ?
"Retcode = " + result.Retcode + ";"
+ " Comment = " + result.Comment + ";"
+ " Order = " + result.Order + ";"
+ " Volume = " + result.Volume + ";"
+ " Price = " + result.Price + ";"
+ " Deal = " + result.Deal + ";"
+ " Request_id = " + result.Request_id + ";"
+ " Bid = " + result.Bid + ";"
+ " Ask = " + result.Ask + ";" : string.Empty;
}
private void OnSelectedQuoteChanged()
{
if (SelectedQuote != null)
{
TradeRequest.Symbol = SelectedQuote.Instrument;
TimeSeriesValues.SymbolValue = SelectedQuote.Instrument;
}
}
#endregion
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
#region Private Fields
private readonly MtApi5Client mMtApiClient;
private Dictionary<string, QuoteViewModel> _quotesMap;
#endregion
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+126
View File
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 17</value>
</metadata>
</root>
+21
View File
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace TestApiClientUI
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("TestApiClientUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("DW")]
[assembly: AssemblyProduct("TestApiClientUI")]
[assembly: AssemblyCopyright("Copyright © DW 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b8a613a1-ac11-4582-a67d-33bfd80fc490")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TestApiClientUI.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TestApiClientUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TestApiClientUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{663CC515-EAAE-47D4-8933-5008C2DA1160}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TestApiClientUI</RootNamespace>
<AssemblyName>TestApiClientUI</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Debug\TestApiClientUI.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Release\TestApiClientUI.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\MtApi\MtApi.csproj">
<Project>{7a76c388-a8fb-4949-8170-24d4742e934e}</Project>
<Name>MtApi</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
+20
View File
@@ -0,0 +1,20 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestMtApi", "TestMtApi\TestMtApi.vbproj", "{EB7C228D-9494-4985-845E-B8312450DF3D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x86.ActiveCfg = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Debug|x86.Build.0 = Debug|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x86.ActiveCfg = Release|x86
{EB7C228D-9494-4985-845E-B8312450DF3D}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>
+97
View File
@@ -0,0 +1,97 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.btnConnect = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label()
Me.ListBoxQuotesUpdate = New System.Windows.Forms.ListBox()
Me.btnDisconnect = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(47, 12)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(100, 20)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "8222"
'
'btnConnect
'
Me.btnConnect.Location = New System.Drawing.Point(153, 10)
Me.btnConnect.Name = "btnConnect"
Me.btnConnect.Size = New System.Drawing.Size(75, 23)
Me.btnConnect.TabIndex = 1
Me.btnConnect.Text = "Connect"
Me.btnConnect.UseVisualStyleBackColor = True
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(12, 15)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(29, 13)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Port:"
'
'ListBoxQuotesUpdate
'
Me.ListBoxQuotesUpdate.FormattingEnabled = True
Me.ListBoxQuotesUpdate.Location = New System.Drawing.Point(12, 51)
Me.ListBoxQuotesUpdate.Name = "ListBoxQuotesUpdate"
Me.ListBoxQuotesUpdate.Size = New System.Drawing.Size(297, 199)
Me.ListBoxQuotesUpdate.TabIndex = 3
'
'btnDisconnect
'
Me.btnDisconnect.Location = New System.Drawing.Point(234, 10)
Me.btnDisconnect.Name = "btnDisconnect"
Me.btnDisconnect.Size = New System.Drawing.Size(75, 23)
Me.btnDisconnect.TabIndex = 4
Me.btnDisconnect.Text = "Disconnect"
Me.btnDisconnect.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(318, 262)
Me.Controls.Add(Me.btnDisconnect)
Me.Controls.Add(Me.ListBoxQuotesUpdate)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.btnConnect)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents btnConnect As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents ListBoxQuotesUpdate As System.Windows.Forms.ListBox
Friend WithEvents btnDisconnect As System.Windows.Forms.Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+38
View File
@@ -0,0 +1,38 @@
Imports MtApi
Public Class Form1
Private apiClient As MtApiClient
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
apiClient = New MtApiClient
AddHandler apiClient.QuoteUpdated, AddressOf QuoteUpdatedHandler
End Sub
Sub QuoteUpdatedHandler(sender As Object, symbol As String, bid As Double, ask As Double)
Dim quoteSrt As String
quoteSrt = symbol + ": Bid = " + bid.ToString() + "; Ask = " + ask.ToString()
ListBoxQuotesUpdate.Invoke(Sub()
ListBoxQuotesUpdate.Items.Add(quoteSrt)
End Sub)
Console.WriteLine(quoteSrt)
End Sub
Private Sub btnConnect_Click(sender As System.Object, e As System.EventArgs) Handles btnConnect.Click
apiClient.BeginConnect(8222)
End Sub
Private Sub btnDisconnect_Click(sender As System.Object, e As System.EventArgs) Handles btnDisconnect.Click
apiClient.BeginDisconnect()
End Sub
End Class
@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.17929
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.TestMtApi.Form1
End Sub
End Class
End Namespace
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>
@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("TestMtApi")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("TestMtApi")>
<Assembly: AssemblyCopyright("Copyright © 2013")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("d49ddaa5-5fca-4f84-8750-7d36804fd070")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
@@ -0,0 +1,62 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.17929
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TestMtApi.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set(ByVal value As Global.System.Globalization.CultureInfo)
resourceCulture = value
End Set
End Property
End Module
End Namespace
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.17929
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.TestMtApi.My.MySettings
Get
Return Global.TestMtApi.My.MySettings.Default
End Get
End Property
End Module
End Namespace
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>
@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{EB7C228D-9494-4985-845E-B8312450DF3D}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>TestMtApi.My.MyApplication</StartupObject>
<RootNamespace>TestMtApi</RootNamespace>
<AssemblyName>TestMtApi</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>TestMtApi.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>TestMtApi.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="MtApi, Version=1.0.7.0, Culture=neutral, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+43
View File
@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
enum CodeErrorTypes
{
ERR_NO_ERROR = 0,
ERR_NO_RESULT = 1,
ERR_COMMON_ERROR = 2,
ERR_INVALID_TRADE_PARAMETERS = 3,
ERR_SERVER_BUSY = 4,
ERR_OLD_VERSION = 5,
ERR_NO_CONNECTION = 6,
ERR_NOT_ENOUGH_RIGHTS = 7,
ERR_TOO_FREQUENT_REQUESTS = 8,
ERR_MALFUNCTIONAL_TRADE = 9,
ERR_ACCOUNT_DISABLED = 64,
ERR_INVALID_ACCOUNT = 65,
ERR_TRADE_TIMEOUT = 128,
ERR_INVALID_PRICE = 129,
ERR_INVALID_STOPS = 130,
ERR_INVALID_TRADE_VOLUME = 131,
ERR_MARKET_CLOSED = 132,
ERR_TRADE_DISABLED = 133,
ERR_NOT_ENOUGH_MONEY = 134,
ERR_PRICE_CHANGED = 135,
ERR_OFF_QUOTES = 136,
ERR_BROKER_BUSY = 137,
ERR_REQUOTE = 138,
ERR_ORDER_LOCKED = 139,
ERR_LONG_POSITIONS_ONLY_ALLOWED = 140,
ERR_TOO_MANY_REQUESTS = 141,
ERR_TRADE_MODIFY_DENIED = 145,
ERR_TRADE_CONTEXT_BUSY = 146,
ERR_TRADE_EXPIRATION_DENIED = 147,
ERR_TRADE_TOO_MANY_ORDERS = 148,
ERR_TRADE_HEDGE_PROHIBITED = 149,
ERR_TRADE_PROHIBITED_BY_FIFO = 150
}
}
+22
View File
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
interface IMetaTrader
{
void Print(string msg);
void MessageBoxA(string msg);
string AccountName();
int AccountNumber();
bool IsDemo();
bool IsConnected();
string ErrorDescription(int errorCode);
int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit
, string comment, int magic, int expiration, int arrow_color);
bool OrderClose(int ticket, double lots, double price, int slippage, int color);
}
}
+229
View File
@@ -0,0 +1,229 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace TestServer
{
delegate void MetaTraderInfoHandler(string msg);
class MetaTrader: IMetaTrader, IDisposable
{
public MetaTrader(string accountName, int accountNumber)
{
mAccountName = accountName != null ? accountName : string.Empty;
mAccountNumber = accountNumber;
}
#region IMetaTrader
public void Print(string msg)
{
updateMetaTraderInfo(msg);
}
public void MessageBoxA(string msg)
{
updateMetaTraderInfo("[MessageBox] " + msg);
}
public string AccountName()
{
var msg = string.Format("MetaTrader: Commmand - AccountName");
updateMetaTraderInfo(msg);
return mAccountName;
}
public int AccountNumber()
{
var msg = string.Format("MetaTrader: Commmand - AccountNumber");
updateMetaTraderInfo(msg);
return mAccountNumber;
}
public bool IsDemo()
{
var msg = string.Format("MetaTrader: Commmand - IsDemo");
updateMetaTraderInfo(msg);
return mIsDemo;
}
public bool IsConnected()
{
var msg = string.Format("MetaTrader: Commmand - IsConnected");
updateMetaTraderInfo(msg);
return true;
}
public int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit
, string comment, int magic, int expiration, int arrow_color)
{
var msg = string.Format("MetaTrader: Commmand - OrderSend: cmd = {0}, symbol = {1}, volume = {2}, price = {3}, slippage = {4}, stoploss = {5}, takeprofit = {6}, comment = {7}, magic = {8}, expiration = {9}, arrow_color = {10}"
, cmd, symbol, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
updateMetaTraderInfo(msg);
Thread.Sleep(5000);
return ++mOrderCount;
}
public bool OrderClose(int ticket, double lots, double price, int slippage, int color)
{
var msg = string.Format("MetaTrader: Commmand - OrderClose, ticket = {0}, lots = {1}, price = {2}, slippage = {3}", ticket, lots, price, slippage);
updateMetaTraderInfo(msg);
return true;
}
public string ErrorDescription(int errorCode)
{
var msg = string.Format("MetaTrader: Commmand - ErrorDescription: errorCode = {0}", errorCode);
updateMetaTraderInfo(msg);
CodeErrorTypes errorType = (CodeErrorTypes)errorCode;
return errorType.ToString();
}
#endregion
#region Public Methods
public void Start()
{
foreach(var instrument in mInstruments)
{
instrument.Start();
}
mIsStarted = true;
}
public void Stop()
{
mIsStarted = false;
foreach (var chart in mInstrumentCharts)
{
chart.Stop();
}
foreach(var instrument in mInstruments)
{
instrument.Stop();
}
}
public void AddInstrument(MtInstrument instrument)
{
if (instrument != null && mInstruments.Contains(instrument) == false)
{
mInstruments.Add(instrument);
instrument.InstrumentUpdate += instrument_InstrumentUpdate;
if (mIsStarted == true)
instrument.Start();
}
}
public void RemoveInstrument(MtInstrument instrument)
{
if (instrument != null && mInstruments.Contains(instrument) == true)
{
mInstruments.Remove(instrument);
instrument.InstrumentUpdate -= instrument_InstrumentUpdate;
instrument.Stop();
}
}
public void AddInstrumentChart(MtInstrumentChart instrumentChart)
{
if (instrumentChart != null && mInstrumentCharts.Contains(instrumentChart) == false)
{
mInstrumentCharts.Add(instrumentChart);
instrumentChart.Start();
}
}
public void RemoveInstrumentChart(MtInstrumentChart instrumentChart)
{
if (instrumentChart != null && mInstrumentCharts.Contains(instrumentChart) == true)
{
mInstrumentCharts.Remove(instrumentChart);
instrumentChart.Stop();
}
}
public void SetDemo(bool isDemo)
{
mIsDemo = isDemo;
}
#endregion
#region Properties
public List<MtInstrument> Instruments
{
get { return mInstruments; }
}
public List<MtInstrumentChart> InstrumentCharts
{
get { return mInstrumentCharts; }
}
#endregion
#region Private Methods
void instrument_InstrumentUpdate(string symbol, double bid, double ask)
{
}
void updateMetaTraderInfo(string msg)
{
if (InfoUpdated != null)
InfoUpdated(msg);
}
#endregion
#region Events
public event MetaTraderInfoHandler InfoUpdated;
#endregion
#region Fields
private readonly string mAccountName;
private readonly int mAccountNumber;
private int mOrderCount = 0;
private readonly List<MtInstrument> mInstruments = new List<MtInstrument>();
private readonly List<MtInstrumentChart> mInstrumentCharts = new List<MtInstrumentChart>();
private bool mIsStarted = false;
private static List<string> OpTypes = new List<string> { "OP_BUY", "OP_SELL", "OP_BUYLIMIT", "OP_SELLLIMIT", "OP_BUYSTOP", "OP_SELLSTOP" };
private bool mIsDemo = true;
#endregion
#region IDisposable Members
public void Dispose()
{
}
#endregion
}
}
+145
View File
@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
enum MtExpertType
{
MtApiSymbol,
MtApiControl,
MtQuoteExpert
}
abstract class MtExpert
{
public MtExpert(MtExpertType expertType, IMetaTrader metatrader)
{
ExpertType = expertType;
mMetaTrader = metatrader;
}
#region Public Methods
public void Init()
{
Action a = () =>
{
mIsStartFuncBlocked = true;
init();
mIsStartFuncBlocked = false;
};
a.BeginInvoke(null, null);
}
public void Deinit()
{
Action a = () =>
{
deinit();
};
a.BeginInvoke(null, null);
}
public void Start()
{
Action a = () =>
{
if (mIsStartFuncBlocked == true)
return;
mIsStartFuncBlocked = true;
start();
mIsStartFuncBlocked = false;
};
a.BeginInvoke(null, null);
}
public void SetStopped()
{
mIsStopped = true;
}
public bool IsStopped()
{
return mIsStopped;
}
#endregion
#region Expert Methods
protected abstract void init();
protected abstract void deinit();
protected abstract void start();
#endregion
#region MetaTrader Functions
protected void Print(string msg)
{
if (mMetaTrader != null)
mMetaTrader.Print(msg);
}
protected void MessageBoxA(string msg)
{
if (mMetaTrader != null)
mMetaTrader.MessageBoxA(msg);
}
protected string AccountName()
{
return (mMetaTrader != null) ? mMetaTrader.AccountName() : string.Empty;
}
protected int AccountNumber()
{
return (mMetaTrader != null) ? mMetaTrader.AccountNumber() : -1;
}
protected bool IsDemo()
{
return (mMetaTrader != null) ? mMetaTrader.IsDemo() : false;
}
public bool IsConnected()
{
return (mMetaTrader != null) ? mMetaTrader.IsConnected() : false;
}
protected int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit
, string comment, int magic, int expiration, int arrow_color)
{
return (mMetaTrader != null) ? mMetaTrader.OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color) : -1;
}
protected bool OrderClose(int ticket, double lots, double price, int slippage, int color)
{
return (mMetaTrader != null) ? mMetaTrader.OrderClose(ticket, lots, price, slippage, color) : false;
}
protected string ErrorDescription(int errorCode)
{
return (mMetaTrader != null) ? mMetaTrader.ErrorDescription(errorCode) : string.Empty;
}
#endregion
#region Properties
public MtExpertType ExpertType { get; private set; }
public string Symbol { get; set; }
public double Bid { get; set; }
public double Ask { get; set; }
#endregion
#region Fields
private readonly IMetaTrader mMetaTrader;
private volatile bool mIsStopped = false;
private volatile bool mIsStartFuncBlocked = false;
#endregion
}
}
+129
View File
@@ -0,0 +1,129 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace TestServer
{
public delegate void InstrumentEventHandler(string symbol, double bid, double ask);
public class MtInstrument
{
public MtInstrument(string symbol, double startBid, double startAsk)
{
_symbol = symbol;
_bid = startBid;
_ask = startAsk;
}
private void work()
{
Debug.WriteLine(string.Format("[INFO] MetaTrader Instrument {0} is runned.", _symbol));
while (_isRunning)
{
if (_trendCycle <= 0)
{
Random randomCicle = new Random();
_trendCycle = randomCicle.Next(1, 10);
Random randomValue = new Random();
int tmpValue = randomValue.Next(1, 100);
_trend = (tmpValue > 50) ? 1 : -1;
}
Random randomCount = new Random();
int pipsCount = randomCount.Next(1, 4);
double change = (_trend * pipsCount * _pip);
lock (_lockPrice)
{
_bid += change;
_ask += change;
}
if (InstrumentUpdate != null)
InstrumentUpdate(_symbol, _bid, _ask);
_trendCycle--;
Random randomSleepValue = new Random();
int sleepValue = randomSleepValue.Next(200, 500);
Thread.Sleep(sleepValue);
}
Debug.WriteLine(string.Format("[INFO] MetaTrader Instrument {0} is stopepd.", _symbol));
}
public void Start()
{
_isRunning = true;
Thread thread = new Thread(work);
thread.Name = "Instrument_" + Symbol;
thread.Start();
}
public void Stop()
{
_isRunning = false;
}
public double Bid
{
get
{
lock (_lockPrice)
{
return _bid;
}
}
}
public double Ask
{
get
{
lock (_lockPrice)
{
return _ask;
}
}
}
public string Symbol
{
get
{
lock (_lockPrice)
{
return _symbol;
}
}
}
#region Events
public event InstrumentEventHandler InstrumentUpdate;
#endregion
#region Fields
private volatile bool _isRunning = false;
private int _trend = 1;
private int _trendCycle = 0;
private const double _pip = 0.0001;
private object _lockPrice = new object();
private double _bid;
private double _ask;
private string _symbol = string.Empty;
#endregion
}
}
@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
class MtInstrumentChart
{
public MtInstrumentChart(MtInstrument instrument)
{
Instrument = instrument;
}
#region Public Methods
public void Start()
{
lock (mExpertLocker)
{
if (Expert != null)
{
if (Instrument != null)
Expert.Symbol = Instrument.Symbol;
Expert.Init();
}
}
if (Instrument != null)
{
Instrument.InstrumentUpdate += Instrument_InstrumentUpdate;
}
}
public void Stop()
{
if (Instrument != null)
{
Instrument.InstrumentUpdate -= Instrument_InstrumentUpdate;
}
lock (mExpertLocker)
{
if (Expert != null)
{
Expert.SetStopped();
Expert.Deinit();
}
}
}
public void AddExpert(MtExpert expert)
{
lock (mExpertLocker)
{
Expert = expert;
if (Expert != null)
{
if (Instrument != null)
Expert.Symbol = Instrument.Symbol;
Expert.Init();
}
}
}
#endregion
#region Private Methods
private void Instrument_InstrumentUpdate(string symbol, double bid, double ask)
{
lock (mExpertLocker)
{
if (Expert != null)
{
Expert.Symbol = symbol;
Expert.Bid = bid;
Expert.Ask = ask;
Expert.Start();
}
}
}
#endregion
#region Properties
public MtInstrument Instrument { get; private set; }
public MtExpert Expert { get; private set; }
private readonly object mExpertLocker = new object();
#endregion
}
}
+433
View File
@@ -0,0 +1,433 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace TestServer
{
class MtQuoteExpert : MtExpert
{
#region Dll Import functions
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int initExpert(int isLocal, int port, [MarshalAs(UnmanagedType.LPStr)] string symbol, int expertHandle, IntPtr err);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int deinitExpert(int port, int expertHandle, IntPtr err);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int updateQuote(int port, [MarshalAs(UnmanagedType.LPStr)] string symbol, double bid, double ask, IntPtr err);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int getCommand(int port, ref int res, IntPtr err);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int getCommandType(int port, int commandId, ref int res);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendIntResponse(int port, int commandId, int response);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendBooleanResponse(int port, int commandId, int response);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendDoubleResponse(int port, int commandId, double response);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendVoidResponse(int port, int commandId);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendDoubleArrayResponse(int port, int commandId, int size);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int sendStringResponse(int port, int commandId, [MarshalAs(UnmanagedType.LPStr)]StringBuilder response);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int getIntValue(int port, int commandId, int paramIndex, ref int res);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int getDoubleValue(int port, int commandId, int paramIndex, ref double res);
//[DllImport(@"d:\dw\project\forex\MetaTraderApi\Debug\MTConnector.dll")]
[DllImport("MT5Connector.dll")]
public static extern int getStringValue(int port, int commandId, int paramIndex, IntPtr res);
#endregion
public MtQuoteExpert(IMetaTrader metatrader, int port, bool isController) :
base(MtExpertType.MtQuoteExpert, metatrader)
{
Port = port;
IsController = isController;
}
#region Public Methods
public override string ToString()
{
return string.Format("ExpertType = {0}; Port = {1}; IsController = {2}", ExpertType, Port, IsController);
}
#endregion
#region Protected Methods
protected override void init()
{
//int isDemo = IsDemo() == true ? 1 : 0;
int isDemo = 1;
mId = IDcount++;
int isLocal = 1;
if (initExpert(isLocal, Port, Symbol, mId, message) == 0)
{
MessageBoxA("Init error: " + "MetaTraderApi");
isCrashed = true;
return;
}
runController();
//if (IsController == true)
//{
// runController();
// if (deinitExpert(Port, mId, message) == 0)
// {
// MessageBoxA("Deinitilization error:\n" + "MetaTraderApi");
// return;
// }
//}
}
protected override void deinit()
{
if (isCrashed == false)
{
if (deinitExpert(Port, mId, message) == 0)
{
MessageBoxA("Deinit error: " + "MetaTraderApi");
isCrashed = true;
}
}
}
protected override void start()
{
if (isCrashed == false)
{
if (updateQuote(Port, Symbol, Bid, Ask, message) == 0)
{
MessageBoxA("Start error: " + "MetaTraderApi");
isCrashed = true;
}
}
}
#endregion
#region Private Methods
private void runController()
{
string symbolValue = string.Empty;
string commentValue = string.Empty;
string msgValue = string.Empty;
string captionValue = string.Empty;
string filenameValue = string.Empty;
string ftp_pathValue = string.Empty;
string subjectValue = string.Empty;
string some_textValue = string.Empty;
int cmdValue = -1;
int slippageValue = -1;
int ticketValue = -1;
int oppositeValue = -1;
int magicValue = -1;
int expirationValue = -1;
int arrow_colorValue = -1;
int colorValue = -1;
int indexValue = -1;
int selectValue = -1;
int poolValue = -1;
int errorCodeValue = -1;
int typeValue = -1;
int flagValue = -1;
int millisecondsValue = -1;
int dateValue = -1;
int timeValue = -1;
double lotsValue = double.NaN;
double volumeValue = double.NaN;
double priceValue = double.NaN;
double stoplossValue = double.NaN;
double takeprofitValue = double.NaN;
int a1 = IsDemo() == true ? 1 : 0;
Print("MetaTraderApi Expert is runned as controller. Symbol: " + Symbol);
while (!IsStopped())
{
Thread.Sleep(1000);
int commandId = -1;
if (getCommand(Port, ref commandId, message) == 0)
{
Print("[ERROR] getCommand");
isCrashed = true;
return;
}
//try
//{
// waitRequest(Port, ref commandId, message);
//}
//catch
//{
// Print("[ERROR] waitRequest");
// isCrashed = true;
// return;
//}
//if (waitRequest(Port, ref commandId, message) == 0)
//{
// Print("[ERROR] waitRequest");
// isCrashed = true;
// return;
//}
if (commandId < 0)
continue;
Print("MetaTraderApi Expert recieved command. Symbol: " + Symbol);
int commandType = 0;
if (getCommandType(Port, commandId, ref commandType) == 0)
{
Print("[ERROR] getCommandType");
continue;
}
switch (commandType)
{
case 0: //NoCommmand
break;
case 1: //OrderSend
{
//if (getStringValue(Port, mId, 0, ref symbolValue) == 0)
//{
// PrintParamError("symbolValue");
// return;
//}
if (getIntValue(Port, commandId, 1, ref cmdValue) == 0)
{
PrintParamError("cmd");
continue;
}
if (getDoubleValue(Port, commandId, 2, ref volumeValue) == 0)
{
PrintParamError("volume");
continue;
}
if (getDoubleValue(Port, commandId, 3, ref priceValue) == 0)
{
PrintParamError("price");
continue;
}
if (getIntValue(Port, commandId, 4, ref slippageValue) == 0)
{
PrintParamError("slippage");
continue;
}
if (getDoubleValue(Port, commandId, 5, ref stoplossValue) == 0)
{
PrintParamError("stoploss");
continue;
}
if (getDoubleValue(Port, commandId, 6, ref takeprofitValue) == 0)
{
PrintParamError("takeprofit");
continue;
}
//if (getStringValue(Port, mId, 7, ref commentValue) == 0)
//{
// PrintParamError("commentValue");
// return;
//}
if (getIntValue(Port, commandId, 8, ref magicValue) == 0)
{
PrintParamError("magic");
continue;
}
if (getIntValue(Port, commandId, 9, ref expirationValue) == 0)
{
PrintParamError("expiration");
continue;
}
if (getIntValue(Port, commandId, 10, ref arrow_colorValue) == 0)
{
PrintParamError("arrow_color");
continue;
}
if (sendIntResponse(Port, commandId, OrderSend(symbolValue, cmdValue, volumeValue, priceValue, slippageValue, stoplossValue, takeprofitValue, commentValue, magicValue, expirationValue, arrow_colorValue)) == 0)
{
PrintResponseError("OrderSend");
continue;
}
}
break;
//OrderClose
case 2:
{
if (getIntValue(Port, commandId, 0, ref ticketValue) == 0)
{
PrintParamError("ticket");
continue;
}
if (getDoubleValue(Port, commandId, 1, ref lotsValue) == 0)
{
PrintParamError("lots");
continue;
}
if (getDoubleValue(Port, commandId, 2, ref priceValue) == 0)
{
PrintParamError("price");
continue;
}
if (getIntValue(Port, commandId, 3, ref slippageValue) == 0)
{
PrintParamError("slippage");
continue;
}
if (getIntValue(Port, commandId, 4, ref colorValue) == 0)
{
PrintParamError("color");
continue;
}
//RefreshRates();
var result = OrderClose(ticketValue, lotsValue, priceValue, slippageValue, colorValue);
int responseValue = result == true ? 1 : 0;
if (sendBooleanResponse(Port, commandId, responseValue) == 0)
{
PrintResponseError("OrderClose");
continue;
}
}
break;
//IsConnected
case 27:
{
var result = IsConnected();
int responseValue = result == true ? 1 : 0;
if (sendBooleanResponse(Port, commandId, responseValue) == 0)
{
PrintResponseError("IsConnected");
continue;
}
}
break;
//IsDemo
case 28:
{
var result = true;// IsDemo();
int responseValue = result == true ? 1 : 0;
sendBooleanResponse(Port, commandId, responseValue);
}
break;
//ErrorDescription
case 39:
{
//int errorCode = getIntValueOfField(0);
//var result = ErrorDescription(errorCode);
//sendStringResponse(result);
}
break;
//iCloseArray
case 144:
{
int sizeValue = 0;
if (getIntValue(Port, commandId, 3, ref sizeValue) == 0)
{
PrintParamError("slippage");
continue;
}
if (sendDoubleArrayResponse(Port, commandId/*, prices*/, 100) == 0)
{
PrintResponseError("iCloseArray");
continue;
}
}
break;
default: //Unknown Commmand
Print(string.Format("MetaTrader: Unknown Commmand: code = {0}", commandType));
sendVoidResponse(Port, commandId);
break;
}
}
}
private void PrintParamError(string paramName)
{
Print("[ERROR] parameter: " + paramName);
}
private void PrintResponseError(string commandName)
{
Print("[ERROR] response: " + commandName);
}
#endregion
#region Properties
public int Port { get; private set; }
public bool IsController { get; private set; }
#endregion
#region Fields
private IntPtr message = IntPtr.Zero;
private bool isCrashed = false;
private int mId = -1;
private static int IDcount = 0;
#endregion
}
}
+243
View File
@@ -0,0 +1,243 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Pipes;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
namespace TestServer
{
class Program
{
static MetaTrader createMetaTrader(string accountName, int accountNumber)
{
MetaTrader mt = new MetaTrader(accountName, accountNumber);
mt.AddInstrument(new MtInstrument("EURUSD", 1.3, 1.4));
mt.AddInstrument(new MtInstrument("EURJPY", 1.3, 1.4));
mt.AddInstrument(new MtInstrument("EURAUD", 1.3, 1.4));
mt.AddInstrument(new MtInstrument("USDAUD", 1.3, 1.4));
mt.AddInstrument(new MtInstrument("USDJPY", 1.3, 1.4));
return mt;
}
static MtInstrument selectInstrument(List<MtInstrument> instruments)
{
MtInstrument result = null;
if (instruments != null)
{
Console.Clear();
Console.WriteLine("Select Instrument:");
foreach (var ins in instruments)
Console.WriteLine("{0} - {1}", instruments.IndexOf(ins), ins.Symbol);
string selectedIndexStr = Console.ReadLine();
int selectedIndex = -1;
int.TryParse(selectedIndexStr, out selectedIndex);
if (selectedIndex >= 0 && selectedIndex < instruments.Count)
{
result = instruments[selectedIndex];
}
else
{
Console.WriteLine("ERROR: Invalid number of Instrument!\nPress any key...");
}
}
return result;
}
static MtInstrumentChart selectChart(List<MtInstrumentChart> instrumentCharts)
{
MtInstrumentChart result = null;
if (instrumentCharts != null)
{
Console.WriteLine("Select Chart:");
foreach (var chart in instrumentCharts)
{
if (chart.Instrument != null)
{
Console.WriteLine("{0} - {1}", instrumentCharts.IndexOf(chart), chart.Instrument.Symbol);
}
}
string selectedIndexStr = Console.ReadLine();
int selectedIndex = -1;
int.TryParse(selectedIndexStr, out selectedIndex);
if (selectedIndex >= 0 && selectedIndex < instrumentCharts.Count)
{
result = instrumentCharts[selectedIndex];
}
else
{
Console.WriteLine("ERROR: Invalid number of Chart!\nPress any key...");
}
}
return result;
}
static void addChart(MetaTrader mt)
{
Console.Clear();
Console.WriteLine("Adding Chart.");
var selectedIinstrument = selectInstrument(mt.Instruments);
if (selectedIinstrument != null)
{
var instrumentChart = new MtInstrumentChart(selectedIinstrument);
mt.AddInstrumentChart(instrumentChart);
}
}
static void removeChart(MetaTrader mt)
{
var selectedChart = selectChart(mt.InstrumentCharts);
if (selectedChart != null)
{
mt.RemoveInstrumentChart(selectedChart);
}
}
static void addExpert(MetaTrader mt)
{
var selectedChart = selectChart(mt.InstrumentCharts);
if (selectedChart != null)
{
bool isController = false;
Console.WriteLine("Is Expert controller (y/n) ?");
ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine();
switch (keyInfo.Key)
{
case ConsoleKey.N:
isController = false;
break;
case ConsoleKey.Y:
isController = true;
break;
}
Console.WriteLine("Input Port property (8222 - default): ");
string portStr = Console.ReadLine();
int port = 8222;
if (int.TryParse(portStr, out port) == false)
port = 8222;
var expert = new MtQuoteExpert(mt, port, isController);
if (expert != null)
{
selectedChart.AddExpert(expert);
}
}
}
static void printCharts(List<MtInstrumentChart> instrumentCharts)
{
if (instrumentCharts != null)
{
if (instrumentCharts.Count > 0)
{
Console.WriteLine("Working Charts:");
foreach (var chart in instrumentCharts)
{
if (chart.Instrument != null)
{
string chartInfo = chart.Instrument.Symbol;
if (chart.Expert != null)
{
chartInfo += " - ";
chartInfo += chart.Expert.ToString();
}
Console.WriteLine(chartInfo);
}
}
}
else
{
Console.WriteLine("No working Charts.");
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
var mt = createMetaTrader("Vyacheslav Demidyuk", 9107044);
mt.SetDemo(false);
mt.InfoUpdated += new MetaTraderInfoHandler(mt_InfoUpdated);
mt.Start();
Console.WriteLine("Test Server of MetaTraderApi.");
Console.WriteLine("MetaTrader started.");
Console.WriteLine("Press any key to continue...\n");
Console.ReadKey();
bool isWorked = true;
do
{
Console.Clear();
printCharts(mt.InstrumentCharts);
Console.WriteLine("Choose command:");
Console.WriteLine("A- Add Chart");
Console.WriteLine("R- Remove Chart");
Console.WriteLine("E- Add Expert");
Console.WriteLine("Esc- Exit");
ConsoleKeyInfo keyInfo = Console.ReadKey();
switch (keyInfo.Key)
{
case ConsoleKey.A:
addChart(mt);
break;
case ConsoleKey.R:
removeChart(mt);
break;
case ConsoleKey.E:
addExpert(mt);
break;
case ConsoleKey.Escape:
isWorked = false;
break;
}
} while (isWorked);
Console.WriteLine("MetaTrader stopped.");
mt.Stop();
}
static void mt_InfoUpdated(string msg)
{
Console.WriteLine(msg);
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("TestServer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("DW")]
[assembly: AssemblyProduct("TestServer")]
[assembly: AssemblyCopyright("Copyright © DW 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f96bb2dc-0e55-43e1-a5e4-7989310a09cc")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+73
View File
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{220F01DF-8489-44F3-9C79-D5AFFCE94D6B}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TestServer</RootNamespace>
<AssemblyName>TestServer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CodeErrorTypes.cs" />
<Compile Include="IMetaTrader.cs" />
<Compile Include="MtExpert.cs" />
<Compile Include="MtInstrument.cs" />
<Compile Include="MetaTrader.cs" />
<Compile Include="MtInstrumentChart.cs" />
<Compile Include="MtQuoteExpert.cs.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
-1
View File
@@ -1 +0,0 @@
copy $(TargetPath) $(SolutionDir)..\AutoTrade\MT5Broker\libs\$(TargetFileName)
-4
View File
@@ -1,4 +0,0 @@
TraderAppsMarket
Provides an application programming interface for .Net applications to remote control MetaTrader 4 terminal via TCP/IP.
This API support most MQL fuctions.