量化交易的优势在于:
基于数据和规则进行交易决策,避免了主观判断和情绪影响;
交易策略经过回测和优化,可以有效降低风险和提高收益;
交易速度快、准确性高,可以进行高频交易;
可以通过自动化的方式进行交易,减少人力成本和错误率。
但是,量化交易也有其局限性:
量化交易需要掌握一定的数学和编程知识,对于新手来说较为困难;
交易策略可能会受到市场的变化和噪声数据的影响,需要不断地进行更新和调整;
量化交易的回测结果并不能完全代表未来的表现,需要注意风险控制。
要进行量化交易,需要掌握一定的技能和知识,包括:编程语言,如Python、C++等;
统计学和数学知识,如概率论、统计学、时间序列分析等;
数据分析和建模,如数据清洗、特征工程、模型构建等;
交易策略的设计和优化,如技术分析、基本面分析、机器学习等。
int main(int argc,const char*argv[]){
if(argc<4){
DLOG(INFO)<<"Usage:./quantized.out src.mnn dst.mnn preTreatConfig.jsonn";
return 0;
}
const char*modelFile=argv[1];
const char*preTreatConfig=argv[3];
const char*dstFile=argv[2];
DLOG(INFO)<<">>>modelFile:"<<modelFile;
DLOG(INFO)<<">>>preTreatConfig:"<<preTreatConfig;
DLOG(INFO)<<">>>dstFile:"<<dstFile
std::unique_ptr<MNN::NetT>netT;
{//读取原始的model文件,借助于flattbuffer生成Net对象
std::ifstream input(modelFile);
std::ostringstream outputOs;
outputOs<<input.rdbuf();
netT=MNN::UnPackNet(outputOs.str().c_str());//获取Net对象
}
//temp build net for inference
flatbuffers::FlatBufferBuilder builder(1024);
auto offset=MNN::Net::Pack(builder,netT.get());//打包模型准备放入buffer中
builder.Finish(offset);
int size=builder.GetSize();
auto ocontent=builder.GetBufferPointer();
//创建两个buffer,两个都用来放模型数据
std::unique_ptr<uint8_t>modelForInference(new uint8_t[size]);
memcpy(modelForInference.get(),ocontent,size);
std::unique_ptr<uint8_t>modelOriginal(new uint8_t[size]);
memcpy(modelOriginal.get(),ocontent,size);
netT.reset();
netT=MNN::UnPackNet(modelOriginal.get());
//进行量化操作,主要这个靠的是Calibration类
DLOG(INFO)<<"Calibrate the feature and quantize model...";
std::shared_ptr<Calibration>calibration(
new Calibration(netT.get(),modelForInference.get(),size,preTreatConfig));
calibration->runQuantizeModel();
DLOG(INFO)<<"Quantize model done!";
//量化后的模型写入到FlatBufferBuilder
flatbuffers::FlatBufferBuilder builderOutput(1024);
builderOutput.ForceDefaults(true);
auto len=MNN::Net::Pack(builderOutput,netT.get());
builderOutput.Finish(len);
//FlatBufferBuilder的内容写入文件,得到量化模型
{
std::ofstream output(dstFile);
output.write((const char*)builderOutput.GetBufferPointer(),builderOutput.GetSize());
}
}