量化交易之C++篇 - 基础 - iostream、::、namespace、using、参数传递方式


#include <iostream> //  iostream:标准输入输出流   i: in(输入)   o: out(输出)   stream(流)

using namespace std; // 使用命名空间 std: 打开一个叫 std 的房间;

int main() {
    
	// cout 标准的输出
	// << 左移运算符
	// endl(end line): 结束换行
    
	cout << "hello visual studio" << 123456 << endl;

	system("pause"); // 阻塞功能

	return EXIT_SUCCESS; // 返回正常退出
}

//#define _CRT_SECURE_NO_WARNINGS

#include<iostream>

using namespace std;

int atk = 200;
void atkTest() {

	int atk = 100;

	cout << "攻击力为:" << atk << endl; // atk 为局部变量
	cout << "攻击力为:" << ::atk << endl; // ::atk 为全局变量

}


int main() {

	atkTest();

	return EXIT_SUCCESS;
}
#include <iostream>

using namespace std;

#include "game1.h"
#include "game2.h"


void test01() {
	LOL::goAtk();

	KingGlory::goAtk();
}

// namespace 命名空间主要用途 用来解决命名冲突的问题;
// 1. 命名空间下 可以放函数、变量、结构体、类;
// 2. 命名空间必须定义在全局作用域下;
// 3. 命名空间可以嵌套命名空间;
namespace A {
	void function();

	int m_A = 20;

	struct Person {};

	class MyClass {};

	namespace B {
		int m_A = 10;
	}

	void function() {
		cout << "A::function" << endl;
	}
}

// 4. 命名空间是开放的, 可以随时往原先的命名空间添加内容;
namespace A {
	int m_B = 100;
}

void function() {

	cout << "function" << endl;
}


// 5. 匿名命名空间 (只能再当前文件内使用)
namespace {
	int m_C = 0; // 相当于 static int m_C
	int m_D = 0; // 相当于 static int m_D
}


// 6. 命名空间可以起别名
namespace veryLongName {
	int m_A = 0;
}
void test02() {
	namespace veryShortName = veryLongName;
	cout << veryLongName::m_A << endl;
	cout << veryShortName::m_A << endl;
}

int main() {

	A::function();

	function();

	cout << "A::m_A: " << A::m_A << endl;

	cout << "A::B::m_A " << A::B::m_A << endl;

	cout << "A::m_B " << A::m_B << endl;

	test02();

	return EXIT_SUCCESS;
}










// game1.h
#include <iostream> 
using namespace std;

namespace LOL {
	void goAtk();
}



// game1.cpp
#include "game1.h" 


void LOL::goAtk() {

	cout << "LOL攻击实现" << endl;

}









// game2.h
#include <iostream> 

using namespace std;

namespace KingGlory {
	void goAtk();
}



// game2.cpp
#include "game2.h"

void KingGlory::goAtk() {

	cout << "王者荣耀攻击实现" << endl;

}






#include <iostream>

using namespace std;


namespace KingGlory {

	int sunwukongId = 100;
}

void test01() {
	int sunwukongId = 200;

	// 写了 using 声明后 下面这行代码说明以后看到的 sunwukongId 是用 KingGlory下的;
	//using KingGlory::sunwukongId;

	cout << "test01() 函数局部变量 sunwukongId: " << sunwukongId << endl;
	cout << "KingGlory::sunwukongId: " << KingGlory::sunwukongId << endl;
}


namespace LOL {
	int sunwukongId = 30;
}

void test02() {

	//int sunwukongId = 200;

	// using 编译指令;(就近原则)
	//using namespace KingGlory;

	using namespace LOL;

	cout << "LOL::sunwukongId: " << sunwukongId << endl;
}


int main() {
	
	test01();

	test02();

	return EXIT_SUCCESS;
}
// C++对C语言的增强;

#include <iostream>

using namespace std;


// 全局变量检测增强 (c++语言中可以检测出重复定义的全局变量)
int a;
//int a = 10;

// 函数检测增强
int getRectArea(int weight, int height) {
	return weight * height;
}


// struct 增强 (可以在结构体中写函数)
struct Person
{
	int m_Age;
	void plusAge() {
		m_Age++;
	};
};

void personTest() {

	Person person;
	person.m_Age = 10;

	cout << "before:" << person.m_Age << endl;
	person.plusAge();
	cout << "after:" << person.m_Age << endl;
}

// C++中可以直接用bool类型
bool flag = true;

void test02() {
	int a = 10;
	int& b = a;
	int c = 20;

	b = c;
	
	cout << "a:" << a << endl; // 20
	cout << "b:" << b << endl; // 20
	cout << "c:" << c << endl; // 20
}

void test03() {

	int arr[10];
	for (int i = 0; i < 10; i++) {
		arr[i] = i;
	}

	int(&pArray)[10] = arr;
	for (int i = 0; i < 10; i++) {
		cout << pArray[i] << " ";
	}
	cout << endl;

	// 给数组起别名 (一个具有 10 个元素的 int类型数组)
	typedef int(arrayRef)[10];
	arrayRef& pArray2 = arr;

	for (int i = 0; i < 10; i++) {
		cout << pArray2[i] << " ";
	}
	cout << endl;

}


int main() {

	int area = getRectArea(10, 10);

	//personTest();

	//test02();

	test03();

	return EXIT_SUCCESS;
}
// 参数的几种传递方式

#include <iostream>

using namespace std;


