誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。
運用MQL程式語言安裝各種MT4通知功能的方法解析
提示音
在本章內容中,將說明安裝各種MT4通知功能的方法。標準的通知方式有提示音、警示、郵件、智慧型手機推播通知等等。本次將在「運用MQL程式語言顯示移動平均線交易訊號的方法」中製作的檔案上新增通知程式。
參考文章:運用MQL程式語言顯示移動平均線交易訊號的方法
首先將設定符號出現的位置,並先定義為「bar=0」的整數型,再使用if文體來製作條件公式。
int bar = 0;此處的if文法中,「bar」設定的符號序列值並非「EMPTY_VALUE」(空值),也就是說其將會顯示訊號。如此將形成可顯示上漲訊號或下跌訊號的公式。
if ((UP[bar] != EMPTY_VALUE || DN[bar] != EMPTY_VALUE)
此處將使用PlaySound函數作為提示音,並輸入音源檔案的名稱;如此便完成了在箭頭出現時發出提示音的設定。
PlaySound(“alert2.wav”);
但是在完成此條件之後,每次常載區域進行傳輸時都會發出聲響,因此可修改為1根K線只會響音1次。
完成此動作需要記憶時間;為了進行記憶,則需先宣告「static」、再宣告「datetime」作為時間格式,並製作「timeMem」,如此便會在發出聲響1次之後記下此時間點。
「Time」序列一開始就在MT4中存在,指的是當前顯示的圖表的時間週期。
時間「0」代表最新的K線時間(開盤價),並且會記憶該時間點。在該條件公式中,增加顯示訊號、「Time[0]」大於記憶(切換K線時)等條件。
透過此方法,將完成1次K線只發出1次通知的迴路。
static datetime timeMem;順道一提,如果使用「alert2.wav」,則將包含原本的MT4。若想確認其他的提示音,則可瀏覽MT4選單「工具」→「選項」中的的提醒聲音設定標籤。
if ((UP[bar] != EMPTY_VALUE || DN[bar] != EMPTY_VALUE) && Time[0] > timeMem) { PlaySound(“alert2.wav”);
timeMem = Time[0];
}
此外,若雙點擊wav的名稱、點選「Choose other」,將會展開瀏覽器,並可確認其他配備的音源;如果希望取得預設之外的wav音源,便可匯入此檔案中加以利用。
警示
接下來將嘗試製作警示通知。只要使用Alert函數,即可將此處輸入的文字作為警示來顯示。Alert(“Alert test\n警示內容”);
郵件
郵件的部分則會使用SendMail函數。與前述說明的警示有所不同,此處將設定2種類的文字序列:逗號分段前的郵件標題、以及其後的本文。只要送出內文,就會如同下列畫面所示(範例為Gmail)。雖然前文並未提及,但在傳送郵件時,必須透過MT4的選項來登錄E-mail。可至選單的「工具」→「選項」中的E-mail標籤中登錄資訊,並點選啟用。
推播通知
最後將製作智慧型手機的推播通知功能。為了製作此推播通知,必須預先於iPhone或Android中裝載MT4應用程式。MT4應用程式中將存有原本的「MetaQuotes ID」,因此只要將此ID登錄於MT4的選項中,即可設定推播通知。
至選單的「工具」→「選項」,並在通知功能標籤中輸入MetaQuotes ID,將推播通知功能勾選為啟用即可完成。
在程式中使用SendNotification函數。
SendNotification(“通知內容”);
發出通知時,MT4應用程式的「聊天與訊息」中將會收到以下訊息。
原始碼
本次製作的原始碼如下列所示。//+——————————————————————+
//| MA_Cross_Sign_demo.mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+——————————————————————+
#property copyright “Copyright 2020, MetaQuotes Software Corp.”
#property link “https://www.mql5.com”
#property version “1.00”
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots 4
//— parameters
input string _00 = “”; // [ MA1 ]
input int PERIOD0 = 5; // 週期
input int SHIFT0 = 0; // 移動
input ENUM_MA_METHOD METHOD0 = MODE_SMA; // MA類別
input ENUM_APPLIED_PRICE PRICE0 = PRICE_CLOSE; // 適用價格
input color CLR0 = clrWhite; // 顏色
input ENUM_LINE_STYLE STYLE0 = STYLE_SOLID; // 線條種類
input int WIDTH0 = 1; // 寬度
input string _10 = “”; //
input string _11 = “”; // [ MA2 ]
input int PERIOD1 = 20; // 週期
input int SHIFT1 = 0; // 移動
input ENUM_MA_METHOD METHOD1 = MODE_SMA; // MA類別
input ENUM_APPLIED_PRICE PRICE1 = PRICE_CLOSE; // 適用價格
input color CLR1 = clrYellow; // 顏色
input ENUM_LINE_STYLE STYLE1 = STYLE_SOLID; // 線條種類
input int WIDTH1 = 1; // 寬度
//— indicator buffers
double MABuffer0[], MABuffer1[];
double UP[], DN[];
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit()
{
//— indicator buffers mapping
SetIndexBuffer(0,MABuffer0);
SetIndexBuffer(1,MABuffer1);
SetIndexBuffer(2,UP);
SetIndexBuffer(3,DN);
SetIndexStyle (0, DRAW_LINE, STYLE0, WIDTH0, CLR0);
SetIndexStyle (1, DRAW_LINE, STYLE1, WIDTH1, CLR1);
SetIndexStyle (2, DRAW_ARROW, STYLE_SOLID, 2, clrRed);
SetIndexStyle (3, DRAW_ARROW, STYLE_SOLID, 2, clrDodgerBlue);
SetIndexLabel(0, “MA1”);
SetIndexLabel(1, “MA2”);
SetIndexLabel(2, “Buy”);
SetIndexLabel(3, “Sell”);
SetIndexArrow(2, 233);
SetIndexArrow(3, 234);
//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| 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[])
{
//—
int limit = Bars – IndicatorCounted() – 1;
if (limit < 1) limit = 1;
for (int i = limit; i >= 0; i–) {
MABuffer0[i] = iMA(NULL, 0, PERIOD0, SHIFT0, METHOD0, PRICE0, i );
MABuffer1[i] = iMA(NULL, 0, PERIOD1, SHIFT1, METHOD1, PRICE1, i );
if (MABuffer0[i] > MABuffer1[i] && MABuffer0[i + 1] <= MABuffer1[i + 1]){
UP[i] = Low[i];
} else {
UP[i] = EMPTY_VALUE;
}
if (MABuffer0[i] < MABuffer1[i] && MABuffer0[i + 1] >= MABuffer1[i + 1]){
DN[i] = High[i];
} else {
DN[i] = EMPTY_VALUE;
}
}
//通知
int bar = 0;
static datetime timeMem;
if ((UP[bar] != EMPTY_VALUE || DN[bar] != EMPTY_VALUE) && Time[0] > timeMem) {
Alert(“Alert test\n警示內容”);
PlaySound(“alert2.wav”);
SendMail(“內容”,”send test”);
SendNotification(“通知內容”);
timeMem = Time[0];
}
//— return value of prev_calculated for next call
return(rates_total);
}
//+——————————————————————+
將EA自動程式交易應用於外匯與差價合約交易中
我們以圖文形式詳細介紹有關EA自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。
誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。