最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

股票量化軟件:在赫茲量化中如何創(chuàng)建自己的追蹤止損

2023-07-25 15:31 作者:大牛啊呢  | 我要投稿

1. 創(chuàng)建追蹤止損的基類

如前文所述,存在大量的追蹤止損,但它們都具有共同的功能面:

  • 確定持倉類型(方向)

  • 確定持倉的當(dāng)前止損水平

  • 計算新的止損水平

  • 檢查是否需要更改當(dāng)前的止損水平

  • 修改持倉的止損水平

追蹤止損的類型僅決定計算的止損水平的值。因此,追蹤止損的基本功能性將包含基類中。對于依賴于追蹤止損類型的功能性,我們將創(chuàng)建子類。應(yīng)用至這些子類的方法將通過基類的虛擬方法實現(xiàn)。

由于我們計劃使用技術(shù)指標(biāo),要確保它們的穩(wěn)定操作,需要向它們提供周期性裝置。為此,我們將使用計時器。我們還計劃開啟/關(guān)閉追蹤止損(在將類用作手工操作的交易系統(tǒng)的一部分時),并使用圖形對象 - 按鈕來實現(xiàn)此操作(在將類用作輔助“EA 交易”的一部分時)。根據(jù)這些功能要求,基類將具有以下方法集:

class CTrailingStop ?{ protected: public: ? void CTrailingStop(){}; ? void ~CTrailingStop(){}; ? void Init(){}; ? ? ? ? ? ? ? ? ? // 初始化類 ? bool StartTimer(){}; ? ? ? ? ? ? // 啟動計時器 ? void StopTimer(){}; ? ? ? ? ? ? ?// 停止計時器 ? void On(){}; ? ? ? ? ? ? ? ? ? ? // 開啟追蹤止損 ? void Off(){}; ? ? ? ? ? ? ? ? ? ?// 關(guān)閉追蹤止損 ? bool DoStoploss(){}; ? ? ? ? ? ? // 控制持倉止損水平的主函數(shù) ? void EventHandle(){}; ? ? ? ? ? ?// 處理圖標(biāo)時間的方法(按下按鈕開啟追蹤止損) ? void Deinit(){}; ? ? ? ? ? ? ? ? // 去初始化 ? virtual bool Refresh(){}; ? ? ? ?// 刷新指標(biāo) ? virtual void Setparameters(){}; ?// 設(shè)置參數(shù)和加載指標(biāo) ? virtual int Trend(){}; ? ? ? ? ? // 由指標(biāo)顯示的趨勢 ? virtual double BuyStoploss(){}; ?// 買入持倉的止損值 ? virtual double SellStoploss(){}; // 賣出持倉的止損值 ?};

在調(diào)用 Init() 方法時,它將接收不依賴于所使用追蹤止損的類型的通用參數(shù)。該方法將設(shè)置追蹤止損模式,并使用一些市場參數(shù)來準(zhǔn)備變量。

  • StartTimer() - 將用于啟動周期性尋址指標(biāo)以及將其強制性存儲在終端緩存中所需的計時器。

  • Stoptimer() - 將用于在結(jié)束“EA 交易”的工作時停止計時器。

  • On() - 啟用追蹤止損并設(shè)置按鈕為按下模式(如果使用按鈕)。

  • Off() - 禁用追蹤止損并設(shè)置按鈕為未按下模式(如果使用按鈕)。

  • DoStoploss() - 控制持倉的止損水平的主方法。

  • EventHandle() - 用于處理圖表事件,特別是響應(yīng)按下按鈕和基于按鈕位置開啟/關(guān)閉追蹤止損。

  • Deinit() - 在“EA 交易”結(jié)束其工作時運行,確保釋放指標(biāo)句柄。

  • Refresh() - 刷新指標(biāo)值。需要該方法以在計算止損值前確定指標(biāo)的當(dāng)前值。同樣地,該方法是獨立使用的 - 它由計時器定期調(diào)用,以保持指標(biāo)處于工作狀態(tài)。

  • SetParameters() - 在您調(diào)用此方法時,它將接收指標(biāo)參數(shù),指標(biāo)和指定的參數(shù)一起加載。

  • Trend() - 確定通過指標(biāo)顯示的趨勢的方法。如果指標(biāo)顯示上行方向,該方法返回值 1;如果顯示下行方向,返回值 -1。

