程式交易教學

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

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



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

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

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



在早盤頭皮EA中加入同時持有多個部位的功能【複製源碼就可以使用】


在之前的文章介紹了透過簡單的時間限制和逆勢交易就可以取得良好的回測結果。

本篇文章將介紹在之前製作的EA中加入各種功能時又會出現什麼樣的變化。

上次的EA只可以持有一個部位。

這次修改為可以同時持有多個部位。

同時持有部位的數量對EA的影響

首先介紹同時增加持有部位數量時的優點和缺點。

<優點>

最大的優點就是,不會錯過下單的機會,並且可以擴大盈利

單倉EA在持有部位時不能增加新的部位。

因此,在持有部位時即便出現絕好的下單機會也只能錯過。

另外一個優點就是,透過連續下單可以像加倉一樣可以讓價位更接近盈虧平衡點。

<缺點>

持有的部位越多,當行情走勢相反時的虧損越容易擴大

雖然部位的最大持有數增加越多,越容易一點一點的積累收益,但是,當出現較大失敗時的虧損也會擴大。

另外,還有一個缺點就是很難管理手數

很多外匯平台都會在保證金維持率低於一定數值時執行強制平倉。

由於持有部位就會降低保證金維持率,因此有必要提前計算出「幾手的話可以持有幾個部位」。

說明

・下單

時間在日本時間清晨,並且RSI低於超賣線時下多單

時間在日本時間清晨,並且RSI高於超買線時下空單

・平倉

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

・其他

Copyright設置為「OANDA」

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

設置為只能持有1個部位

可以修改Magic Number和手數

以上內容是上次製作的EA。

這次把「其他」中的「同時只持有一個部位」修改為「可以在參數中設置同時持有的部位數量」。

製作EA

本程式是以上次的「製作早盤頭皮EA」為基礎製作,所以跳過上次內容,本篇文章至介紹加入的功能。

// Magic Number
input double Lots =0.01; // 1手為10萬貨幣
input int Slippage = 4; // 限制下單滑點
input double MaxSpread = 5; // 限制下單點差
input double TakeProfit = 30.0; // 停利點數(pips)
input int RSIPeriod=6; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 85; // 上線
input int DownLine = 25; // 下線
input int TradeTime = 0; // 交易時間
input int MaxPositions = 5; // 部位最大持有數

double dSpread;
在上次的程式中添加了「部位最大持有數」參數。

在這個參數中可以設置同時持有的部位數量

OnTick函數

void OnTick()
{
dSpread = (Ask - Bid) / (Point * 10);
//if(CalculateCurrentOrders()==0 && dSpread < MaxSpread) CheckForOpen(); 上次
if(CalculateCurrentOrders() < MaxPositions && dSpread < MaxSpread && Volume[0] == 1) CheckForOpen(); //這次

}
以上為OnTick函數。

上次,根據「CalculateCurrentOrders()==0」條件「持有部位數為0時下單」,這次,條件修改為「CalculateCurrentOrders() < MaxPosition」,這樣就可以在參數中設置同時持有的部位數量。

另外,又添加了一個新的條件「Volume[0] == 1」

Volume[0]是指取得當前K線的成交量數量。

「Volume[0] == 1」是「當前K線的成交量是第一個時」,也就是添加了「K線形成瞬間」這個條件。

因為比較難以理解,下面介紹有和沒有「Volume[0] == 1」時會有什麼不同。

・沒有「Volume[0] == 1」時

以下是可視模式下的回測結果。

可視模式下的回測結果

雖然從圖中很難看出,在同一根K線連續持有了5個多單

這個動作不太好。

因為這樣就浪費了下單時的點差,這樣的話不如加大手數只持有一個部位

・有「Volume[0] == 1」時

以下為添加「Volume[0] == 1」的結果。

「Volume[0] == 1」的結果

可以看出,因為添加了「Volume[0] == 1」,所以只會在每根K線第一個Tick時下單

回測結果

這次製作的最多可持有5個部位的EA與上次製作的只開一部位EA的回測結果進行比較。

回測條件如下。
    貨幣對:GBPUSD
    時間週期:5分鐘
    時間:從2018年1月1日至2023年1月1日的5年時間
    點差:固定為15

・一部位EA

一部位EA

・最多可持有5個部位EA

部位最大持有數 需要關注的是「交易總計」和「盈利因子」。

這次因為可以設置「部位最大持有數」,所以交易總計由511次增加到987次。

另外,因為指定「部位最大持有部位數」添加了類似加倉的功能,沒有錯過下單機會,盈利因子也有1.21上升到1.85。

單倉EA和多倉EA之間似乎沒有明顯的差異,但是,設置為多倉EA也可以帶來多種優點。

主要事項

這次回測是在固定點差中進行。

亞洲時間早盤的特徵是,市場波動相對較小,點差容易擴大

在實際操作中需要充分注意點差,對點差設置限制等措施。

完整源碼

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

// Magic Number
input double Lots =0.01; // 1手為10萬貨幣
input int Slippage = 4; // 限制下單滑點
input double MaxSpread = 5; // 限制下單點差
input double TakeProfit = 30.0; // 停利點數(pips)
input int RSIPeriod=6; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 85; // 上線
input int DownLine = 25; // 下線
input int TradeTime = 0; // 交易時間
input int MaxPositions = 5; // 部位最大持有數

double dSpread;

int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
dSpread = (Ask - Bid) / (Point * 10);
if(CalculateCurrentOrders() < MaxPositions && dSpread < MaxSpread && Volume[0] == 1) CheckForOpen();

}
void CheckForOpen()
{
int res;
double RSI = iRSI(Symbol(), 0, RSIPeriod, RSIAppliedPrice, 1);
if(TradeTime == TimeHour(Time[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);
}
}
}

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提供的資金進行交易,獲得高達90%的交易利潤分成。



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

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

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