程式交易教學

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

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



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

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

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



RSI的EA(自動交易)透過實際源碼製作說明

什麼是RSI?

RSI是「Relative Strength Index」的簡稱,可以翻譯為「相對強弱指數」。

計算公式為「一定週期內價格上漲幅度總計」除以「一定週期內價格上漲幅度和價格下跌幅度總計」,可以根據得出的數值判斷市場是否超買超賣。

RSI

從圖表的形態和RSI的形態可以看出,RSI的走勢和圖表的走勢基本相同。

RSI是以圖表的信息為基礎進行計算,所以圖表動的話RSI也會跟著動。

但是,並不會預測未來走勢,還請多加注意。

RSI的優勢是,可以0至100之間顯示圖表的價格波動。

因為數值只限於在0至100之間,所以可以判斷為「RSI低於20為超賣」、「RSI超過80為超買」,也是一種很容易編寫到程式中的指標。

關於RSI的詳細內容請參考以下文章。

>介紹RSI的基本解讀、使用方法以及交易策略

EA說明

首先介紹關於製作的EA內容。

在這裡整理好內容的話,有助於提高程式的質量。

下單條件

RSI低於超賣線後下多單

RSI高於超買線後下空單

平倉條件

根據停利價格和停損價格平倉

其他條件

Copyright設置為「OANDA」

透過滑點和點差限制下單數量

設置為只能持有1個部位

可以修改Magic Number和手數

製作EA

程式按照「前置處理」「領域」「函數(OnInit)」「函數(OnInit以外)」的順序進行介紹。

另外,因為文章是日文翻譯內容,所以請參考圖片上對應的中文。

プリプロセッサ:前置處理

フィールド:領域

関数:函數

函數

前置處理

#property copyright " Copyright(C) 2023, OANDA "
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
在默認的前置處理中,把copyright的地方修改為「Copyright(C) 2023, OANDA」。

這樣,當用戶把EA放到圖表是就可以清楚的知道版權屬於誰。

版權
TIPS版權:
編寫Copyright除了明確誰是版權持有人以外,還有「明確版權發行年份」的目的。

另外,正確的Copyright圖標是「©」,但是,由於在MT4中「©」不能明確顯示,所以會用「Copyright(c)」代用。

領域

input int MAGICMA = 23498721; // Magic Number
input double Lots =0.01; // 1手為10萬貨幣
input int Slippage = 4; // 限制下單滑點
input double MaxSpread = 5; // 限制下單點差
input double TakeProfit = 10.0; // 停利點數(pips)
input double LossCut = 20.0; // 停損點數(pips)
input int RSIPeriod=14; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 70; // 上線
input int DownLine = 30; // 下線

double dSpread;
這次的RSI的基本參數為「週期」「價格來源」「上線」「下線」。

當價格RSI高於設定的「上線」數值時將會下空單,當低於設定的「下線」時將會下多單。

另外,還添加了停利和停損用的參數「TakeProfit」和「LossCut」。

為了用戶使用方便,設定為用pips設置停利和停損。

OnInit函數

int OnInit()
{
return(INIT_SUCCEEDED);
}
OnInit函數與上次一樣,不需要另作說明。

OnTick函數

void OnTick()
{
dSpread = (Ask - Bid) / (Point * 10);
if(CalculateCurrentOrders()==0 && dSpread < MaxSpread) CheckForOpen();
}
OnTick函數也與上次一樣。

使用CalculateCurrentOrders函數計算現在未平倉的部位數量,當部位數量為0,且點差低於在參數中設定的點數時,會使用CheckForOpen函數進行下單。

這樣,把「計算部位的函數」和「進行下單的函數」分開使用的話,可以節省更多時間,也可以讓代碼更加簡單。

CheckForOpen函數

void CheckForOpen()
{
int res;
double RSI = iRSI(Symbol(), 0, RSIPeriod, RSIAppliedPrice, 1);

if(RSI < DownLine)
{
res=OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid - LossCut * Point * 10, Ask + TakeProfit * Point * 10,"", MAGICMA, 0, Red);
}
if(RSI > UpLine)
{
res=OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask + LossCut * Point * 10, Bid - TakeProfit * Point * 10, "", MAGICMA, 0, Blue);//
}
}
使用CheckForOpen函數,當RSI數值低於參數中所設定「下線」時就會下多單,當高於「上線」是就會下空單。

首先將iRSI函數存儲至double型的變數RSI中。

然後在後面加入if語句確認超買超賣,進行反向交易。

OrderSend函數的第6參數和第7參數可以分別指定為停利價格和停損價格。

下圖為換做MT4下單介面時的示意圖,日文對應的中文如下。

買いエントリー場合:買入進場時

利確価格:停利價格

損切価格:停損價格

OrderSend函數

完整源碼

#property copyright "Copyright(C) 2023, OANDA"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

input int MAGICMA = 23498721; // Magic Number
input double Lots =0.01; // 1手為10萬貨幣
input int Slippage = 4; // 限制下單滑點
input double MaxSpread = 5; // 限制下單點差
input double TakeProfit = 10.0; // 停利點數(pips)
input double LossCut = 20.0; // 停損點數(pips)
input int RSIPeriod=14; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 70; // 上線
input int DownLine = 30; // 下線

double dSpread;

int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
dSpread = (Ask - Bid) / (Point * 10);
if(CalculateCurrentOrders()==0 && dSpread < MaxSpread) CheckForOpen();//如果沒有部位的話可以建新部位

}
void CheckForOpen()
{
int res;
double RSI = iRSI(Symbol(), 0, RSIPeriod, RSIAppliedPrice, 1);

if(RSI < DownLine)
{
res=OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid - LossCut * dPoint, Ask + TakeProfit * dPoint,"", MAGICMA, 0, Red);
}
if(RSI > UpLine)
{
res=OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask + LossCut * dPoint, Bid - TakeProfit * dPoint, "", MAGICMA, 0, Blue);
}
}

int CalculateCurrentOrders()
{
int positions = 0;
for(int i=0;i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
positions++;
}
}
return positions;
}

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

EA

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

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

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



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

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

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