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