程式交易教學

誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)

報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。



優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。

500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。

豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。



MQL程式語言的全域變數說明解析

使用CHART_EVENT_MOUSE_MOVE

本章將說明全域變數。一般的全域變數意指函數以外所宣告的變數;在具體說明之前,將先製作模板。此處使用的檔案名稱為「LineSync_demo」,「自定義指標的事件處理程序」則選擇「OnTimer」以及「OnChartEvent」。

OnChartEvent

本次使用的是「終端的全域變數」。製作的變數將適用於任何圖表,且一但製作完成之後,即使電腦或MT4斷線,也能保存4週的數據。此處將使用終端的全域變數,並製作能在圖表之間讀取數據的十字線同步工具。

為了顯示十字線,首先將製作「ChartEvent」。在MQL4相關參考中搜尋「ChartEvent」,點擊搜尋結果中的「Types of Chart Events」,使用「CHART_EVENT_MOUSE_MOVE」。第一個參數「lparam」為游標的X座標位置,第二個「dparam」則是Y座標的位置。本次雖然沒有使用第三個「sparam」,但其可顯示游標的按鍵是否處於按下的狀態。

ChartEvent

MOUSE_MOVE的參數數值
Id參數的數值 CHARTEVENT_MOUSE_MOVE
lparam參數的數值 X座標
dparam參數的數值 Y座標
sparam參數的數值 說明游標按鍵狀態的位元遮罩文字列數值

運用ChartXYToTimePrice將座標變更為時間與價格

使用MOUSE_MOVE的狀況下,需如以下所示對 OnInit函數旗下進行宣告。

ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);

接著從OnChartEvent內的參數取得座標,並將其變更為圖表上的價格與時間資訊。此處使用的函數是「ChartXYToTimePrice」,其為將XY變更為time與price的函數。

if(id == CHARTEVENT_MOUSE_MOVE) {

int x = (int)lparam;

int y = (int)dparam;

int win = 0;

double price;

datetime time;

if (ChartXYToTimePrice(0, x, y, win, time, price)) {

GlobalVariableSet(“GVlauePrice”, price);

GlobalVariableSet(“GVlaueTime”, time);

}

}

如此一來,便完成了將XY座標變更為價格與時間資訊。

運用變更數據顯示垂直線與水平線

方才已使用ChartXYToTimePrice將XY座標變更為價格與時間資訊;接下來將利用該變更的數據,嘗試畫出十字線的縱線與橫線。

此處將使用MQL4相關參考中複製的範例編碼。在MQL4相關參考的目次中,選擇「Constants, Enumerations and Structures」→「Objects Constants」→「Object Types」即可瀏覽物件;複製其中代表縱線的「OBJ_VLINE」以及橫線的「OBJ_HLINE」編碼,再貼上於檔案中。

OBJ_VLINE

OBJ_HLINE

接下來,將設定OnChartEvent旗下HLineCreate及VLineCreate的參數。HLineCreate的圖表ID為「0」、名稱為「HLine」、window為「0」、最後則設定為「price」。VLineCreate也相同,圖表為「0」、名稱為「VLine」、window為「0」、最後則設定為「time」。其他的參數將直接使用預設值,因此可以忽略。

HLineCreate(0, “HLine”, 0, price);

VLineCreate(0, “VLine”, 0, time);

如此進行編譯,即可顯示垂直線與水平線。

以線條追蹤游標的動作

雖已完成了垂直線與水平線的顯示,但預設為顯示一次之後便會結束,因此需進行修改來反映游標位置的最新數值。在VLineCreate旗下增加「ObjectSetInteger(chart_ID, name, OBJPROP_TIME, 0, time);」、HLineCreate旗下則是增加「ObjectSetDouble(chart_ID, name, OBJPROP_PRICE, 0, price);」。

//— create a vertical line

if(!ObjectCreate(chart_ID, name, OBJ_VLINE, sub_window, time, 0)) {

/* Print(__FUNCTION__,

“: failed to create a vertical line! Error code = “,GetLastError()); */

ObjectSetInteger(chart_ID, name, OBJPROP_TIME, 0, time);

return(false);

}

//— create a horizontal line

if(!ObjectCreate(chart_ID, name, OBJ_HLINE, sub_window, 0, price)) {

/* Print(__FUNCTION__,

“: failed to create a horizontal line! Error code = “,GetLastError());*/

ObjectSetDouble(chart_ID, name, OBJPROP_PRICE, 0, price);

return(false);

}

如此即可讓垂直線與水平線配合游標的動作。由於其後的各種線條也將改變為所選的狀態,因此在VLineCreate與HLineCreate參數的「selection」中,應將「true」變更為「false」來解除選擇。另外,為了避免製作完成的線條消失,針對刪除指標・再讀取・編譯時會使其消失的OnDeinit函數,將如以下所示先行設定。

//+——————————————————————+

//| Custom indicator deinit function |

//+——————————————————————+

void OnDeinit(const int reason)

{

ObjectDelete(0, “VLine”);

ObjectDelete(0, “HLine”);

}

另外,在目前的設定下,如果游標在圖表上靜止不動,便會得出該線條位置的價格資訊;如欲避免此狀況,需在各個線條的參數上添加以下文字。

ObjectSetString(chart_ID, name, OBJPROP_TOOLTIP, “\n”);

如此便完成了十字線。

游標指標

游標指標(十字線)雖已完成,但是當不同時間週期的圖表並列顯示時,將無法進行同步;而同步的方法請參考以下文章的內容。

在不同的時間軸圖表中同步滑鼠游標的方法

將EA自動程式交易應用於外匯與差價合約交易中

EA

我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。

誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)

報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。



優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。

500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。

豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。