小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

編程通達信

 絲廣里 2017-12-24
[簡介]

開發(fā)語言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
開發(fā)工具: Visual Studio、Delphi、XCode、Eclipse
技能種類: 逆向 驅(qū)動 磁盤 文件
研發(fā)領域: Windows應用軟件安全/Windows系統(tǒng)內(nèi)核安全/Windows系統(tǒng)磁盤數(shù)據(jù)安全
項目經(jīng)歷: 磁盤性能優(yōu)化/文件系統(tǒng)數(shù)據(jù)恢復/文件信息采集/敏感文件監(jiān)測跟蹤/網(wǎng)絡安全檢測

[序言]
2015年開始, 中國股市大漲, 號稱突破10000點, 我也信了. 通信達股票軟件去年開始支持加載外部DLL文件并執(zhí)行. 這個是一個非常好的開放. 也給廣大技術指標股民帶來的便利. 作為09年的股民, 不跟上這種技術潮流, 是不行的. 因此這幾天索性折騰一番, 發(fā)現(xiàn)網(wǎng)絡上公布的文章, 要么是技術漏洞百出, 要么是排版非常混亂, 為了改變這種現(xiàn)狀, 我有必寫出一篇干凈整潔的版本.

[閱讀群體]
只合適具有C/C++編程經(jīng)驗的技術指標股民閱讀, 如果你看不懂大部分的內(nèi)容, 請補習一下Windows相關編程理論.

[工具準備]
1> 安裝一款由通達信定制的股票軟件: 比如我的是: 國海證券理財服務終端
2> 安裝開發(fā)工具: Microsoft Visual Studio 2010版本以上.

[開始開發(fā)支持通達信調(diào)用的DLL文件]
1> 首先從http://help./book.asp下載“通達信DLL函數(shù)編程規(guī)范.rar”并解壓提取PluginTCalcFunc.h頭文件出來. 這個文件包含跟通達信股票軟件交互的關鍵代碼.
2> 啟動Microsoft Visual Studio 2010開發(fā)工具從菜單選擇 “新建”->“項目”->"Visual C++"->"MFC"->"MFC DLL"并輸入項目名稱:TDXPlugin 然后在彈出的"MFC DLL向?qū)?對話框中選擇DLL類型為"使用共享MFC DLL的規(guī)則DLL".
3> 配置剛剛創(chuàng)建好的TDXPlugin項目屬性(從菜單選擇 "項目"->"TDXPlugin屬性"->"常規(guī)")
3.1 輸出目錄: C:\zd_ghzq\T0002\dlls 備注: 這個是通達信股票軟件的安裝目錄, 視你的當前環(huán)境來填寫. 當你進入安裝目錄的時候, 發(fā)現(xiàn)沒有dlls這個文件夾時, 你可以自己創(chuàng)建.
3.2 MFC的使用: 在靜態(tài)庫中使用MFC
4> 在剛剛創(chuàng)建好的TDXPlugin項目中添加之前提取出來的PluginTCalcFunc.h頭文件.

[根據(jù)通達信的規(guī)范編寫代碼]
1> 在TDXPlugin.cpp文件添加如下代碼(注意: TDXPlugin.cpp原有的代碼不要刪除):
  1. // TDXPlugin1函數(shù)是你自己編寫的函數(shù), 是跟通信達股票軟件交互的函數(shù).
  2. // 通信達股票軟件會調(diào)用你這個函數(shù)并傳遞你想要的股票數(shù)據(jù)給你.(備注: 如何調(diào)用這個函數(shù), 后面我會講解)
  3. void TDXPlugin1(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)
  4. {
  5. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  6. // 這里添加你自己的股票分析代碼(后面會有詳細講解)
  7. }
  8. // g_CalcFuncSets全局結構, 存儲你自己編寫好的函數(shù), 比如TDXPlugin1函數(shù)
  9. PluginTCalcFuncInfo g_CalcFuncSets[] =
  10. {
  11. { 1, (pPluginFUNC)&TDXPlugin1 },
  12. { 0, NULL },
  13. };
  14. // 該函數(shù)為導出函數(shù),給通信達股票軟件調(diào)用并初始化
  15. BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun)
  16. {
  17. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  18. if (*pFun == NULL)
  19. {
  20. (*pFun) = g_CalcFuncSets;
  21. return TRUE;
  22. }
  23. return FALSE;
  24. }
// TDXPlugin1函數(shù)是你自己編寫的函數(shù), 是跟通信達股票軟件交互的函數(shù).
// 通信達股票軟件會調(diào)用你這個函數(shù)并傳遞你想要的股票數(shù)據(jù)給你.(備注: 如何調(diào)用這個函數(shù), 后面我會講解)
void TDXPlugin1(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    // 這里添加你自己的股票分析代碼(后面會有詳細講解)
}

// g_CalcFuncSets全局結構, 存儲你自己編寫好的函數(shù), 比如TDXPlugin1函數(shù)
PluginTCalcFuncInfo g_CalcFuncSets[] =
{
    { 1, (pPluginFUNC)&TDXPlugin1 },
    { 0, NULL },
};

// 該函數(shù)為導出函數(shù),給通信達股票軟件調(diào)用并初始化
BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    if (*pFun == NULL)
    {
        (*pFun) = g_CalcFuncSets;
        return TRUE;
    }
    return FALSE;
}
2> 在TXDPlugin.def文件設置函數(shù)RegisterTdxFunc為導出函數(shù).
  1. TXDPlugin.def : 聲明 DLL 的模塊參數(shù)。
  2. LIBRARY
  3. EXPORTS
  4. ; 此處可以是顯式導出
  5. RegisterTdxFunc @1
