誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。
透過LabelCreate函數的運用 讓數字倒數計時的方式解說
使數字倒數計時的方法
在「使用MQL程式語言中OnTimer函數的準備工作」文章中,運用了Comment函數製作簡易時鐘,並使用Label物件來顯示K線定型前的剩餘時間。參考文章:使用MQL程式語言中OnTimer函數的準備工作
但是該處的數字並不會進行倒數計時的動作,因為LabelCreate函數設定為「成功運作一次之後,並不會繼續再次執行」,因此在一次運作完成之後,還需進行修正才能顯示數字。
在從MQL4相關參考中複製貼上的LabelCreate函數中,create a text label的if文法處添加ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);」。
//— create a text label如此進行編譯,就會更新文字列的資訊,使數字開始倒數計時。
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
Print(__FUNCTION__,
“: failed to create text label! Error code = “,GetLastError());
return(false);
}
倒數計時結束後變成「0」
此處可依照喜好自由設定;而目前的狀況下,在倒數計時至1之後,接下來的數字並非「0」、而是回到「60」,因此要在OnTimer函數中添加「if(countDown == PeriodSeconds()) countDown = 0;」的if文法,如此便會在倒數計時到「0」之後,修正數字回到「59」。void OnTimer()此處的if文法條件為「倒數計時與K線秒數一致時變成0」;新增此文法後,就會在倒數計時結束時顯示「0」。
{
//—
Comment(TimeLocal(),”\n”,TimeCurrent(),”\n”,int(TimeLocal() – TimeCurrent()) / 3600);
int countDown = PeriodSeconds() – (int)TimeLocal() % PeriodSeconds();
if(countDown == PeriodSeconds()) countDown = 0;
LabelCreate(0, “Clock”, 0, 100, 100, CORNER_LEFT_UPPER, (string)countDown, “Arial Bold”, 30, clrWhite);
}
最後,當在從圖表中刪除指標時,如果要一併刪除文字與物件,只需在OnDeinit函數的位置加上「Comment(“”);」。
void OnDeinit(const int reason)
{
EventKillTimer();
ObjectDelete(“Clock”);
Comment(“”);
}
原始碼
本次製作的原始碼如下列所示。//+——————————————————————+
//| TimerTest.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+——————————————————————+
#property copyright “Copyright 2021, MetaQuotes Software Corp.”
#property link “https://www.mql5.com”
#property version “1.00”
#property strict
#property indicator_chart_window
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit()
{
//— indicator buffers mapping
EventSetMillisecondTimer(100);
//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Custom indicator deinitialization function |
//+——————————————————————+
void OnDeinit(const int reason)
{
EventKillTimer();
ObjectDelete(“Clock”);
Comment(“”);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
int OnCalculate(const int rates_total,
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[])
{
//—
//— return value of prev_calculated for next call
return(rates_total);
}
//+——————————————————————+
//| Timer function |
//+——————————————————————+
void OnTimer()
{
//—
Comment(TimeLocal(),”\n”,TimeCurrent(),”\n”,int(TimeLocal() – TimeCurrent()) / 3600);
int countDown = PeriodSeconds() – (int)TimeLocal() % PeriodSeconds();
if(countDown == PeriodSeconds()) countDown = 0;
LabelCreate(0, “Clock”, 0, 100, 100, CORNER_LEFT_UPPER, (string)countDown, “Arial Bold”, 30, clrWhite);
}
//+——————————————————————+
//| 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))
{
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
Print(__FUNCTION__,
“: failed to create text label! Error code = “,GetLastError());
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);
}
//+——————————————————————+
將EA自動程式交易應用於外匯與差價合約交易中
我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。
誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。