誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。
運用ATR製作波動判別工具的方法|數值的顯示方式與變更顯示顏色的方法
1.以參數設定ATR的週期與容許值
本篇章節中,將說明如何以ATR製作波動判別工具。工具的功能包含於圖表上顯示ATR數值、在該數值未達容許值的狀態下變更顯示顏色、以及使用趨勢線在圖表上顯示大型×標記等等。首先,在製作新檔案時選擇「自訂指標」,並將檔案命名為「ATR_Judge」。接著將ATR的週期與容許值設定為參數。期間的名稱為「PERIOD」、類型為「int」、預設值為「14」,容許值名稱則是「LEVEL」、類型為「double」、預設值為「1.5」。在「自訂指標程式的事件處理常式」中勾選「OnChartEvent」,並在下一個畫面中點擊「完成」即是雛形。
2.定義前綴允許可刪除物件
由於本次會使用物件,因此為了往後能將其統一刪除,必須在檔案上方的屬性「property indicator_chart_window」之下,將「PREFIX」定義為前綴。「MQLInfoString(MQL_PROGRAM_NAME)」將會顯示指標的檔案名稱。#define PREFIX MQLInfoString(MQL_PROGRAM_NAME) + “_”其次應在「Custom indicator initialization function」之下設置「Custom indicator deinitialization function」,並寫入使用OnDeinit的下列編碼。如此一來,只要從圖表上刪除指標,相關的物件便會一併消失。
void OnDeinit(const int reason)另外,也使用列舉型的「ENUM_TIMEFRAMES」來指定時間條列。此處將5分鐘單位設定為預設值。在「input int PERIOD=14;」上方寫入下列編碼即可。
{
ObjectsDeleteAll(0, PREFIX);
}
input ENUM_TIMEFRAMES TF = PERIOD_M5; // 時間足
3.製作處理物件繪圖的函數
接著將定義處理繪圖物件的函數。在「ChartEvent function」之下設置「Draw function」,並製作新的「DrawX()」函數。//+——————————————————————+在DrawX()當中,先使用iATR函數來定義ATR。由於欲使用目前顯示的物件,因此貨幣對選擇「NULL」,時間框架與週期則是由參數所定義的物件,因為想要從價格以確定的K線上取得ATR數值,故指定為「1」,並將ATR的數值轉換為pips單位。
//| Draw function |
//+——————————————————————+
void DrawX()
{
}
double atr = iATR(NULL, TF, PERIOD, 1) / _Point / 10;此ATR數值若未達LEVEL(容許值),便會將波動性判定為「小」。關於物件的顏色,則會在使用三項運算子的ATR數值較小時顯示「紅色」、偏大時顯示「白色」。
bool small = atr < LEVEL;
color clrATR = small ? clrRed : clrWhite;
4.沿用LABEL物件的範例編碼
在上述文章中,設定了前綴以製作處理物件繪圖的函數「DrawX()」,並說明了當中的ATR定義方式。接下來,將使用LABEL物件,將ATR數值顯示於圖表上。可從MQL4幫助檔中,複製使用LABEL物件的範例編碼。於MQL4幫助檔目錄中點選「Constants, Enumerations and Structures」→「Objects Constants」→「Object Types」,便會顯示物件一覽表。從中選擇「OBJ_LABEL」,並將預先準備的「Create a text label」編碼複製貼上於檔案的下方。
「Print(__FUNCTION__,」「”: failed to create text label! Error code = “,GetLastError());」的兩行不需使用,因此可加上「/*」「*/」作為註解,並加上「ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);」以便在其下反應ATR的數字變化、以及「ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);」以反映顏色變化。
//+——————————————————————+
//| Create a text label |
//+——————————————————————+
bool LabelCreate(const long chart_ID = 0, // chart’s ID
const string name = “Label”, // label name
const int sub_window = 0, // subwindow index
const int x = 0, // X coordinate
const int y = 0, // Y coordinate
const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER, // chart corner for anchoring
const string text = “Label”, // text
const string font = “Arial”, // font
const int font_size = 10, // font size
const color clr = clrRed, // color
const double angle = 0.0, // text slope
const ENUM_ANCHOR_POINT anchor = ANCHOR_LEFT_UPPER, // anchor type
const bool back = false, // in the background
const bool selection = false, // highlight to move
const bool hidden = true, // hidden in the object list
const long z_order = 0) // priority for mouse click
{
//— reset the error value
ResetLastError();
//— create a text label
if(!ObjectCreate(chart_ID, name, OBJ_LABEL, sub_window, 0, 0)) {
/* Print(__FUNCTION__,
“: failed to create text label! Error code = “,GetLastError());*/
ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
return(false);
}
//— set label coordinates
ObjectSetInteger(chart_ID, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(chart_ID, name, OBJPROP_YDISTANCE, y);
//— set the chart’s corner, relative to which point coordinates are defined
ObjectSetInteger(chart_ID, name, OBJPROP_CORNER, corner);
//— set the text
ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);
//— set text font
ObjectSetString(chart_ID, name, OBJPROP_FONT, font);
//— set font size
ObjectSetInteger(chart_ID, name, OBJPROP_FONTSIZE, font_size);
//— set the slope angle of the text
ObjectSetDouble(chart_ID, name, OBJPROP_ANGLE, angle);
//— set anchor type
ObjectSetInteger(chart_ID, name, OBJPROP_ANCHOR, anchor);
//— set color
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//— display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//— enable (true) or disable (false) the mode of moving the label by mouse
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//— hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID, name, OBJPROP_HIDDEN, hidden);
//— set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//— successful execution
return(true);
}
5.以LabelCreate顯示ATR數值
在DrawX()當中執行設定的LabelCreate。針對LabelCreate的參數,圖表ID為「0」、名稱為「PREFIX + “ATR”」,視窗為主視窗的「0」、X與Y位置皆為「0」、標準位置則指定為左下方的「CORNER_LEFT_LOWER」。ATR數值顯示至小數點1位以下,字體為「Arial Bold」、尺寸為「20」、顏色是先前定義的「clrATR」、角度為「0」、錨定則設定為左下方的「ANCHOR_LEFT_LOWER」。LabelCreate(0, PREFIX + “ATR”, 0, 0, 0, CORNER_LEFT_LOWER, DoubleToString(atr, 1), “Arial Bold”, 20, clrATR, 0, ANCHOR_LEFT_LOWER);接著將製作的DrawX()於OnCalculate函數之下進行宣告。在「//— return value of prev_calculated for next call」上方設置「DrawX();」。
int OnCalculate(const int rates_total,如此進行編譯並設定圖表,就能在圖表左下方顯示ATR數值。由於容許值的預設值小於「1.5」,因此數值會呈現紅色。
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//—
DrawX();
//— return value of prev_calculated for next call
return(rates_total);
}
6.定義圖表四角的時間與價格資訊
接下來,在ATR數值小於容許值時,為了能在圖表上以趨勢線繪製×標記,故需定義圖表四角的時間與價格資訊。首先以「ChartGetDouble」取得圖表的最大值與最小值。double max = ChartGetDouble(0, CHART_PRICE_MAX);其次取得K線位置藉以指定時間。以「CHART_FIRST_VISIBLE_BAR」取得圖表左邊的K線,自該處拖曳圖表整體的K線數量「CHART_WIDTH_IN_BARS」,進而取得右邊的K線。
double min = ChartGetDouble(0, CHART_PRICE_MIN);
int barL = (int)ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR);為了以此換算時間,左邊的K線雖可就此直接定義,但至於右邊的K線,則需要在小於零時設定為「Time[0] – barR * PeriodSeconds()」。此原因在於序列 (Time[])的必要編號無法指定為負數。
int barR = barL – (int)ChartGetInteger(0, CHART_WIDTH_IN_BARS);
datetime timeL = Time[barL];在ATR數值小於容許值時,趨勢線的顏色會呈現橘色,反之則因不會顯示而呈現無色。
datetime timeR = barR >= 0 ? Time[barR] : Time[0] – barR * PeriodSeconds();
color clrX = small ? clrOrange : clrNONE;關於在圖表上以趨勢線繪製×標記的方式,請參考以下文章。
參考文章:以ATR製作波動判別工具的方法|在圖表上繪製×標記的方法
將EA自動程式交易應用於外匯與差價合約交易中
我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。
誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。