TXDPlugin.def : 聲明 DLL 的模塊參數(shù)。
LIBRARY
EXPORTS
    ; 此處可以是顯式導出
    RegisterTdxFunc @1
3> 開始編譯, 如果你完全按照我的步驟處理的話, 不會有任何問題, 然后會在C:\zd_ghzq\T0002\dlls的目錄(備注: 這個是通達信股票軟件的安裝目錄, 視你的當前環(huán)境來填寫. 當你進入安裝目錄的時候, 發(fā)現(xiàn)沒有dlls這個文件夾時, 你可以自己創(chuàng)建)下生成TDXPlugin.dll

[通達信股票軟件如何加載TDXPlugin.dll并調(diào)用寫好的TDXPlugin1函數(shù)呢?]
1> 啟動你的通達信股票軟件, 按CTRL+F激活"公式管理器", 單擊"DLL函數(shù)"
2> 在"綁定DLL函數(shù)"對話框中, 單擊"打開綁定", 并選擇之前生成好的TDXPlugin.dll文件. 特別注意的是: 默認是選擇TDXDLL1, 當你有多個不同的DLL時, 可以下拉選擇更多的TDXDLL1~10來綁定不同的DLL文件

3> 成功綁定之后, 你就可以在通達信股票軟件自帶的公式編輯器, 寫下如下代碼:
TDXDLL1(1, HIGH, CLOSE, LOW) ;

代碼含義: TDXDLL1: 表示使用的是TDXDLL1來綁定TDXPlugin.dll
HIGH: 最高價
CLOSE: 收盤價
LOW: 最低價
1: 表示 調(diào)用TDXPlugin1這個函數(shù), 當然如果你有多個函數(shù)時, 那么你必須修改g_CalcFuncSets結構.
  1. PluginTCalcFuncInfo g_CalcFuncSets[] =
  2. {
  3. { 1, (pPluginFUNC)&TDXPlugin1 },
  4. { 2, (pPluginFUNC)&TDXPlugin2 },
  5. { 3, (pPluginFUNC)&TDXPlugin3 },
  6. { 0, NULL },
  7. };
PluginTCalcFuncInfo g_CalcFuncSets[] =
{
    { 1, (pPluginFUNC)&TDXPlugin1 },
    { 2, (pPluginFUNC)&TDXPlugin2 },
    { 3, (pPluginFUNC)&TDXPlugin3 },
    { 0, NULL },
};
上面的結構表示你有3個函數(shù)可以讓通達信股票軟件調(diào)用. 比如讓通達信股票軟件調(diào)用TDXPlugin2時,代碼需要寫成:
TDXDLL1(2, HIGH, CLOSE, LOW) ;
特此聲明: 通達信股票軟件自帶的公式編輯器 已經(jīng)不屬于C/C++編程規(guī)范了, 因此我這里不再詳細介紹如何使用公式編輯器. 作為一個合格的技術指標股民, 你應該自己研究一下.

[詳解TDXDLL1與TDXPlugin1函數(shù)的關系]

當通信達股票軟件的公式代碼調(diào)用了TDXDLL1(1, HIGH, CLOSE, LOW)時, 就會把跟HIGH, CLOSE, LOW這3個參數(shù)有關的數(shù)據(jù)傳遞給TDXPlugin1函數(shù). 比如下面的參數(shù)解釋
  1. // int DataLen: 表示 接受到多少天的數(shù)據(jù), 有時是742, 有時1800 等等不同的
  2. // float* pfINa: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的HIGH(最高價)
  3. // float* pfINb: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的CLOSE(收盤價)
  4. // float* pfINa: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的LOW(最低價)
  5. void TDXPlugin1(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)
  6. {
  7. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  8. // 連續(xù)打印N天的數(shù)據(jù)
  9. WCHAR wchar_pintf[1024];
  10. for (int int_Index = 0; int_Index < DataLen; int_Index++)
  11. {
  12. swprintf(wchar_pintf, L"DataLen: %d HIGH: %f CLOSE: %f LOW: %f", int_Index, pfINa[int_Index], pfINb[int_Index], pfINc[int_Index]);
  13. OutputDebugString(wchar_pintf);
  14. }
  15. }
// int DataLen: 表示 接受到多少天的數(shù)據(jù), 有時是742, 有時1800 等等不同的
// float* pfINa: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的HIGH(最高價)
// float* pfINb: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的CLOSE(收盤價)
// float* pfINa: 表示 float類型的數(shù)組, 比如當 DataLen是742時, 那么就意味你接收到742天的LOW(最低價)
void TDXPlugin1(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    // 連續(xù)打印N天的數(shù)據(jù)
    WCHAR wchar_pintf[1024];
    for (int int_Index = 0; int_Index < DataLen; int_Index++)
    {
        swprintf(wchar_pintf, L"DataLen: %d HIGH: %f  CLOSE: %f  LOW: %f", int_Index, pfINa[int_Index], pfINb[int_Index], pfINc[int_Index]);
        OutputDebugString(wchar_pintf);
    }
}
備注: OutputDebugString是一個打印函數(shù), 你需要通過DebugView工具查看.

[自定義的DLL函數(shù)返回數(shù)據(jù)并畫圖]
這個功能, 我使用的是收費模式, 不會免費對外公布. 價格可以私聊QQ:643439947.

[總結]
一般來說, 只要你有豐富的開發(fā)經(jīng)驗, 你可以擴展出很多強大的功能. 比如你可以在DLL文件封裝一個對話框程序, 那么你在啟動通達信股票軟件的時候, 也會彈出你自己的對話框程序. 請大家發(fā)揮自己的想象力吧......

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多