Python 下载 tushare 数据,然后调用 C++ DLL 计算 wMA 存入本地 csv 文件

CMakeLists.txt

project(wMA)
add_library(wMA SHARED wMA.cpp)

wMA.h

#pragma once

#ifndef WMA_WMA_H
#define WMA_WMA_H
#endif

#ifdef BUILD_WMA_DLL
#define IO_WMA_DLL __declspec(export)
#else
#define IO_WMA_DLL __declspec(import)
#endif

extern "C"
{
IO_WMA_DLL int wMA(double array[], int arrayLen, int n);
}

wMA.cpp

#define BUILD_WMA_DLL

#include "wMA.h"
#include <iostream>
#include <fstream>

using namespace std;

IO_WMA_DLL int wMA(double array[], int arrayLen, int n)
{
    cout << "欢迎光临..." << endl;
    cout << "开始计算..." << endl;
    int m = n;
    double wMA[arrayLen];
    if(arrayLen >= n && n >= 0)
    {
        switch(n)
        {
            case 0:
            {
                cout << "长度为零..." << endl;
                for(int i = 0; i < m; i++)
                {
                    wMA[i] = 0;
                }
                break;
            }
            default:
            {
                for(int i = 0; i < m - 1; i++)
                {
                    wMA[i] = 0;
                }
                while(arrayLen >= m)
                {
                    double temp = 0;
                    for(int i = m - n, j = 0; i < m; i++, j++)
                    {
                        temp += array[i] * j;
                    }
                    wMA[m - 1] = temp / n;
                    m++;
                }
                break;
            }
        }
    }
    else
    {
        cout << "长度错误..." << endl;
    }
    cout << "存入文件..." << endl;
    ofstream fWMA("c:\\wMA.csv");
    if(!fWMA)
    {
        cout << "打开错误..." << endl;
        return -1;
    }
    else
    {
        fWMA << "Index" << "," << "index of sh" << "," << "wMA" << "," << endl;
        for(int i = 0; i < arrayLen; ++i)
        {
            fWMA << i << "," << array[i] << "," << wMA[i] << "," << endl;
        }
        cout << "完成写入..." << endl;
        fWMA.close();
        return 1;
    }
}

wMA.py

import tushare
from ctypes import *
# 数据预处理
dataFrame = tushare.get_hist_data(‘sh‘)
open = dataFrame[‘open‘].values
openLen = len(open)
# python 的 list 格式转为 c 的 array 格式
array = (c_double * openLen)(*open)
arrayLen = openLen
# 调用 DLL 函数 wMA 算出 wMA 值存入文件
hDLL = CDLL(‘C:\\Users\\Perelman\\.CLion2016.1\\system\\cmake\\generated\\wMA-4d5bfe42\\4d5bfe42\\Debug\\libwMA.dll‘)
print(hDLL.wMA(array, arrayLen, 5))

时间: 2024-10-11 05:50:45

Python 下载 tushare 数据,然后调用 C++ DLL 计算 wMA 存入本地 csv 文件的相关文章

ean13码的生成,python读取csv中数据并处理返回并写入到另一个csv文件中

# -*- coding: utf-8 -*- import math import re import csv import repr def ean_checksum(eancode): """returns the checksum of an ean string of length 13, returns -1 if the string has the wrong length""" if len(eancode) != 13: re

CSV文件在Python中的几种处理方式

Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文本的方式存储数据表.今天,我将给大家分享在Python中如何操作CSV文件. 一.数据源 首先,我们来看看本次操作的数据源,图1 CSV文件是在Excel中打开的,图2 CSV文件是在Notepad++中打开的,我们在图2中可以看到数值之间是以逗号分隔开的,每行末尾是CR回车符和LF换行符(请注意,

下载大数据实战课程第一季Python基础和网络爬虫数据分析

python语言近年来越来越被程序相关人员喜欢和使用,因为其不仅简单容易学习和掌握,而且还有丰富的第三方程序库和相应完善的管理工具:从命令行脚本程序到gui程序,从B/S到C/S,从图形技术到科学计算,软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有python的身影:python已经深入到程序开发的各个领域,并且会越来越多的人学习和使用. 大数据实战课程第一季Python基础和网络爬虫数据分析,刚刚入手,转一注册文件,视频的确不错,可以先下载看看:链接:http://pan.baidu

Python下载Yahoo!Finance数据

Python下载Yahoo!Finance数据的三种工具: (1)yahoo-finance package. (2)ystockquote. (3)pandas.

vim调用python格式化json数据

vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按序列化json格式数据. 服务器返回的json数据是非格式化的,程序使用没问题,如果需要阅读则亚历山大. 可以使用vim调用python json模块提供的命令行工具json/tool.py格式化json文本. vim打开json数据,命令行模式下 :%!python3 -m json.tool %

python通过swig调用c++dll时指针的用法

当Python和C++的接口涉及到缓冲区时,可以在Python中创建缓冲区,再将缓冲区的指针传给C++函数(通过创建额外的函数进行转换).实例如下: Python端: 1.获取str表示的二进制数据(读取文件等). 2.利用ctypes包中的create_string_buffer(str)函数创建缓冲区. 3.获取int表示的缓冲区地址,利用addressof(buf)函数,buf为2中创建的缓冲区对象. 4.利用编写的额外转换函数int2voidp(address)函数将int转换为C++的

通过Python SDK 获取tushare数据

导入tushare import tushare as ts 这里注意, tushare版本需大于1.2.10 设置token ts.set_token('your token here') 以上方法只需要在第一次或者token失效后调用,完成调取tushare数据凭证的设置,正常情况下不需要重复设置.也可以忽略此步骤,直接用pro_api('your token')完成初始化 初始化pro接口 pro = ts.pro_api() 如果上一步骤ts.set_token('your token'

用vc生成可被python调用的dll文件

前提已经有.c 和.i文件 用swid编译了.i文件生成了wrap.c文件和.py文件 vc创建dll工程 将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下Tools->Options->Directories中修改include 和lib 添加python里的include 和libs把\libs\python27.lib复制一份 并且改名为python27_d.lib修改 pyconfig.h (我只修改了前两样 后面没修改也成功了)#ifdef _

Python下载网络文本数据到本地内存的四种实现方法示例

reference: https://blog.csdn.net/john_bian/article/details/71025372?utm_source=itdadao&utm_medium=referral import urllib.request import requests from io import StringIO import numpy as np import pandas as pd ''' 下载网络文件,并导入CSV文件作为numpy的矩阵 ''' # 网络数据文件