void swap_1(int a, int b) {
	int t = a;
	a = b;
	b = t;
}

void test01() {

	int a = 10;
	int b = 20;

	swap_1(a, b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}


void swap_2(int *a, int *b) {
	int p = *a;
	*a = *b;
	*b = p;
}

void test02() {

	int a = 10;
	int b = 20;

	swap_2(&a, &b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}



void swap_3(int& a, int& b) {
	int p = a;
	a = b;
	b = p;
}

void test03() {

	int a = 10;
	int b = 20;

	swap_3(a, b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}


int main() {

	test03();

	return EXIT_SUCCESS;
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于C++/Python的量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等)。其核心思想基于当前成熟的系统化交易方法,将整个系统化交易抽象为由市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法七大组件,你可以分别构建这些组件的策略资产库,在实际研究中对它们自由组合来观察系统的有效性、稳定性以及单一种类策略的效果。 *组合灵活,分类构建策略资产库**对系统化交易方法进行了良好的抽象,包含了九大策略组件:市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法、交易对象选择策略、资金分配策略。可以在此基础上构建自己的策略库,并进行灵活的组合和测试。在进行策略探索时,可以更加专注于某一方面的策略性能与影响。其主要功能模块如下: 目前项目包含了3个主要组成部分:基于C++的核心库、对C++进行包装的Python库、基于Python的交互式工具。 - C++核心库,提供了整体的策略框架,在保证性能的同时,已经考虑了对多线程和多核处理的支持,在未来追求更高运算速度提供便利。C++核心库,可以单独剥离使用,自行构建自己的客户端工具。 - Python库,提供了对C++库的包装,同时集成了talib库(如TA_SMA,对应talib.SMA),可以与numpy、pandas数据结构进行互相转换,为使用其他成熟的python数据分析工具提供了便利。 - 交互式探索工具,提供了K线、指标、系统信号等的基本绘图功能,用于对量化策略的探索和回测。 - **代码简洁,探索更便捷、自由** 同时支持面向对象和命令行编程范式。其中,命令行在进行策略探索时,代码简洁、探索更便捷、自由。 - **安全、自由、隐私,搭建自己的专属云量化平台** 结合 Python + Jupyter 的强大能力与云服务器,可以搭建自己专属的云量化平台。将Jupyter部署在云服务器上,随时随地的访问自己的云平台,即刻实现自己新的想法,如下图所示通过手机访问自己的云平台。结合Python强大成熟的数据分析、人工智能工具(如 numpy、scipy、pandas、TensorFlow)搭建更强大的人工智能平台。 - **数据存储方式可扩展** 目前支持本地HDF5格式、MySQL存储。默认使用HDF5,数据文件体积小、速度更快、备份更便利。
这是一个比较复杂的题目,需要详细说明需求及实现方式。以下是一个简化版的股票交易类及其核心函数的实现: ``` // 定义股票交易类 class StockTrading { public: // 构造函数,初始化股票代码、交易日期、初始资金 StockTrading(string stockCode, string tradeDate, double initCapital); // 买入股票 void buyStock(double price, int num); // 卖出股票 void sellStock(double price, int num); // 获取当前持仓股票数 int getHoldingStockNum(); // 获取当前持仓股票市值 double getHoldingStockValue(); // 获取当前账户总资产 double getTotalAsset(); private: string m_stockCode; // 股票代码 string m_tradeDate; // 交易日期 double m_initCapital; // 初始资金 int m_holdingStockNum; // 持仓股票数 double m_holdingStockValue; // 持仓股票市值 }; // 构造函数实现 StockTrading::StockTrading(string stockCode, string tradeDate, double initCapital) : m_stockCode(stockCode), m_tradeDate(tradeDate), m_initCapital(initCapital) { m_holdingStockNum = 0; m_holdingStockValue = 0; } // 买入股票实现 void StockTrading::buyStock(double price, int num) { double cost = price * num; if (cost > m_initCapital) { cout << "资金不足,无法买入股票!" << endl; return; } m_holdingStockNum += num; m_holdingStockValue += cost; m_initCapital -= cost; } // 卖出股票实现 void StockTrading::sellStock(double price, int num) { if (num > m_holdingStockNum) { cout << "持仓股票数量不足,无法卖出股票!" << endl; return; } double income = price * num; m_holdingStockNum -= num; m_holdingStockValue -= income; m_initCapital += income; } // 获取当前持仓股票数实现 int StockTrading::getHoldingStockNum() { return m_holdingStockNum; } // 获取当前持仓股票市值实现 double StockTrading::getHoldingStockValue() { return m_holdingStockValue; } // 获取当前账户总资产实现 double StockTrading::getTotalAsset() { return m_initCapital + m_holdingStockValue; } ``` 以上是一个简单的股票交易类实现,包括买入、卖出、查询持仓股票数量、查询持仓股票市值、查询账户总资产等功能。下面是一个简单的量化交易代码示例: ``` #include <iostream> #include "StockTrading.h" using namespace std; int main() { // 初始化股票交易类 StockTrading trading("600000", "20210501", 100000.0); // 模拟买入股票 trading.buyStock(6.0, 1000); // 模拟卖出股票 trading.sellStock(6.5, 500); // 查询账户总资产 cout << "账户总资产:" << trading.getTotalAsset() << endl; return 0; } ``` 以上代码先初始化一个股票交易类,然后模拟买入1000股价格为6元的股票,再模拟卖出500股价格为6.5元的股票,最后查询账户总资产。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值