程式交易教學

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

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



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

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

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



運用MQL程式語言安裝各種MT4通知功能的方法解析

提示音

在本章內容中,將說明安裝各種MT4通知功能的方法。標準的通知方式有提示音、警示、郵件、智慧型手機推播通知等等。

本次將在「運用MQL程式語言顯示移動平均線交易訊號的方法」中製作的檔案上新增通知程式。

參考文章:運用MQL程式語言顯示移動平均線交易訊號的方法

首先將設定符號出現的位置,並先定義為「bar=0」的整數型,再使用if文體來製作條件公式。


int bar = 0;

if ((UP[bar] != EMPTY_VALUE || DN[bar] != EMPTY_VALUE)
此處的if文法中,「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;

if ((UP[bar] != EMPTY_VALUE || DN[bar] != EMPTY_VALUE) && Time[0] > timeMem) { PlaySound(“alert2.wav”);

timeMem = Time[0];

}

順道一提,如果使用「alert2.wav」,則將包含原本的MT4。若想確認其他的提示音,則可瀏覽MT4選單「工具」→「選項」中的的提醒聲音設定標籤。

提醒

此外,若雙點擊wav的名稱、點選「Choose other」,將會展開瀏覽器,並可確認其他配備的音源;如果希望取得預設之外的wav音源,便可匯入此檔案中加以利用。

警示

接下來將嘗試製作警示通知。只要使用Alert函數,即可將此處輸入的文字作為警示來顯示。

Alert(“Alert test\n警示內容”);

郵件

郵件的部分則會使用SendMail函數。與前述說明的警示有所不同,此處將設定2種類的文字序列:逗號分段前的郵件標題、以及其後的本文。只要送出內文,就會如同下列畫面所示(範例為Gmail)。

範例為Gmail

雖然前文並未提及,但在傳送郵件時,必須透過MT4的選項來登錄E-mail。可至選單的「工具」→「選項」中的E-mail標籤中登錄資訊,並點選啟用。

電郵啟動

推播通知

最後將製作智慧型手機的推播通知功能。

為了製作此推播通知,必須預先於iPhone或Android中裝載MT4應用程式。MT4應用程式中將存有原本的「MetaQuotes ID」,因此只要將此ID登錄於MT4的選項中,即可設定推播通知。

至選單的「工具」→「選項」,並在通知功能標籤中輸入MetaQuotes ID,將推播通知功能勾選為啟用即可完成。

啟用推送通知

在程式中使用SendNotification函數。

SendNotification(“通知內容”);

發出通知時,MT4應用程式的「聊天與訊息」中將會收到以下訊息。

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

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

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

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



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

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

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