大智慧c语言dll,调用大智慧dll,简单支持大智慧公式dll接口
網(wǎng)上看到一個(gè)分享貼,說(shuō)可以調(diào)用大智慧公式,只是我沒(méi)有看懂要如何使用。
請(qǐng)問(wèn)類似這樣的調(diào)用是要寫到哪里,自己的dll里面還是大智慧里面?
XDll_Free(Dll相對(duì)路徑文件名);//釋放動(dòng)態(tài)鏈接庫(kù)
XDll_Load(Dll相對(duì)路徑文件名);//加載動(dòng)態(tài)鏈接庫(kù)
次源自客戶定制需要,考慮再三,決定支持大智慧公式dll接口
大智慧公式dll語(yǔ)言規(guī)約和分析家一樣.
算是給大家的節(jié)禮物
調(diào)用大智慧/分析家公式dll接口函數(shù)
在調(diào)用函數(shù)之前要?jiǎng)?chuàng)建緩沖區(qū),并從對(duì)應(yīng)歷史數(shù)據(jù)接口填充k線數(shù)據(jù)
這個(gè)與歷史數(shù)據(jù)接口對(duì)應(yīng)的緩沖區(qū),數(shù)據(jù)長(zhǎng)度固定為480,配有10個(gè)輸入輸出緩沖區(qū),
用作調(diào)用dll具體公式函數(shù)是時(shí)輸入輸出緩沖區(qū)
XDll_Free(Dll相對(duì)路徑文件名);//釋放動(dòng)態(tài)鏈接庫(kù)
XDll_Load(Dll相對(duì)路徑文件名);//加載動(dòng)態(tài)鏈接庫(kù)
功能:釋放或加載動(dòng)態(tài)鏈接庫(kù)
參數(shù):Dll相對(duì)路徑文件名
例如:XDll_Load("autop\qml\xxxxx.dll");
XDll_Exec(Dll相對(duì)路徑文件名,
函數(shù)名,K線緩沖區(qū)序號(hào),輸出緩沖區(qū)序號(hào),
參數(shù)1有效位置,參數(shù)1,參數(shù)2,參數(shù)3,參數(shù)4);//調(diào)用庫(kù)函數(shù)
功能:調(diào)用庫(kù)函數(shù)
參數(shù):
1.Dll相對(duì)路徑文件名
2.函數(shù)名(dll完全出口函數(shù)名,例如在大智慧中是macd,一般完全函數(shù)名是_macd)
3.K線緩沖區(qū)序號(hào) 指的是與歷史數(shù)據(jù)庫(kù)接口相對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū)的序號(hào)0,1,2
4.輸出緩沖區(qū)序號(hào)(可省) 指定調(diào)用庫(kù)函數(shù)的輸出緩沖區(qū)的序號(hào),為0--9(可以是10個(gè)輸入輸出緩沖區(qū)中的任何一個(gè))
默認(rèn)為0
5.參數(shù)1有效位置(可省) 當(dāng)有參數(shù)1時(shí)設(shè)定參數(shù)1的性質(zhì),<0時(shí)指定參數(shù)1是常數(shù)輸入,這時(shí)參數(shù)1就是輸入數(shù)據(jù)
當(dāng)其>=0時(shí),參數(shù)1就是選定做輸入緩沖區(qū)的輸入輸出緩沖區(qū)序號(hào),在庫(kù)函數(shù)調(diào)用前一定要設(shè)置好預(yù)定數(shù)據(jù)
本參數(shù)值指定該系列輸入數(shù)據(jù)的有效起始位置
6.參數(shù)1 輸入?yún)?shù),當(dāng)其明確輸入時(shí),與上一參數(shù)配合,省略時(shí),庫(kù)函數(shù)調(diào)用輸入?yún)?shù)為空
6.參數(shù)2,參數(shù)3,參數(shù)4 輸入?yún)?shù),當(dāng)其明確輸入時(shí),將作為庫(kù)函數(shù)調(diào)用參數(shù),省略時(shí),庫(kù)函數(shù)對(duì)應(yīng)調(diào)用參數(shù)為空
例如:XDll_Exec("autop\qml\xxxxx.dll","_kxian",0,0);//調(diào)用庫(kù)函數(shù)
XDll_DBufDelete();//刪除歷史數(shù)據(jù)接口對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū)
XDll_DBufCreate(開(kāi)始位置,結(jié)束位置);//創(chuàng)建歷史數(shù)據(jù)接口對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū),并調(diào)入數(shù)據(jù)
XDll_GetKXData(數(shù)據(jù)索引,k線數(shù)據(jù)編號(hào)0.t.1.o.2.h.3.l.4.c.5.v);//獲取歷史數(shù)據(jù)接口對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
XDll_GetIOData(輸入輸出數(shù)據(jù)緩沖區(qū)號(hào)0..9,數(shù)據(jù)索引);//獲取歷史數(shù)據(jù)接口對(duì)應(yīng)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
XDll_SetIOData(輸入輸出數(shù)據(jù)緩沖區(qū)號(hào)0..9,數(shù)據(jù)索引,數(shù)據(jù));//設(shè)置歷史數(shù)據(jù)接口對(duì)應(yīng)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
XDll_CopyIOData(源緩沖區(qū)號(hào),目的緩沖區(qū)號(hào));//拷貝歷史數(shù)據(jù)接口對(duì)應(yīng)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
XDll_ClearIOData(緩沖區(qū)號(hào));//清除歷史數(shù)據(jù)接口對(duì)應(yīng)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
功能:歷史數(shù)據(jù)接口對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū)操作,具體功能看上面標(biāo)示
參數(shù):
1.開(kāi)始位置 對(duì)應(yīng)歷史數(shù)據(jù)接口中的數(shù)據(jù)開(kāi)始位置
2.結(jié)束位置 對(duì)應(yīng)歷史數(shù)據(jù)接口中的數(shù)據(jù)結(jié)束位置,-1時(shí)將直接取值為最后位置
當(dāng)開(kāi)始與結(jié)束位置的k線根數(shù)大于480時(shí),系統(tǒng)會(huì)自動(dòng)將開(kāi)始位置裁剪為結(jié)束位置-450
3 數(shù)據(jù)索引 等同歷史數(shù)據(jù)庫(kù)接口索引
4.其他參數(shù)同表面意思
注意:
XDll_DBufCreate函數(shù)可以連續(xù)調(diào)入,并填入數(shù)據(jù),其返回值為新的數(shù)據(jù)根數(shù)
在程序中可用
if(XDll_DBufCreate(0,-1))
{
XDll_Exec("autop\qml\xxxxx.dll","_kxian",0,0);//調(diào)用庫(kù)函數(shù) //
.....
}
簡(jiǎn)單測(cè)試代碼為:
OpenLsLib("m1005",64,4,0);
XDll_DBufCreate(0,-1);//創(chuàng)建歷史數(shù)據(jù)接口對(duì)應(yīng)k線數(shù)據(jù)緩沖區(qū),并調(diào)入數(shù)據(jù)
XDll_Load("autop\qml\xxxxx.dll");//加載動(dòng)態(tài)鏈接庫(kù)
XDll_Exec("autop\qml\xxxxx.dll","_kxian",0,0);//調(diào)用庫(kù)函數(shù)
......................
int m_daya=XDll_GetIOData(0,m_dsp_dir);
#ifndef __DzhFUNC_H_INCLUDE
#define __DzhFUNC_H_INCLUDE
#ifdef __cplusplus
extern "C"
{
#endif //__cplusplus
///
//分析周期
enum DATA_TYPE
{
TICK_DATA=2, //分筆成交
MIN1_DATA, //1分鐘線
MIN5_DATA, //5分鐘線
MIN15_DATA, //15分鐘線
MIN30_DATA, //30分鐘線
MIN60_DATA, //60分鐘線
DAY_DATA, //日線
WEEK_DATA, //周線
MONTH_DATA, //月線
MULTI_DATA //多日線
};
///
//基本數(shù)據(jù)
typedef struct tagSTKDATA
{
time_t m_time; //時(shí)間,UCT
float m_fOpen; //開(kāi)盤
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盤
float m_fVolume; //成交量
float m_fAmount; //成交額
WORD m_wAdvance; //上漲家數(shù)(僅大盤有效)
WORD m_wDecline; //下跌家數(shù)(僅大盤有效)
} STKDATA;
//擴(kuò)展數(shù)據(jù),用于描述分筆成交數(shù)據(jù)的買賣盤
typedef union tagSTKDATAEx
{
struct
{
float m_fBuyPrice[3]; //買1--買3價(jià)
float m_fBuyVol[3]; //買1--買3量
float m_fSellPrice[3]; //賣1--賣3價(jià)
float m_fSellVol[3]; //賣1--賣3量
};
float m_fDataEx[12]; //保留
} STKDATAEx;
/
/
//函數(shù)數(shù)據(jù)結(jié)構(gòu)
typedef struct tagCALCINFO
{
const DWORD m_dwSize; //結(jié)構(gòu)大小
const DWORD m_dwVersion; //調(diào)用軟件版本(V2.10 : 0x210)
const DWORD m_dwSerial; //調(diào)用軟件序列號(hào)
const char* m_strStkLabel; //股票代碼
const BOOL m_bIndex; //大盤
const int m_nNumData; //數(shù)據(jù)數(shù)量(pData,pDataEx,pResultBuf數(shù)據(jù)數(shù)量)
const STKDATA* m_pData; //常規(guī)數(shù)據(jù),注意:當(dāng)m_nNumData==0時(shí)可能為 NULL
const STKDATAEx* m_pDataEx; //擴(kuò)展數(shù)據(jù),分筆成交買賣盤,注意:可能為 NULL
const int m_nParam1Start; //參數(shù)1有效位置
const float* m_pfParam1; //調(diào)用參數(shù)1
const float* m_pfParam2; //調(diào)用參數(shù)2
const float* m_pfParam3; //調(diào)用參數(shù)3
const float* m_pfParam4; //調(diào)用參數(shù)3
float* m_pResultBuf; //結(jié)果緩沖區(qū)
const DATA_TYPE m_dataType; //數(shù)據(jù)類型
const float* m_pfFinData; //財(cái)務(wù)數(shù)據(jù)
} CALCINFO;
///
//示例函數(shù),使用時(shí)用實(shí)際名稱替換
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData);
__declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData);
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__DZHFUNC_H_INCLUDE
// FxjFunc.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "FxjFunc.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//計(jì)算收盤價(jià)的均價(jià),一個(gè)常數(shù)參數(shù),表示計(jì)算周期
//調(diào)用方法:
// MYMACLOSE(5)
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
float f,fTotal;
int nPeriod,i,j;
if(pData->m_pfParam1 && //參數(shù)1有效
pData->m_nParam1Start<0 && //參數(shù)1為常數(shù)
pData->m_pfParam2==NULL) //僅有一個(gè)參數(shù)
{
f = *pData->m_pfParam1;
nPeriod = (int)f; //參數(shù)1
if(nPeriod>0)
{
for(i=nPeriod-1;im_nNumData;i++) //計(jì)算nPeriod周期的均線,數(shù)據(jù)從nPeriod-1開(kāi)始有效
{
fTotal = 0.0f;
for(j=0;j
fTotal += pData->m_pData[i-j].m_fClose;
pData->m_pResultBuf[i] = fTotal/nPeriod; //平均
}
return nPeriod-1;
}
}
return -1;
}
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData)
{
if(pData->m_pfParam1 && pData->m_nParam1Start<0)
{
float f = *pData->m_pfParam1;
return ((int)f) - 1;
}
return 0;
}
//計(jì)算均價(jià),2個(gè)參數(shù),參數(shù)1為待求均線的數(shù)據(jù),參數(shù)2表示計(jì)算周期
//調(diào)用方法:
// MYMAVAR(CLOSE-OPEN,5)
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
float f,fTotal;
const float* pValue;
int nPeriod,nFirst,i,j;
if(pData->m_pfParam1 && pData->m_pfParam2 && //參數(shù)1,2有效
pData->m_nParam1Start>=0 && //參數(shù)1為序列數(shù)
pData->m_pfParam3==NULL) //有2個(gè)參數(shù)
{
pValue = pData->m_pfParam1; //參數(shù)1
nFirst = pData->m_nParam1Start; //有效值
f = *pData->m_pfParam2;
nPeriod = (int)f; //參數(shù)2
if(nFirst>=0 && nPeriod>0)
{
for(i=nFirst+nPeriod-1;im_nNumData;i++)
{
fTotal = 0.0f;
for(j=0;j
fTotal += pData->m_pData[i-j].m_fClose;
pData->m_pResultBuf[i] = fTotal/nPeriod; //平均
}
return nFirst+nPeriod-1;
}
}
return -1;
}
__declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData)
{
if(pData->m_pfParam2)
{
float f = *pData->m_pfParam2;
return ((int)f) - 1;
}
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的大智慧c语言dll,调用大智慧dll,简单支持大智慧公式dll接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 亲身体验 DDOS(拒绝服务)攻击硬防D
- 下一篇: idea启动项目报错 : 编译失败:内部