量化軟件下載:赫茲量化中的三維建模
交互的圖形對象
我們將從三維對象開始,MQL5 語言的強大功能可以使您操作二維對象并創(chuàng)建復雜的圖形化表現(xiàn),增加幾個函數(shù),就可以在 赫茲量化 終端中使用三維圖形了。
首先,我們需要在設(shè)計三維對象的基類時確定有哪些需求。
簡單易用
高度持久性
獨立性
交互性
簡單易用
我們需要為開發(fā)人員和使用人員創(chuàng)建一個最小函數(shù)集,可以足夠用于三維圖形的主要功能。
高度持久性
三維對象在創(chuàng)建類實例的程序的整個生命周期中必須可以保存,它必須被保護,以免被意外或者故意刪除,以及防止它的基礎(chǔ)屬性被修改。
獨立性
對象必須夠 "聰明" 可以自我調(diào)整以適應(yīng)改變的條件(坐標系統(tǒng)的旋轉(zhuǎn),基本錨點的改變,等等) 對象必須正確處理到來的信息并回應(yīng)發(fā)生的對應(yīng)事件。
交互性
三維可視化要有可以改變?nèi)S模型觀察點的功能 (坐標系統(tǒng)的旋轉(zhuǎn)),所以我們需要創(chuàng)建功能來避免需要使用額外的控制面板或者類似的東西。嚴格說來,MQL5 語言中的圖形對象已經(jīng)有了用于交互的屬性: 您可以選擇一個對象,移動它,修改它的屬性,等等。我們只需要稍微增強這樣的屬性來啟用收集管理和交互,例如,如果我們改變了坐標的中心點,所有相關(guān)對象都必須自動地和正確地重新排布。
如果我們提供了所有這些需求,我們的三維對象就將變成一個可交互圖形對象(interactive graphical object,IGO)??山换D形對象必須與 MQL5 圖形對象相關(guān)聯(lián),讓我們從可交互圖形對象的基類 CIGO 開始。
class CIGO ?{ protected: ?bool ? ? ? ? ? ? ?on_event; ? ? ?// 事件處理標志 ?int ? ? ? ? ? ? ? m_layer; ? ? ? // IGO 所屬的圖層 ?//--- ?double ? ? ? ? ? ?SetPrice(double def,int prop_modifier=0); public: ?string ? ? ? ? ? ?m_name; ? ? ? ?// IGO 對象的名稱 ?double ? ? ? ? ? ?m_price; ? ? ? // IGO 對象的基本錨點[價格] ?double ? ? ? ? ? ?m_angle; ? ? ? // IGO 投射角度 [度數(shù)] ? ? ? ? ? ? ? ? ? ? CIGO(); ? ? ? ? ? ? ? ? ? ?~CIGO(); ?//--- ?virtual ?// 方法: 創(chuàng)建 IGO ?void ? ? ? ? ? ? ?Create(string name) {on_event=true;} ?virtual ?// 方法: 重繪 IGO ?void ? ? ? ? ? ? ?Redraw() {ChartRedraw();} ?virtual ?// OnChartEvent 處理方法 ?bool ? ? ? ? ? ? ?OnEvent(const int id, ? ? ? ? // 事件 ID ?const long &lparam, ? // long 類型(長整數(shù)型)的事件參數(shù) ?const double &dparam, // double 類型(雙精度浮點數(shù)型)的事件參數(shù) ?const string &sparam, // string 類型(字符串型)的事件參數(shù) ?int iparamemr=0, ? ? ?// IGO 事件標識符 ?double dparametr=0.0);// IGO double 類型的事件參數(shù) ?};
基類包含了最少的欄位和方法,可以在子類中重載或者補充,我們將只詳細探討兩個類方法: 虛擬方法 OnEvent() 用于處理 OnChartEvent 以及用于設(shè)置基礎(chǔ)錨點的 SetPrice()。交互圖形對象的主要原則就是在這些類中實現(xiàn)的。
方法: 處理到來的 OnEvent 事件。
該方法處理當操作圖表時來自客戶終端的事件,此方法要回應(yīng)四個標準事件: 刪除圖形對象, 修改圖表大小或者屬性,移動圖形對象或者點擊它,讓我們詳細討論其中的每個事件。