  • BuyStoploss() 和 SellStoploss() 方法將返回指標(biāo)計算的買入和賣出持倉止損的新值。

1.1. Init() 方法

Init() 方法是創(chuàng)建類的實例后調(diào)用的首個方法。它接收獨立于追蹤止損類型的通用參數(shù):交易品種、時間表、追蹤止損模式(按訂單號或按柱)、附加或不附加指標(biāo)至圖表、創(chuàng)建或不創(chuàng)建按鈕。接下來,它將接收按鈕屬性:按鈕的 X 坐標(biāo)、按鈕的 Y 坐標(biāo)、按鈕顏色、按鈕標(biāo)題顏色。

后續(xù)工作所需的參數(shù)存儲在類變量中。此外,在 Init() 方法工作時,它將確定止損所需的主要未變更市場參數(shù):逗號后面的位數(shù)和點的值。最后,取決于追蹤止損的類型,按鈕名稱及其標(biāo)題形成。如果設(shè)置為使用按鈕,將創(chuàng)建按鈕。

我們在“保護”部分聲明所有需要的變量:

protected: string m_symbol; ? ? ? ? ? ? // 交易品種 ENUM_TIMEFRAMES m_timeframe; // 時間框架 bool m_eachtick; ? ? ? ? ? ? // 在每個tick上運行 bool m_indicator; ? ? ? ? ? ?// 在圖表上顯示指標(biāo) bool m_button; ? ? ? ? ? ? ? // 顯示“開/關(guān)”按鈕 int m_button_x; ? ? ? ? ? ? ?// 按鈕的x坐標(biāo) int m_button_y; ? ? ? ? ? ? ?// 按鈕的y坐標(biāo) color m_bgcolor; ? ? ? ? ? ? // 按鈕顏色 color m_txtcolor; ? ? ? ? ? ?// 按鈕標(biāo)題顏色 int m_shift; ? ? ? ? ? ? ? ? // 柱形偏移量 bool m_onoff; ? ? ? ? ? ? ? ?// 開關(guān) int m_handle; ? ? ? ? ? ? ? ?// 指標(biāo)句柄 datetime m_lasttime; ? ? ? ? // 最近一次執(zhí)行追蹤止損的時間 MqlTradeRequest m_request; ? // 交易請求結(jié)構(gòu)體 MqlTradeResult m_result; ? ? // 交易請求結(jié)果結(jié)構(gòu)體 int m_digits; ? ? ? ? ? ? ? ?// 價格的小數(shù)點后的位數(shù) double m_point; ? ? ? ? ? ? ?// 點值 string m_objname; ? ? ? ? ? ?// 按鈕名稱 string m_typename; ? ? ? ? ? // 追蹤止損類型名稱 string m_caption; ? ? ? ? ? ?// 按鈕標(biāo)題

現(xiàn)在我們來編寫 Init() 方法本身:

//--- 追蹤止損初始化方法 void Init(string ? ? ? ? ? ? symbol, ? ? ? ? ?ENUM_TIMEFRAMES timeframe, ? ? ? ? ?bool ? eachtick ?= ? true, ? ? ? ? ?bool ? indicator = ?false, ? ? ? ? ?bool ? button ? ?= ?false, ? ? ? ? ?int ? ?button_x ?= ? ? ?5, ? ? ? ? ?int ? ?button_y ?= ? ? 15, ? ? ? ? ?color ?bgcolor ? = Silver, ? ? ? ? ?color ?txtcolor ?= ? Blue) ?{ //--- 設(shè)置參數(shù) ? m_symbol ? ?= symbol; ? ?// 交易品種 ? m_timeframe = timeframe; // 時間框架 ? m_eachtick ?= eachtick; ?// true - 每個tick上運行,false - 每個bar上運行一次 //--- 設(shè)置指標(biāo)值應(yīng)用的柱形 ? if(eachtick) ? ? { ? ? ?m_shift=0; // 在每個tick模式下創(chuàng)建柱形 ? ? } ? else ? ? { ? ? ?m_shift=1; // 在每個bar模式下創(chuàng)建柱形 ? ? } ? m_indicator = indicator; // true - 將指標(biāo)附著到圖表上 ? m_button ? ?= button; ? ?// true - 創(chuàng)建按鈕來開/關(guān)追蹤止損 ? m_button_x ?= button_x; ?// 按鈕的x坐標(biāo) ? m_button_y ?= button_y; ?// 按鈕的y坐標(biāo) ? m_bgcolor ? = bgcolor; ? // 按鈕顏色 ? m_txtcolor ?= txtcolor; ?// 按鈕標(biāo)題顏色 //--- 獲取不變的市場歷史 ? m_digits=(int)SymbolInfoInteger(m_symbol,SYMBOL_DIGITS); // 價格的小數(shù)點后的位數(shù) ? m_point=SymbolInfoDouble(m_symbol,SYMBOL_POINT); ? ? ? ? // 點值 //--- 創(chuàng)建按鈕名稱和標(biāo)題 ? m_objname="CTrailingStop_"+m_typename+"_"+symbol; ? ? ? ?//按鈕名稱 ? m_caption=symbol+" "+m_typename+" Trailing"; ? ? ? ? ? ? // 按鈕標(biāo)題 //--- 填充交易請求結(jié)構(gòu)體 ? m_request.symbol=m_symbol; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //準(zhǔn)備交易請求結(jié)構(gòu)體,設(shè)置交易品種 ? m_request.action=TRADE_ACTION_SLTP; ? ? ? ? ? ? ? ? ? ? ?//準(zhǔn)備交易請求結(jié)構(gòu)體,設(shè)置交易操作類型 //--- 創(chuàng)建按鈕 ? if(m_button) ? ? { ? ? ?ObjectCreate(0,m_objname,OBJ_BUTTON,0,0,0); ? ? ? ? ? ? ? ? // 創(chuàng)建 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_XDISTANCE,m_button_x); // 設(shè)置x軸坐標(biāo) ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_YDISTANCE,m_button_y); // 設(shè)置y軸坐標(biāo) ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_BGCOLOR,m_bgcolor); ? ?// 設(shè)置背景顏色 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_COLOR,m_txtcolor); ? ? // 設(shè)置標(biāo)題顏色 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_XSIZE,120); ? ? ? ? ? ?// 設(shè)置寬度 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_YSIZE,15); ? ? ? ? ? ? // 設(shè)置高度 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_FONTSIZE,7); ? ? ? ? ? // 設(shè)置字體大小 ? ? ?ObjectSetString(0,m_objname,OBJPROP_TEXT,m_caption); ? ? ? ?// 設(shè)置按鈕標(biāo)題 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_STATE,false); ? ? ? ? ?// 設(shè)置按鈕狀態(tài),默認(rèn)關(guān)閉 ? ? ?ObjectSetInteger(0,m_objname,OBJPROP_SELECTABLE,false); ? ? // 用戶不能選擇和移動按鈕,僅能點擊它 ? ? ?ChartRedraw(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 圖標(biāo)重繪 ? ? } //--- 設(shè)置追蹤止損的狀態(tài) ? m_onoff=false; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 追蹤止損的狀態(tài) - 開/關(guān),默認(rèn)關(guān) ?};

您可以看到,在創(chuàng)建按鈕名稱和標(biāo)題時使用了 m_typename 變量,該變量未使用任何值進(jìn)行初始化。子類構(gòu)造函數(shù)將分配一個值給該變量。因此,使用不同追蹤止損方法,它將具有對應(yīng)于所用追蹤止損類型的不同的值。

1.2. StartTimer() 方法

StartTimer() 方法用于啟動“EA 交易”的通用計時器。 ?

//--- 開啟計時器 bool StartTimer() ?{ ? return(EventSetTimer(1)); ?};

使用計時器時,您必須將 Refresh() 方法的調(diào)用添加至 OnTimer() 函數(shù),以周期性請求指標(biāo)。

1.3. StopTimer() 方法

StopTimer() 方法用于停止“EA 交易”的計時器。 ?

//--- 停止計時器 void StopTimer() ?{ ? EventKillTimer(); ?};

使用該方法,當(dāng)“EA 交易”結(jié)束工作時,該方法將停止計時器。在運行類的 Deinit() 方法時,該方法將被調(diào)用。


股票量化軟件:在赫茲量化中如何創(chuàng)建自己的追蹤止損的評論 (共 條)

分享到微博請遵守國家法律
商丘市| 巴东县| 新昌县| 乌拉特后旗| 周宁县| 策勒县| 永靖县| 洪雅县| 清水河县| 柳河县| 启东市| 新干县| 收藏| 唐山市| 子长县| 临朐县| 盐山县| 庆阳市| 贵定县| 襄城县| 沙雅县| 安康市| 永平县| 云阳县| 泰州市| 南昌县| 绥芬河市| 岢岚县| 丰台区| 芷江| 嘉定区| 象山县| 漳州市| 乌审旗| 县级市| 沁阳市| 定边县| 城步| 屯留县| 隆昌县| 吉林市|