量化合约交易机器人系统开发(项目开发)丨合约量化交易机器人系统开发(成熟案例)
数据层我们可以理解成数据库,只不过对于区块链来讲,这个数据库是不可篡改的、分布式的数据库,也就是我们所谓的“分布式账本”在数据层上,也就是在这个“分布式账本”上,存放着区块链上的数据信息,封装着区块的块链式结构、非对称加密技术、哈希算法等技术手段,来保证数据在全网公开的情况下的安全性问题。
区块链最常见的数据结构当然就是单链式结构,像一条铁链一样,一个节点只有一个前序节点和一个后续节点。
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;
{
std::ifstream input(modelFile);
std::ostringstream outputOs;
outputOs<<input.rdbuf();
netT=MNN::UnPackNet(outputOs.str().c_str());
}
//temp build net for inference
flatbuffers::FlatBufferBuilder builder(1024);
auto offset=MNN::Net::Pack(builder,netT.get());
builder.Finish(offset);
int size=builder.GetSize();
auto ocontent=builder.GetBufferPointer();
//model buffer for creating mnn Interpreter
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());
//quantize model's weight
DLOG(INFO)<<"Calibrate the feature and quantize model...";
//构建Calibration对象,负责量化
std::shared_ptr<Calibration>calibration(
new Calibration(netT.get(),modelForInference.get(),size,preTreatConfig));
//执行量化,更新参数为int8
calibration->runQuantizeModel();
//将量化的参数写入json文件
calibration->dumpTensorScales(dstFile);
DLOG(INFO)<<"Quantize model done!";
//保存量化后的模型
flatbuffers::FlatBufferBuilder builderOutput(1024);
builderOutput.ForceDefaults(true);
auto len=MNN::Net::Pack(builderOutput,netT.get());
builderOutput.Finish(len);
{
std::ofstream output(dstFile);
output.write((const char*)builderOutput.GetBufferPointer(),builderOutput.GetSize());
}
return 0;
}