关闭@1x
香港:获取中
  • 紐約:2025-04-02 07:20:21
  • 倫敦:2025-04-02 12:20:21
  • 東京:2025-04-02 21:20:21
  • 悉尼:2025-04-02 22:20:21
  • 香港:2025-04-02 20:20:21
  • 新加坡:2025-04-02 20:20:21
首頁> 資訊> 最新 >正文

第四單元(4-3) - 圖形對象交互

William 2024-06-24 17:53:04 關注
怎樣使用圖形對象來輔助我們實現更複雜的邏輯交互?

文章來源:123财經導航 | william

在了解了圖形對象的基本創建後,比如按鈕、矩形、文本等。但僅僅創建這些對象是遠遠不夠的,我們還需要讓它們能夠與用戶進行交互。圖形對象交互的核心概念就是通過捕獲在圖表上的操作,來觸發相應的事件和邏輯。在 MQL4 中,我們可以使用 OnChartEvent() 函數來監聽各種圖表事件,并根據事件的類型來執行相應的代碼。

今天就教大家怎樣使用這些對象來輔助我們實現更複雜的邏輯交互(可查看4-1和4-2學習相關創建方法),常用的圖表事件包括:

  • 鼠标點擊事件 (CHARTEVENT_OBJECT_CLICK)
  • 鼠标移動事件 (CHARTEVENT_MOUSE_MOVE)
  • 鍵盤按鍵事件(CHARTEVENT_KEYDOWN)
  • 文本輸入事件(CHARTEVENT_OBJECT_ENDEDIT)

本次教程我們需要用到其中的兩種,在OnChartEvent()事件函數中,第一個參數用于響應對應的事件标記,每個事件有對應的id,根據變動的id來判斷什麽樣的事件觸發的圖形對象,從而根據該事件做出自定義判斷。

準備工作

通過封裝好的對象創建函數創建3個對象,這裏我們爲了方便演示,按鈕和輸入框都使用了“EDIT”輸入框對象。除了輸入框外,我們把另外兩個BUY和SELL的輸入文本的功能關閉用做按鈕,倒數第二個參數爲true就是關閉了輸入狀态(對應的參數順序根據你創建的函數而定)。

我們借助下圖講解坐标的計算細節:
1,第一個命名爲PANEL-LOT的對象用于輸入手數,爲了便于觀察,我們采用了左上角錨點。

  • 左邊距(X坐标)偏移20個像素。
  • 上邊距(Y坐标)偏移20個像素。
  • 寬度200個像素。
  • 高度30個像素。

2,用于下BUY單的對象(按鈕)

  • 左邊距(X坐标)偏移20個像素。
  • 上邊距(Y坐标)偏移50個像素(提示:由于該對象的上方被輸入框占用了一個位置,其高度爲30,再加上它與邊距的距離20,所以第二個對象的Y坐标剛好是50)。
  • 寬度100個像素
  • 高度30個像素

3,用于下SELL單的對象(按鈕)

  • 左邊距(X坐标)偏移120個像素(提示:同上一個對象的計算方式,由于下多單的按鈕寬度爲100個像素,而其距離邊距20個像素,所以相加後剛好爲120)。
  • 上邊距(Y坐标)偏移50個像素(同上一個對象的上邊距)。
  • 寬度/高度(同上一個對象的大小)。

到此,需要的圖形對象全部創建完畢。

交互實踐

先在全局範圍定義一個浮點變量來存儲圖表上輸入的手數。

随後我們在OnChartEvent函數中的文本輸入事件内編寫如下代碼

  • if(id == CHARTEVENT_OBJECT_ENDEDIT)
    這個條件語句是在監聽圖表事件。CHARTEVENT_OBJECT_ENDEDIT 是一個事件常量,表示用戶編輯完圖表上的某個對象并離開編輯狀态。也就是說,當用戶在圖表上編輯完某個對象(比如文本框)并結束編輯時,這個事件就會被觸發。

  • if(sparam=="PANEL-LO")
    判斷被編輯的對象是否是名爲 "PANEL-LOT" 的對象。 sparam 是 OnChartEvent() 函數的一個參數,它包含了觸發事件的對象名稱。

  • string lot = ObjectGetString(0,sparam,OBJPROP_TEXT);
    獲取被編輯對象(名爲 "PANEL-LOT")的文本内容。
    ObjectGetString() 函數可以用來獲取對象的屬性值,這裏我們獲取的是 OBJPROP_TEXT 屬性,也就是對象的文本内容。

  • lots = StringToDouble(lot);
    這行代碼将剛剛獲取的文本内容 lot 轉換爲 double 類型的數值 lots。
    這樣做是因爲在後續的代碼中,需要使用這個數值進行手數計算操作。

接下來我們會添加完判斷後得到了一個完整的事件判斷邏輯:當點擊BUY按鈕時,我們下一個多單,反之亦然。

最後一步,剛剛創建的對象函數複制到初始化列表中,嘗試一下是否成功。

結語

經曆了這麽長時間的學習,相信有不少同學已經悄悄掌握了大部分基礎知識,從第一章到現在,我們學了EA編程中常用的基本方式方法,到這裏,MQL4編程的基礎課程将告一段落。後續的教程屬于選修部分,不定期的針對疑難問題進行更新,祝大家學習愉快。

【免責聲明】123财經導航所發布的信息内容僅供交易投資者參考,并不構成投資建議“據此操作,風險自擔”。網站上部分信息内容及圖片來自于網絡/注冊作者/投稿人,版權歸原作者所有,如有侵權,請您與我們聯系關閉,郵箱:938123@qq.com。
hhhhhhh
热门评论
最新评论
还没有评论快来抢沙发吧!
第三方賬号登錄
第三方賬号登錄
第三方賬号登錄
  • *站點:
  • *網址:
  • 類型:
  • 聯系方式:
  • 簡介:

  • RRH123歡迎您的加入!如有問題請添加咨詢管理員【微信号:938123】
  • *類型:
  • *問題:
  • 圖片說明:
  • 聯系方式:

  • RRH123感謝您的反饋!如有問題請添加咨詢管理員【微信号:938123】