CBTrade/CBTrade.vcxproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/CBTrade.vcxproj.filters | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/CBTrade.vcxproj.user | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/MainFrame.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/MainFrame.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/MyNetworkApi.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/MyNetworkApi.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/ViewManager.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/ViewManager.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/main.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
CBTrade/packages.config | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
CBTrade/CBTrade.vcxproj
New file @@ -0,0 +1,192 @@ <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug|x64"> <Configuration>Debug</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|x64"> <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <VCProjectVersion>16.0</VCProjectVersion> <Keyword>Win32Proj</Keyword> <ProjectGuid>{8bff1459-65b0-4a91-b278-d1ef8fa3e031}</ProjectGuid> <RootNamespace>CBTrade</RootNamespace> <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Label="Shared"> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LinkIncremental>false</LinkIncremental> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <SDLCheck>false</SDLCheck> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_lib;..\wxCharts\lib\vc_lib;..\gmsdk\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>wxchartsd.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>false</SDLCheck> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_lib;..\wxCharts\lib\vc_lib;..\gmsdk\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>wxcharts.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <SDLCheck>false</SDLCheck> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_x64_lib;..\wxCharts\lib\vc_x64_lib;gmsdk\lib\win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>wxchartsd.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>false</SDLCheck> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_x64_lib;..\wxCharts\lib\vc_x64_lib;..\gmsdk\lib\win64;..\lib_config\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalDependencies>wxcharts.lib;gmsdk.lib;libconfig++.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\common_nopch\ConfigUtil.cpp" /> <ClCompile Include="..\common_nopch\md5.cpp" /> <ClCompile Include="..\common_nopch\NetworkApi.cpp" /> <ClCompile Include="..\common_nopch\SocketManager.cpp" /> <ClCompile Include="..\common_nopch\WidgetsRenderUtil.cpp" /> <ClCompile Include="..\common_nopch\Win32Util.cpp" /> <ClCompile Include="main.cpp" /> <ClCompile Include="MainFrame.cpp" /> <ClCompile Include="MyNetworkApi.cpp" /> <ClCompile Include="ViewManager.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\common_nopch\ConfigUtil.h" /> <ClInclude Include="..\common_nopch\JsonUtil.h" /> <ClInclude Include="..\common_nopch\md5.h" /> <ClInclude Include="..\common_nopch\NetworkApi.h" /> <ClInclude Include="..\common_nopch\SocketManager.h" /> <ClInclude Include="..\common_nopch\StringUtil.h" /> <ClInclude Include="..\common_nopch\TimeUtil.h" /> <ClInclude Include="..\common_nopch\WidgetsRenderUtil.h" /> <ClInclude Include="..\common_nopch\Win32Util.h" /> <ClInclude Include="MainFrame.h" /> <ClInclude Include="MyNetworkApi.h" /> <ClInclude Include="ViewManager.h" /> </ItemGroup> <ItemGroup> <None Include="packages.config" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> <Import Project="..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets" Condition="Exists('..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets')" /> </ImportGroup> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText> </PropertyGroup> <Error Condition="!Exists('..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets'))" /> </Target> </Project> CBTrade/CBTrade.vcxproj.filters
New file @@ -0,0 +1,96 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="源文件"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="头文件"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> </Filter> <Filter Include="资源文件"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> <Filter Include="头文件\common"> <UniqueIdentifier>{b3ab7b2c-6fce-467c-bdd0-4a4b5d2bf93e}</UniqueIdentifier> </Filter> <Filter Include="源文件\common"> <UniqueIdentifier>{e1eb4e05-1830-4cc3-98b1-ad5f7db894cc}</UniqueIdentifier> </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="main.cpp"> <Filter>源文件</Filter> </ClCompile> <ClCompile Include="MainFrame.cpp"> <Filter>源文件</Filter> </ClCompile> <ClCompile Include="ViewManager.cpp"> <Filter>源文件</Filter> </ClCompile> <ClCompile Include="..\common_nopch\ConfigUtil.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="..\common_nopch\md5.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="..\common_nopch\NetworkApi.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="..\common_nopch\SocketManager.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="..\common_nopch\WidgetsRenderUtil.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="..\common_nopch\Win32Util.cpp"> <Filter>源文件\common</Filter> </ClCompile> <ClCompile Include="MyNetworkApi.cpp"> <Filter>源文件</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="MainFrame.h"> <Filter>头文件</Filter> </ClInclude> <ClInclude Include="ViewManager.h"> <Filter>头文件</Filter> </ClInclude> <ClInclude Include="..\common_nopch\ConfigUtil.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\JsonUtil.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\md5.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\NetworkApi.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\SocketManager.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\StringUtil.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\TimeUtil.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\WidgetsRenderUtil.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="..\common_nopch\Win32Util.h"> <Filter>头文件\common</Filter> </ClInclude> <ClInclude Include="MyNetworkApi.h"> <Filter>头文件</Filter> </ClInclude> </ItemGroup> <ItemGroup> <None Include="packages.config" /> </ItemGroup> </Project> CBTrade/CBTrade.vcxproj.user
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LocalDebuggerEnvironment>PATH=D:\workspace\GP\trade_desk_cplus\TradeDesk\gmsdk\lib\win64 $(LocalDebuggerEnvironment)</LocalDebuggerEnvironment> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> </PropertyGroup> </Project> CBTrade/MainFrame.cpp
New file @@ -0,0 +1,27 @@ #include "MainFrame.h" #include <wx/frame.h> #include <wx/panel.h> #include <wx/sizer.h> #include <string.h> BEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_MENU(wxID_ABOUT, MainFrame::OnAbout) EVT_MENU(wxID_EXIT, MainFrame::OnQuit) END_EVENT_TABLE() MainFrame::MainFrame(const wxString& title):wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT)) { viewManager = new ViewManager(); viewManager->initView(this); } void MainFrame::OnQuit(wxCommandEvent& event) { } void MainFrame::OnAbout(wxCommandEvent& event) { } CBTrade/MainFrame.h
New file @@ -0,0 +1,27 @@ #pragma once #include <wx/wx.h> #include <wx/listctrl.h> #include <wx/dataview.h> #include <list> #include "ViewManager.h" class MainFrame:public wxFrame { private: ViewManager* viewManager; public: // Constructor MainFrame(const wxString& title); // Event handlers void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); private: // This class handles events DECLARE_EVENT_TABLE() }; CBTrade/MyNetworkApi.cpp
New file @@ -0,0 +1,83 @@ #include "MyNetworkApi.h" string MyNetworkApi::get_all_positions(string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_code_position_info"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string MyNetworkApi::get_money() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_account_money"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string MyNetworkApi::buy(string code, int price_type, int volume,string price) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); writer.StartObject(); writer.Key("type"); writer.String("buy"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.Key("price_type"); writer.Int(price_type); writer.Key("volume"); writer.Int(volume); writer.Key("price"); writer.String(price.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string MyNetworkApi::sell(string code, int price_type, int volume, string price) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); writer.StartObject(); writer.Key("type"); writer.String("sell"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.Key("price_type"); writer.Int(price_type); writer.Key("volume"); writer.Int(volume); writer.Key("price"); writer.String(price.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } CBTrade/MyNetworkApi.h
New file @@ -0,0 +1,40 @@ #pragma once #include "../common_nopch/NetworkApi.h" class MyNetworkApi:public NetworkApi { public: /// <summary> /// 持仓获取 /// </summary> /// <param name="code">代码</param> /// <returns></returns> static string get_all_positions(string code=""); /// <summary> /// 获取账户资金 /// </summary> /// <returns></returns> static string get_money(); /// <summary> /// 买入 /// </summary> /// <param name="code">代码</param> /// <param name="price_type">价格类型</param> /// <param name="volume">买入量</param> /// <returns></returns> static string buy(string code, int price_type, int volume, string price = ""); /// <summary> /// 卖出 /// </summary> /// <param name="code"></param> /// <param name="price_type"></param> /// <param name="volume"></param> /// <returns></returns> static string sell(string code, int price_type, int volume, string price=""); }; CBTrade/ViewManager.cpp
New file @@ -0,0 +1,428 @@ #include "ViewManager.h" #include <wx/charts/wxcharts.h> #include <gmapi.h> #include <set> ViewManager::ViewManager() { this->topWidgets = new TopWidgets(); this->tickWidgets = new TickWidgets(); this->moneyWidgets = new MoneyWidgets(); this->positionWidgets = new PositionWidgets(); this->sellWidgets = new SellWidgets(); set_token("123123"); } wxPanel* ViewManager::createSplitLine(wxWindow* parent) { wxPanel* splitterLine = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); splitterLine->SetBackgroundColour(wxColour(225, 225, 225)); return splitterLine; } void ViewManager::initView(wxWindow* window) { window->SetBackgroundColour(wxColor(255, 255, 255)); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); wxPanel* topPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TOP_HEIGHT)); wxPanel* tickPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TICK_HEIGHT)); wxPanel* moneyPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_MONEY_HEIGHT)); wxPanel* positionPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_POSITION_HEIGHT)); wxPanel* sellPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_SELL_HEIGHT)); sizer->Add(topPanel, 0, wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); sizer->Add(tickPanel, 0, wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); sizer->Add(moneyPanel, 0, wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); sizer->Add(positionPanel, 0, wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); sizer->Add(sellPanel, 0, wxLEFT | wxRIGHT, 2); window->SetSizer(sizer); this->initTopView(topPanel); this->initTickView(tickPanel); this->initMoneyView(moneyPanel); this->initPositionView(positionPanel); this->initSellView(sellPanel); } void ViewManager::initTopView(wxPanel* pancel) { wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); this->topWidgets->refreshBtn = new wxButton(pancel, wxID_ANY, "刷新", wxDefaultPosition, wxSize(50, -1)); this->topWidgets->msgLabel = new wxStaticText(pancel, wxID_ANY, "提示语提示语", wxDefaultPosition); this->topWidgets->codeEdit = new wxTextCtrl(pancel, wxID_ANY, "000333", wxDefaultPosition, wxSize(60, 25)); sizer->Add(this->topWidgets->codeEdit, 0, wxALL, 2); sizer->Add(this->topWidgets->msgLabel, 1, wxALIGN_CENTER_VERTICAL); sizer->Add(this->topWidgets->refreshBtn, 0, wxALL, 2); pancel->SetSizer(sizer); } class wxChartsPresentationDatasetTheme10 : public wxChartsDatasetTheme { public: wxChartsPresentationDatasetTheme10() { SetLineChartDatasetOptions(wxLineChartDatasetOptions( wxColor(220, 0, 0), wxColor(255, 255, 255), // wxColor(220, 220, 220, 0x33) wxColor(220, 0, 0, 0) )); } }; void ViewManager::initTickView(wxPanel* panel) { if (1 > 0) { return; } // 设置主题 wxChartsDefaultTheme->SetDatasetTheme(wxChartsDatasetId::CreateImplicitId(0), wxSharedPtr<wxChartsDatasetTheme>(new wxChartsPresentationDatasetTheme10())); wxVector<wxString> labels; labels.push_back("January"); labels.push_back("February"); labels.push_back("March"); labels.push_back("April"); labels.push_back("May"); labels.push_back("June"); labels.push_back("July"); wxChartsCategoricalData::ptr chartData = wxChartsCategoricalData::make_shared(labels); // Add the first dataset wxVector<wxDouble> points1; points1.push_back(3); points1.push_back(-2.5); points1.push_back(-1.2); points1.push_back(3); points1.push_back(6); points1.push_back(5); points1.push_back(1); wxChartsDoubleDataset::ptr dataset1(new wxChartsDoubleDataset("id0", points1)); chartData->AddDataset(dataset1); // Create the line chart widget from the constructed data const wxLineChartOptions *options = new wxLineChartOptions(); wxLineChartCtrl* lineChartCtrl = new wxLineChartCtrl(panel, wxID_ANY, chartData, wxCHARTSLINETYPE_STRAIGHT, *options, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); lineChartCtrl->SetBackgroundColour(*wxBLACK); wxBoxSizer* panelSizer = new wxBoxSizer(wxHORIZONTAL); panelSizer->Add(lineChartCtrl, 1, wxEXPAND); //panelSizer->Add(legendCtrl, 1, wxEXPAND); panel->SetSizer(panelSizer); } void ViewManager::initMoneyView(wxPanel* panel) { //wxStaticText* positionLabel;//持仓金额 wxStaticText* frozenLabel; //冻结金额 wxStaticText* totalLabel; // 账户总金额 wxStaticText* todayCommissionLabel;// 今日手续费 wxStaticText* todayProfitLabel;// 盈利金额 wxStaticText* todayProfitRateLabel;// 今日盈利比 wxStaticText* totalProfitLabel;// 累计盈利 // wxGridSizer* rootSizer = new wxGridSizer(2, 4, 10, 20); wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "可用资金:")); moneyWidgets->availableLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->availableLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "持仓资金:")); moneyWidgets->positionLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->positionLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "冻结资金:")); moneyWidgets->frozenLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->frozenLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "账户总金额:")); moneyWidgets->totalLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->totalLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "今日手续费:")); moneyWidgets->todayCommissionLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->todayCommissionLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "今日盈亏:")); moneyWidgets->todayProfitLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->todayProfitLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "今日盈亏比:")); moneyWidgets->todayProfitRateLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->todayProfitRateLabel); rootSizer->Add(sizer, 0, wxEXPAND); sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(new wxStaticText(panel, wxID_ANY, "累计盈亏:")); moneyWidgets->totalProfitLabel = new wxStaticText(panel, wxID_ANY, "--"); sizer->Add(moneyWidgets->totalProfitLabel); rootSizer->Add(sizer, 0, wxEXPAND); panel->SetSizer(rootSizer); } class ButtonRenderer : public wxDataViewCustomRenderer { public: ButtonRenderer(const wxString& varianttype = "string") : wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE) { } virtual bool Render(wxRect cell, wxDC* dc, int state) { // 设置绘制按钮的位置和大小 wxRect buttonRect(cell.GetPosition(), wxSize(40, 20)); dc->SetTextForeground(wxColour(64, 64, 64)); // 绘制按钮的外框 dc->SetPen(wxColour(225, 225, 225)); dc->SetBrush(wxColour(225, 225, 225)); dc->DrawRectangle(buttonRect); // 绘制按钮的文本 dc->DrawLabel("查看", buttonRect, wxALIGN_CENTER); return false; } // 点击事件处理方法 bool ActivateCell(const wxRect& WXUNUSED(cell), wxDataViewModel* WXUNUSED(model), const wxDataViewItem& WXUNUSED(item), unsigned int WXUNUSED(col), const wxMouseEvent* mouseEvent) override { // 处理点击事件 if (mouseEvent->LeftDown()) { wxMessageBox("单元格被点击"); } return false; // 返回 true 表示已经处理了点击事件 } virtual wxSize GetSize() const { // 返回按钮的大小 return wxSize(40, 20); } virtual bool SetValue(const wxVariant& value) { return true; } virtual bool GetValue(wxVariant& value) const { return true; } }; void ViewManager::initPositionView(wxPanel* panel) { wxDataViewListCtrl* listCtrl = new wxDataViewListCtrl( panel, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxLC_REPORT | wxBORDER_NONE); listCtrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, &ViewManager::OnPositionSelectionChanged, this); const int COL_COUNT = 10; std::string headers[COL_COUNT] = { "名称","涨幅","现价","L1现手","剩余持仓","持仓金额","盈亏","盈亏比","正股名称","更多" }; int colWidths[COL_COUNT] = { 70,50 ,60 ,50 ,70 ,100 ,90 ,50 ,80 ,50 }; for (int i = 0; i < COL_COUNT; i++) { if (i < COL_COUNT - 1) { listCtrl->AppendTextColumn(headers[i], wxDATAVIEW_CELL_INERT, colWidths[i]); } else { auto bc = new ButtonRenderer(); listCtrl->AppendColumn(new wxDataViewColumn(headers[i], bc, 9, colWidths[i], wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE)); } } for (int i = 0; i < 5; i++) { wxVector<wxVariant> data; data.push_back(wxVariant("美的转债")); data.push_back(wxVariant("10.2%")); data.push_back(wxVariant("123.123")); data.push_back(wxVariant("452")); data.push_back(wxVariant("30")); data.push_back(wxVariant("2000.00Ԫ")); data.push_back(wxVariant("+20000.10Ԫ")); data.push_back(wxVariant("1.01%")); data.push_back(wxVariant("美的集团")); data.push_back(""); listCtrl->AppendItem(data); } listCtrl->Refresh(); positionWidgets->listCtrlReport = listCtrl; wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(positionWidgets->listCtrlReport, 1, wxEXPAND); panel->SetSizer(sizer); } void ViewManager::initSellView(wxPanel* panel) { const int moneys[] = { 50000,40000,30000,20000,10000,5000,3000,2000,1000 }; //-------按钮操作区域 const int COLUMN_SPACE = 8; auto btnSizer = new wxBoxSizer(wxHORIZONTAL); wxPanel* btnPannel = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 55)); btnPannel->SetSizer(btnSizer); sellWidgets->buyLock = new wxCheckBox(btnPannel, wxID_ANY, "买锁定"); sellWidgets->buyMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1)); sellWidgets->sellLock = new wxCheckBox(btnPannel, wxID_ANY, "卖锁定"); sellWidgets->sellMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1)); auto bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->buyLock, 0, wxTOP, 5); bv->AddStretchSpacer(); bv->Add(sellWidgets->buyMoney, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 5); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->sellLock, 0, wxTOP, 5); bv->AddStretchSpacer(); bv->Add(sellWidgets->sellMoney, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); // 开启/关闭交易 sellWidgets->openTrade = new wxButton(btnPannel, wxID_ANY, "开启交易", wxDefaultPosition, wxSize(60, -1)); sellWidgets->closeTrade = new wxButton(btnPannel, wxID_ANY, "关闭交易", wxDefaultPosition, wxSize(60, -1)); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->openTrade, 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->closeTrade, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); // 想买单 sellWidgets->addWantBuy = new wxButton(btnPannel, wxID_ANY, "加想", wxDefaultPosition, wxSize(40, -1)); sellWidgets->removeWantBuy = new wxButton(btnPannel, wxID_ANY, "移想", wxDefaultPosition, wxSize(40, -1)); sellWidgets->wantBuyList = new wxButton(btnPannel, wxID_ANY, "想单", wxDefaultPosition, wxSize(40, -1)); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->addWantBuy, 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->removeWantBuy, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); btnSizer->Add(sellWidgets->wantBuyList, 0, wxEXPAND | wxLEFT, 3); // 卖出按钮 sellWidgets->sellBtn = new wxButton(btnPannel, wxID_ANY, "卖出", wxDefaultPosition, wxSize(80, -1)); wxFont font(15, sellWidgets->sellBtn->GetFont().GetFamily(), wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); sellWidgets->sellBtn->SetFont(font); btnSizer->Add(sellWidgets->sellBtn, 0, wxEXPAND | wxLEFT, 10); // 自动撤单/参数设置 sellWidgets->autoCancel = new wxCheckBox(btnPannel, wxID_ANY, "自动撤单"); sellWidgets->setting = new wxButton(btnPannel, wxID_ANY, "参数设置", wxDefaultPosition, wxSize(70, -1)); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->autoCancel, 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->setting, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); // 买价/卖价设置 const wxString prices_buy[] = { "笼子价", "跌停价","涨停价","现价","买5价" }; const wxString prices_sell[] = { "笼子价", "跌停价","涨停价","现价","卖5价" }; sellWidgets->sellPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1)); sellWidgets->buyPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1)); for (int i = 0; i < 5; i++) { sellWidgets->sellPrice->Append(prices_sell[i]); sellWidgets->buyPrice->Append(prices_buy[i]); } sellWidgets->sellPrice->SetSelection(1); sellWidgets->buyPrice->SetSelection(2); bv = new wxBoxSizer(wxVERTICAL); bv->Add(new wxStaticText(btnPannel, wxID_ANY, "卖价设置"), 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->sellPrice, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 10); bv = new wxBoxSizer(wxVERTICAL); bv->Add(new wxStaticText(btnPannel, wxID_ANY, "买价设置"), 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->buyPrice, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); // 买入 btnSizer->AddStretchSpacer(); sellWidgets->buyBtn = new wxButton(btnPannel, wxID_ANY, "买入", wxDefaultPosition, wxSize(50, -1)); sellWidgets->buyBtn->SetFont(font); btnSizer->Add(sellWidgets->buyBtn, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); //------- 卖金额区域 const int sellNumCount = sizeof(moneys) / sizeof(moneys[0]); for (int i = 0; i < sellNumCount; i++) { sellWidgets->sellNums.push_back(new wxButton(panel, wxID_ANY, std::to_string(moneys[i]), wxDefaultPosition, wxSize(-1, 30))); } auto sellNumsSizer = new wxBoxSizer(wxHORIZONTAL); for (std::list<wxButton*>::iterator e = sellWidgets->sellNums.begin(); e != sellWidgets->sellNums.end(); e++) { sellNumsSizer->Add(*e, 1, wxEXPAND | wxLEFT | wxRIGHT, 2); } auto rootSizer = new wxBoxSizer(wxVERTICAL); rootSizer->Add(btnPannel, 0, wxEXPAND | wxTOP, 5); rootSizer->Add(sellNumsSizer, 1, wxEXPAND | wxTOP, 5); panel->SetSizer(rootSizer); } void ViewManager::OnPositionSelectionChanged(wxDataViewEvent& event) { event.Skip(); //event.Veto(); } CBTrade/ViewManager.h
New file @@ -0,0 +1,98 @@ #pragma once #include <wx/wx.h> #include <wx/listctrl.h> #include <wx/dataview.h> #include <list> #define MAIN_WINDOW_WIDTH 720 #define PANNEL_TOP_HEIGHT 30 #define PANNEL_TICK_HEIGHT 360 #define PANNEL_MONEY_HEIGHT 60 #define PANNEL_POSITION_HEIGHT 310 #define PANNEL_SELL_HEIGHT 90 #define MAIN_WINDOW_HEIGHT (PANNEL_TOP_HEIGHT + PANNEL_TICK_HEIGHT + PANNEL_MONEY_HEIGHT + PANNEL_POSITION_HEIGHT + PANNEL_SELL_HEIGHT + 38 + 5*2) struct TopWidgets { wxButton* refreshBtn; wxTextCtrl* codeEdit; wxStaticText* msgLabel; }; struct TickWidgets { }; struct MoneyWidgets { wxStaticText* availableLabel;//可用资金 wxStaticText* positionLabel;//持仓金额 wxStaticText* frozenLabel; //冻结金额 wxStaticText* totalLabel; // 账户总金额 wxStaticText* todayCommissionLabel;// 今日手续费 wxStaticText* todayProfitLabel;// 盈利金额 wxStaticText* todayProfitRateLabel;// 今日盈利比 wxStaticText* totalProfitLabel;// 累计盈利 }; struct PositionWidgets { wxDataViewListCtrl* listCtrlReport; }; struct SellWidgets { wxCheckBox* buyLock; wxTextCtrl* buyMoney; wxCheckBox* sellLock; wxTextCtrl* sellMoney; wxButton* openTrade; wxButton* closeTrade; // 想买单 wxButton* addWantBuy; wxButton* removeWantBuy; wxButton* wantBuyList; wxButton* setting; wxCheckBox* autoCancel; wxChoice* buyPrice; wxChoice* sellPrice; wxButton* sellBtn; wxButton* buyBtn; std::list<wxButton*> sellNums; }; class ViewManager { private: TopWidgets* topWidgets; TickWidgets* tickWidgets; MoneyWidgets* moneyWidgets; PositionWidgets* positionWidgets; SellWidgets* sellWidgets; public: ViewManager(); static wxPanel* createSplitLine(wxWindow* parent); void initView(wxWindow* window); private: void initTopView(wxPanel* pancel); void initTickView(wxPanel* panel); void initMoneyView(wxPanel* panel); void initPositionView(wxPanel* panel); void initSellView(wxPanel* panel); void OnPositionSelectionChanged(wxDataViewEvent& event); }; CBTrade/main.cpp
New file @@ -0,0 +1,30 @@ #include<iostream> #include <wx/wx.h> #include "MyNetworkApi.h" #include "MainFrame.h" class App :public wxApp { public: /// <summary> /// 初始化函数 /// </summary> void InitData() { MyNetworkApi::set_server_info("43.138.167.68", 13008,"43.138.167.68", 13008); //MyNetworkApi::set_server_info("192.168.3.122", 13008, "192.168.3.122", 13008); MyNetworkApi::get_all_positions(); } bool OnInit() { InitData(); MainFrame* window = new MainFrame("可转债交易"); window->Show(); return true; } }; wxIMPLEMENT_APP(App); CBTrade/packages.config
New file @@ -0,0 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="tencent.rapidjson" version="1.1.1" targetFramework="native" /> </packages>