誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。
在早盤頭皮EA中加入馬丁格爾策略功能【複製源碼就可以使用】
上篇文章中介紹了在簡單的時間限制以及逆勢交易邏輯中,加入追蹤停損的話會有什麼影響。
本篇文章將介紹「追蹤停損」以外,如果加入「馬丁格爾策略」的話會有什麼樣的結果。
馬丁格爾策略主要是作為賭場策略而開發的。
策略非常簡單,就是把賭金一直加倍到盈利為止。
外匯交易中的馬丁格爾策略一般都是加2倍手數。
馬丁格爾策略的優點和缺點
以下為馬丁格爾策略的優點和缺點。優點
優點是一次就可以賺回之前的全部虧損。一般來說,一次虧損需要2次盈利才可以獲利,而馬丁格爾策略且只需要一次盈利就可以。
缺點
缺點就是,如果連續虧損的話資金馬上就會用完。在外匯交易中,每筆交易都是獨立的,因此也有可能會出現連續虧損。
所以,在交易時需要充分的資金。
例如,初次下單是0.01手,連續虧損10次時,在第11次的手數就會變成10.24手。
馬丁格爾策略就是如果資金不夠就會馬上爆倉。
在外匯交易中需要對馬丁格爾的注意事項
馬丁格爾雖然有介紹說「一次就可以賺回全部虧損」,但這只限於與停損幅度與停利幅度相同時,如果停損幅度高於停利幅度的話一次不能賺回全部虧損。
在外匯交易中,根據點差以及下單時機等因素,並不只是按照加碼2倍來計算這麼簡單。
說明
首先介紹上次製作的EA。・下單
時間在台灣時間清晨,並且RSI低於超賣線時下多單時間在台灣時間清晨,並且RSI高於超買線時下空單
・平倉
根據停利價格和停損價格平倉・其他
Copyright設置為「OANDA」透過滑點和點差限制下單數量
設置為只能持有1個部位
可以修改Magic Number和手數
以上內容是上次製作的EA。
這次在以上內容中加入可以設置馬丁格爾次數的參數。
如果這個參數是「3」時,代表可以加碼3次,每次2倍手數。
如果連續虧損4次時,就不在加碼2倍,只按當時的價格下單。
製作EA
本程式是以上次的「製作早盤頭皮EA」為基礎製作,所以跳過上次內容,本篇文章至介紹加入的功能。領域
input int MAGICMA = 23198721; // Magic Number在上次的參數中最後添加了NumMartin參數。
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; // 交易時間
//設置馬丁格爾
input int NumMartin = 5; // 在馬丁格爾中加倍加碼的最大次數
OnTick函數
void OnTick()以上為OnTick函數。
{
dSpread = (Ask - Bid) / (Point * 10);
int loseCount = 0; //虧損次數
for( int i= OrdersHistoryTotal()-1; i>=0; i-- ){ //①
if( OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true && OrderMagicNumber() == MAGICMA && OrderSymbol() == Symbol() ){
if( OrderProfit() <= 0 ){ //②
if(loseCount >= NumMartin)break; //③
loseCount++; //②
}
else{
break;
}
}
}
double lot = Lots * MathPow(2, loseCount); //④
if(CalculateCurrentOrders()==0 && dSpread < MaxSpread) CheckForOpen(lot); //⑤
}
-
①執行馬丁格爾時會根據最近交易的虧損次數來決定手數。
因此,OnTick函數開始會先查看以往交易的虧損次數。
②根據 「OrderProfit() < =0」這個條件,如果盈虧小於0時,「loseCount」變量將會遞增加1。
③ loseCount的數值不能超過NumMartin參數的數值。
④ 根據loseCount的次數計算手數。
MathPow只返回第1個參數的數值乘以第2個參數的數值。
⑤ 作為參數傳給CheckForOpen函數。
CheckForOpen函數
void CheckForOpen(double int lot)這次手數會在OnTick函數中計算,因此可以將手數指定為函數。
{
int res;
double RSI = iRSI(Symbol(), 0, RSIPeriod, RSIAppliedPrice, 1);
if(TradeTime == TimeHour(Time[1]))
{
if(RSI < DownLine)
{
res=OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, Bid - TrailWidth * Point * 10, Ask + TakeProfit * Point * 10,"", MAGICMA, 0, Red);
}
if(RSI > UpLine)
{
res=OrderSend(Symbol(), OP_SELL, lot, Bid, Slippage, Ask + TrailWidth * Point * 10, Bid - TakeProfit * Point * 10, "", MAGICMA, 0, Blue);
}
}
}
不要忘記在OrderSend函數的第3個參數中指定接受的手數。
回測結果
這次製作的馬丁格爾EA與上次製作的只開一部位EA的回測結果進行比較。回測條件如下。
-
貨幣對:GBPUSD
時間週期:5分鐘
時間:從2018年1月1日至2023年1月1日的5年時間
點差:固定為15
一部位EA
馬丁格爾EA
可以看到,在曲線圖的下方有顯示綠色柱狀圖
這是下單時的手數。
也就是說,綠色柱狀長的地方也就是連續虧損的地方。
從成績上來說,在交易次數、盈利因子、勝率等項目中高於一部位EA。
但是,由於手數會增加,所以最大回撤也高於一部位EA。
主要事項
這次回測是在固定點差中進行。台灣時間早盤的特徵是,市場波動相對較小,點差容易擴大。
在實際操作中需要充分注意點差,對點差設置限制等措施。
馬丁格爾策略有可能會在一瞬間就會失去全部資金,在使用時還請多加注意。
完整源碼
#property copyright "Copyright(C) 2023, OANDA"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
input int MAGICMA = 23198721; // 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; // 交易時間
//設置馬丁格爾
input int NumMartin = 5; // 在馬丁格爾中加倍加碼的最大次數
double dSpread;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
dSpread = (Ask - Bid) / (Point * 10);
int loseCount = 0; //虧損次數
for( int i= OrdersHistoryTotal()-1; i>=0; i-- ){
if( OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true && OrderMagicNumber() == MAGICMA && OrderSymbol() == Symbol() ){
if( OrderProfit() <= 0 ){
if(loseCount >= NumMartin)break;
loseCount++;
}
else{
break;
}
}
}
double lot = Lots * MathPow(2, loseCount);
if(CalculateCurrentOrders()==0 && dSpread < MaxSpread) CheckForOpen(lot);
}
void CheckForOpen(double lot)
{
int res;
double RSI = iRSI(Symbol(), 0, RSIPeriod, RSIAppliedPrice, 1);
if(TradeTime == TimeHour(Time[1]))
{
if(RSI < DownLine)
{
res=OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, Bid - LossCut * Point * 10, Ask + TakeProfit * Point * 10,"", MAGICMA, 0, Red);
}
if(RSI > UpLine)
{
res=OrderSend(Symbol(), OP_SELL, lot, 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自動程式交易的基本知識,以及在MT4/MT5平台上的安裝、參數設定方法、編碼等等內容。另外,對持有OANDA帳戶的客戶,還可以免費使用我們的獨有EA與指標工具。
誠邀您參加全球知名外匯經紀商OANDA的自營交易(Prop Trader)
報名OANDA自營交易(Prop Trader),並通過我們的考核,您就可以使用OANDA提供的資金進行交易,獲得高達90%的交易利潤分成。
優化了挑戰塞交易規則
無最低交易天數限制等優化了挑戰賽的交易規則。
500,000美元交易資金
您可以使用最高500,000美元的資金進行交易。
豐富的交易商品
您可以交易包括外匯、黃金、原油、股票指數等多種商品。