資源簡介
通達信提供了DLL插件接口和DLL指標接口標準(見“插件編程規范-通達信原版文件”),但說明晦澀,不容易理解。
經過測試,將原示例代碼做了注釋,并修正了原來代碼的一處錯誤(主要見MyPlugin.cpp)。
只要明白了道理,剩下的工作就看個人發揮了!
代碼片段和文件信息
//?MyPlugin.cpp?:?通達信行情軟件插件選股代碼示例,根據通達信官方模板改編。
#include?“stdafx.h“
#include?“Plugin.h“
#define?PLUGIN_EXPORTS
//本函數DllMain供調用此DLL的應用程序使用,不可更改,必須保留。
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;
}
//將回調函數入口賦值給g_pFuncCallBack,自編程序中可以就可以使用g_pFuncCallBack函數調用通達信內部數據(如開盤價、收盤價、最高價、最低價、成交金額、成交量等等(具體數據結構參見OutStruct.h)。
PDATAIOFUNC ?g_pFuncCallBack;
void?RegisterDataInterface(PDATAIOFUNC?pfn)
{
g_pFuncCallBack?=?pfn;
}
//注:?本文件以上部分需要完整保留,不要做任何修改(除非你知道自己在做什么)
/////////////////////?注冊插件信息?///////////////////////
//注冊插件信息:將公式名稱,公式描述,參數數量、參數名字、參數最大最小及默認值等信息傳送給通達信,并將存儲區地址傳遞給LPPUGIN結構的指針info(具體數據結構將Plugin.h。本函數的具體參數賦值可以根據用戶需要修改。
void?GetCopyRightInfo(LPPLUGIN?info)
{
//填寫基本信息
strcpy(info->Name“插件選股1“);?//此信息會顯示在通達信插件選股對話框中“名稱”欄
strcpy(info->Dy“上海“);
strcpy(info->Author“Julian?Zhang“); //此信息會顯示在通達信插件選股對話框中“設計人”欄
strcpy(info->Period“短線“); //還不清楚有什么用
strcpy(info->Descript“MA上穿選股“); //此信息會顯示在通達信插件選股對話框中“選股對象”欄
strcpy(info->OtherInfo“無其它信息描述“);
//填寫參數信息
info->ParamNum?=?2; //定義插件參數數量,必須是[0~4]之間整數;
strcpy(info->ParamInfo[0].acParaName“MA短天數“);?//第一個參數的名稱
info->ParamInfo[0].nMin=1; //這部分通達信官方模板錯誤寫成nMax,應該為nMin,參數最小值;
info->ParamInfo[0].nMax=1000; //定義參數最大值
info->ParamInfo[0].nDefault=10; //定義參數默認值
strcpy(info->ParamInfo[1].acParaName“MA長天數“);?//第二個參數的名稱
info->ParamInfo[1].nMin=1;
info->ParamInfo[1].nMax=1000;
info->ParamInfo[1].nDefault=20;
}
////////////////////////////////用戶自定義選股公式部分/////////////////////////////////////////
//自定義選股公式實現細節函數(可根據選股需要添加)
?const BYTE g_nAvoidMask[]={0xF80xF80xF80xF8}; //?無效數據標志(通達信系統定義)
WORD???AfxRightData(float?*pDataWORD?nMaxData) //獲取有效數據位置
{
for(WORD?nIndex=0;?nIndex return(nIndex);
}
void???AfxCalcMa(float*pDatalong?nDataWORD?nParam)??//計算簡單移動平均MA通達信模板原函數未做任何修改
{
if(pData==NULL||nData==0||nParam==1)?return;
long?i=nData-nParam+1nMinEx=AfxRightData(pDatanData);
if(nParam==0||nParam+nMinEx>nData)?nMinEx=nData;
else
{
float nDataEx=0nDataSave=0;
float *MaPtr=pData+nData-1*DataPtr=pData+nData-nParam;
for(nMinEx+=nParam-1;i for(i=nData-1;i>=nMinEx;i--MaPtr--DataPtr--)
{
nDataEx+=(*DataPtr);
nDataSave=(*MaPtr);
*MaPtr=nDataEx/nParam;
nDataEx-=nDataSave;
}
}
}
WORD???AfxCross(float*psDatafloat*plDataWORD?nIndexfloat&nCross)?//判斷穿越,返回值0:當前未發生穿越;1:上穿;2:下穿
{
if(psData==NULL||plData==NULL||nIndex==0)?return(0);
float??nDif=psData[nIndex-1]-plData[nIndex-1];
float??nDifEx=plData[nIndex]-psData[nIndex];
float??nRatio=(nDif+nDifEx)?nDif/(nDif+nDifEx):0;
nCross=psData[nIndex-1]+(psData[nIndex]-psData[nIndex-1])*nRatio;
if(nDif<0&&nDifEx<0) return(1);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????241768??2015-05-07?20:58??MyPlugin\Debug\AddTxt.dll
?????文件?????249960??2015-05-08?16:12??MyPlugin\Debug\MyPlugin.dll
?????文件????????985??2015-05-07?21:53??MyPlugin\Debug\MyPlugin.exp
?????文件?????372496??2015-05-08?16:12??MyPlugin\Debug\MyPlugin.ilk
?????文件???????2660??2015-05-07?21:53??MyPlugin\Debug\MyPlugin.lib
?????文件??????17199??2015-05-08?16:12??MyPlugin\Debug\MyPlugin.obj
????I.A....???1815408??2015-05-08?14:06??MyPlugin\Debug\MyPlugin.pch
?????文件?????746496??2015-05-08?16:12??MyPlugin\Debug\MyPlugin.pdb
?????文件???????5448??2015-05-07?16:03??MyPlugin\Debug\StdAfx.obj
?????文件??????99328??2015-05-08?16:12??MyPlugin\Debug\vc60.idb
?????文件??????61440??2015-05-08?16:12??MyPlugin\Debug\vc60.pdb
?????文件???????6841??2015-05-08?16:12??MyPlugin\MyPlugin.cpp
?????文件??????49152??2013-09-18?11:33??MyPlugin\MyPlugin.dll
?????文件???????4325??2013-09-18?11:41??MyPlugin\MyPlugin.dsp
?????文件????????539??2002-10-22?11:35??MyPlugin\MyPlugin.dsw
?????文件??????91136??2015-05-08?16:12??MyPlugin\MyPlugin.ncb
?????文件??????48640??2015-05-08?16:12??MyPlugin\MyPlugin.opt
?????文件???????2350??2015-05-08?16:12??MyPlugin\MyPlugin.plg
?????文件???????5156??2015-05-08?09:18??MyPlugin\OutStruct.h
?????文件???????1728??2015-05-08?08:46??MyPlugin\Plugin.h
?????文件????????294??2001-01-15?16:53??MyPlugin\StdAfx.cpp
?????文件????????698??2015-05-08?08:13??MyPlugin\StdAfx.h
?????文件???????4752??2013-09-18?11:16??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.cpp
?????文件??????49152??2013-09-18?11:33??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.dll
?????文件???????4325??2013-09-18?11:41??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.dsp
?????文件????????539??2002-10-22?11:35??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.dsw
?????文件??????58368??2015-05-07?15:39??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.ncb
?????文件??????48640??2015-05-07?15:39??插件編程規范-通達信原版文件\MyPlugin\MyPlugin.opt
?????文件???????5156??2013-09-18?11:22??插件編程規范-通達信原版文件\MyPlugin\OutStruct.h
?????文件???????1662??2013-09-18?11:27??插件編程規范-通達信原版文件\MyPlugin\Plugin.h
............此處省略24個文件信息
評論
共有 條評論