程式交易教學

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

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



全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃

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

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



如何製作早盤頭皮EA 使用源碼說明

什麼是早盤頭皮?

早盤頭皮是在價格波動比較緩慢的台灣清晨時間進行頭皮交易的策略。

下單的順序是,「價格波動緩慢」→「容易出現震盪行情」→「在超買超賣出現反彈時做反向交易」。

但是,台灣清晨時間是不是真的價格波動緩慢呢?

請看下圖確認。

價格波動緩慢

這是USDJPY的30分鐘圖表。

在指標窗口中所顯示的是交易量。

在MT4中的交易量就是「Tick更新頻度」。

也就是,「在30分鐘裡更新了幾次交易」。

從圖中可以看出,連續出現高峰和低谷,存在著極高和極低的交易量。

這個交易量小的時間點也就是台灣的清晨時間,這時,市場的價格波動也會放緩。

EA說明

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

下單

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

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

平倉

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

其他

Copyright設置為「OANDA」,透過滑點和點差限制下單數量。

設置為只能持有1個部位。

可以修改Magic Number和手數。

製作EA

根據前一篇的「4.使用RSI製作EA」對程式進行時間限制的過濾。

在本篇文章中只描述變更點。

領域

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=6; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 85; // 上線
input int DownLine = 25; // 下線
input int TradeTime = 0; // 交易時間

double dSpread;
在上次的程式中添加了「交易時間」參數。

只限在這裡設定的時間才可以進行交易。

OANDA的MT4伺服器時間(0點)為GMT+3、冬時令為+2,與GMT+8的台灣在時間上會有時差。

考慮到時差的話,台灣的清晨(5點~6點)是MT4的0點,所以,這次的「交易時間」參數設置為0。

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);//
}
}
}
在下單條件中加入了if分鐘,以確定當前時間是否是在參數中所指定的時間。

TimeHour函數把datetime類型的變量作為參數,可以接受到參數的時間(0~23)。

回測結果

下面時這次EA的回測結果。

貨幣對:GBPUSD

時間週期:5分鐘

時間:2018年1月1日~2023年1月1日的5年時間

點差:固定為15

EA的回測結果

可以看到只需要透過時間限制和RSI就可以得到非常優秀的結果。

如果在這個邏輯上再加入指標和追蹤止損的話,就可以開發出更好的EA。

注意事項

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

在台灣清晨行情放緩的時間段,點差也會擴大。

如果在實盤中操作時,還請多注意點差,做好點差限制措施。

完整源碼

#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=6; // 週期
input ENUM_APPLIED_PRICE RSIAppliedPrice = PRICE_CLOSE; // 價格來源
input int UpLine = 85; // 上線
input int DownLine = 25; // 下線
input int TradeTime = 0; // 交易時間

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(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;
} if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
positions++;
}
}
return positions;
}

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

EA

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

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

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



全面升級——更多功能、更大靈活性!
優化了“固定最大虧損”,“每日虧損限制”等。查看詳情全新「Boost」計劃

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

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