Исходный код · ID 303
mfi_r2_ea_v2.3.mq4
Похожие материалы по тегам
ea robofibo source v.11.2.mq4MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MetaTrader 4 · 1 общих теговnewstrader.mq5MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown.mq5MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mfi_r2_ea_v2.3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Поиск по коду файла
#include <stdlib.mqh>
#define AUDCAD 1
#define AUDJPY 2
#define AUDNZD 3
#define AUDUSD 4
#define CHFJPY 5
#define EURAUD 6
#define EURCAD 7
#define EURCHF 8
#define EURGBP 9
#define EURJPY 10
#define EURUSD 11
#define GBPCHF 12
#define GBPJPY 13
#define GBPUSD 14
#define NZDJPY 15
#define NZDUSD 16
#define USDCAD 17
#define USDCHF 18
#define USDJPY 19
#define UNEXPECTED 999
extern string Expert_Name = "---- MFI_R2_EA_v2.3 ----";
extern double LotSize=0.1;
extern double RiskPercent=2.0;
extern bool UseMoneyMgmt=false;
extern bool BrokerPermitsFractionalLots = true;
extern string mi="--Moving Average settings--";
extern int MaTrend_Period = 200;
extern string ri="--MFI settings--";
extern int MFI_Period = 5; // input value to be optimized
extern bool UseDefaultMFI_Period = true;
extern int BuyWhenMFIBelow = 65;
extern int SellWhenMFIAbove = 35;
extern double MFI_Overbought_Value = 75.0;
extern double MFI_Oversold_Value = 25.0;
extern int useMFI4BarsBack = 0;
extern int BuyWhenAbove = 55;
extern int SellWhenBelow = 45;
extern int useNewExitStrategy = 0;
extern int MFI_High_OverBought_Exit = 98;
extern int MFI_Low_OverSold_Exit = 2;
extern int use200SMA_Exit = 1;
extern int useMFI14_Exit = 1;
extern int MFI_Exit_Period = 14;
extern int useCCI50_Exit = 0;
extern int CCI_ExitLevel = 0;
extern string st1="--Signal_TimeFrame--";
extern int Signal_TimeFrame = 0;
extern string hd = " --Limit 1 trade per day --";
extern int useDelay = 1;
extern string ai="--Moving Average Angle filter settings--";
extern string a2=" Set switch to 1 to use filter";
extern int useMaAngleFilter = 0;
extern int TrendTimeFrame = 0;
extern double Threshold=20;
extern int PrevShift=3;
extern int CurShift=1;
extern string st6 = "--Profit Controls--";
extern double StopLoss=0;
extern double TakeProfit=700;
extern int Slippage=3;
extern string tsp0 = "--Trailing Stop Types--";
extern string tsp1 = " 1 = Trail immediately";
extern string tsp2 = " 2 = Wait to trail";
extern string tsp3 = " 3 = Uses 3 levels before trail";
extern string tsp4 = " 4 = Breakeven + Lockin";
extern string tsp5 = " 5 = Step trail";
extern string tsp6 = " 6 = EMA trail";
extern string tsp7 = " 7 = pSAR trail";
extern string tsp8 = " 8 = Blutos pSar trail";
extern bool UseTrailingStop = true;
extern int TrailingStopType = 8;
extern string ts2 = "Settings for Type 2";
extern double TrailingStop = 15; // Change to whatever number of pips you wish to trail your position with.
extern string ts3 = "Settings for Type 3";
extern double FirstMove = 20; // Type 3 first level pip gain
extern double FirstStopLoss = 50; // Move Stop to Breakeven
extern double SecondMove = 30; // Type 3 second level pip gain
extern double SecondStopLoss = 30; // Move stop to lock is profit
extern double ThirdMove = 40; // type 3 third level pip gain
extern double TrailingStop3 = 20; // Move stop and trail from there
extern string ts4 = "Settings for Type 4";
extern double BreakEven = 30;
extern int LockInPips = 1; // Profit Lock in pips
extern string ts5 = "Settings for Type 5";
extern int eTrailingStop = 10;
extern int eTrailingStep = 2;
extern string ts6 = "Settings for Type 6";
extern int EMATimeFrame = 30;
extern int Price = 0;
extern int EMAPeriod = 13;
extern int EMAShift = 2;
extern int InitialStop = 0;
extern string ts7 = "Settings for Type 7";
extern string pi="--pSAR settings--";
extern double StepParabolic = 0.02;
extern double MaxParabolic = 0.2;
extern int Interval = 5;
extern string ts8 = "Settings for Type 8";
extern string pi2="--pSAR settings--";
extern double SarStep = 0.02;
extern double SarMax = 0.20;
int MagicNumber=0;
string setup;
int SignalCandle = 1;
int TradesInThisSymbol = 0;
double MM_OrderLotSize=0;
datetime StopTime; // Time to wait after a trade is stopped out
bool StoppedOut=false;
int myMFI_Period = 2; // Used by MFI indicator call
double MFI_Day_0 = 0, MFI_Day_1=0, MFI_Day_2=0, MFI_Day_3=0, SMA_Day3=0;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int AssignMFI_Period(string symbol)
{
int MFI = 0;
int which = func_Symbol2Val(symbol);
switch (which)
{
case AUDCAD : MFI = 5;
break;
case AUDJPY : MFI = 7;
break;
case AUDNZD : MFI = 6;
break;
case AUDUSD : MFI = 4;
break;
case CHFJPY : MFI = 4;
break;
case EURAUD : MFI = 2;
break;
case EURCAD : MFI = 3;
break;
case EURCHF : MFI = 3;
break;
case EURGBP : MFI = 2;
break;
case EURJPY : MFI = 4; // Optimized value
break;
case EURUSD : MFI = 4;
break;
case GBPCHF : MFI = 6;
break;
case GBPJPY : MFI = 4;
break;
case GBPUSD : MFI = 3;
break;
case NZDJPY : MFI = 6;
break;
case NZDUSD : MFI = 7;
break;
case USDCAD : MFI = 2;
break;
case USDCHF : MFI = 4;
break;
case USDJPY : MFI = 4;
break;
case UNEXPECTED : MFI = 4;
}
if (MFI == 0) MFI = 4;
return (MFI);
}
bool LastTradeClosedToday()
{
int cnt, total;
bool Closed;
total = HistoryTotal();
for (cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect (cnt, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber() != MagicNumber) continue;
Closed = false;
if (OrderType() == OP_BUY)
{
if (TimeDay(OrderCloseTime()) == TimeDay(TimeCurrent()))
{
Closed = true;
}
cnt = 0;
}
if (OrderType() == OP_SELL)
{
if (TimeDay(OrderCloseTime()) == TimeDay(TimeCurrent()))
{
Closed = true;
}
cnt = 0;
}
}
return (Closed);
}
double MA_Angle( int iPrevShift, int iCurShift, double fPrevMA, double fCurMA)
{
double fAngle, mFactor;
string Sym;
int ShiftDif;
mFactor = 100000.0;
Sym = StringSubstr(Symbol(),3,3);
if (Sym == "JPY") mFactor = 1000.0;
ShiftDif = iPrevShift-iCurShift;
mFactor /= ShiftDif;
fAngle = mFactor * (fCurMA - fPrevMA)/2.0;
return(fAngle);
}
bool CheckTrend(int cmd)
{
double maAngle;
double MACurrent=iMA(Symbol(),TrendTimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE,CurShift);
double MAPrevious=iMA(Symbol(),TrendTimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE,PrevShift);
maAngle = MA_Angle(PrevShift, CurShift, MAPrevious, MACurrent);
switch (cmd)
{
case OP_BUY : if (maAngle > Threshold) return(true);
break;
case OP_SELL : if (maAngle < -Threshold) return(true);
}
return(false);
}
bool CheckMFI14(int cmd)
{
double MFIcur, MFIprev;
MFIcur = iMFI(Symbol(),Signal_TimeFrame, MFI_Exit_Period, 1);
MFIprev = iMFI(Symbol(),Signal_TimeFrame, MFI_Exit_Period, 2);
switch (cmd)
{
case OP_BUY : if (MFIcur < 50 && MFIprev > 50) return(true);
break;
case OP_SELL : if (MFIcur > 50 && MFIprev < 50) return(true);
}
return(false);
}
bool CheckCCI50(int cmd)
{
double CCIcur, CCIprev;
CCIcur = iCCI(Symbol(), Signal_TimeFrame, 50, PRICE_CLOSE, 1);
CCIprev = iCCI(Symbol(), Signal_TimeFrame, 50, PRICE_CLOSE, 2);
switch (cmd)
{
case OP_BUY : if (CCIcur < 0 && CCIprev > 0) return(true);
break;
case OP_SELL : if (CCIcur > 0 && CCIprev < 0) return(true);
}
return(false);
}
bool CheckExitCondition(int cmd)
{
double MFI, MFI_Cur;
MFI = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 1);
MFI_Cur = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 0);
switch (cmd)
{
case OP_BUY : if (useMFI14_Exit == 1) return (CheckMFI14(cmd));
if (useCCI50_Exit == 1) return(CheckCCI50(cmd));
if ( MFI > MFI_Overbought_Value)
{
if (useNewExitStrategy == 1)
{
if (MFI_Cur < MFI_Overbought_Value || MFI_Cur >= MFI_High_OverBought_Exit ) return(true); else return(false);
}
else
return(true);
}
else if (use200SMA_Exit == 1)
{
if (CheckMA(OP_SELL)) return(true);
}
break;
case OP_SELL : if (useMFI14_Exit == 1) return (CheckMFI14(cmd));
if (useCCI50_Exit == 1) return(CheckCCI50(cmd));
if (MFI < MFI_Oversold_Value)
{
if (useNewExitStrategy == 1)
{
if (MFI_Cur > MFI_Oversold_Value || MFI_Cur <= MFI_Low_OverSold_Exit ) return(true); else return(false);
}
else
return(true);
}
else if (use200SMA_Exit == 1)
{
if (CheckMA(OP_BUY)) return(true);
}
}
return (false);
}
bool CheckMA(int cmd)
{
SMA_Day3 = iMA(Symbol(),Signal_TimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
switch (cmd)
{
case OP_BUY : if (iClose(Symbol(),Signal_TimeFrame,1) > SMA_Day3) return(true);
break;
case OP_SELL : if (iClose(Symbol(),Signal_TimeFrame,1) < SMA_Day3) return (true);
}
return(false);
}
bool CheckMFI(int cmd)
{
MFI_Day_0 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 4);
MFI_Day_1 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 3);
MFI_Day_2 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 2);
MFI_Day_3 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 1);
switch (cmd)
{
case OP_BUY : if (MFI_Day_1 < BuyWhenMFIBelow && MFI_Day_2 < MFI_Day_1 && MFI_Day_3 < MFI_Day_2)
{
if (useMFI4BarsBack == 1)
{
if (MFI_Day_0 > BuyWhenAbove) return(true); else return(false);
}
else
return(true);
}
break;
case OP_SELL : if (MFI_Day_1 > SellWhenMFIAbove && MFI_Day_2 > MFI_Day_1 && MFI_Day_3 > MFI_Day_2)
{
if (useMFI4BarsBack == 1)
{
if (MFI_Day_0 < SellWhenBelow) return(true); else return(false);
}
else
return(true);
}
}
return(false);
}
bool CheckEntryCondition(int cmd)
{
bool rule1, rule2, rule3;
rule1 = true;
rule2 = true;
rule3 = true;
rule1 = CheckMA(cmd);
if (rule1)
{
rule2 = CheckMFI(cmd);
if(rule2)
{
if (useMaAngleFilter == 1) rule3 = CheckTrend(cmd);
if (rule3) return(true);
}
}
return (false);
}
int start()
{
// код доступен только после оплаты
}
double GetLots()
{
double MM_MinLotSize=0;
double MM_MaxLotSize=0;
double MM_LotStep=0;
double MM_Decimals=0;
int MM_AcctLeverage=0;
int MM_CurrencyLotSize=0;
double OrderLotSize;
MM_AcctLeverage = AccountLeverage();
MM_MinLotSize = MarketInfo(Symbol(),MODE_MINLOT);
MM_MaxLotSize = MarketInfo(Symbol(),MODE_MAXLOT);
MM_LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
MM_CurrencyLotSize = MarketInfo(Symbol(),MODE_LOTSIZE);
if(MM_LotStep == 0.01) {MM_Decimals = 2;}
if(MM_LotStep == 0.1) {MM_Decimals = 1;}
if (UseMoneyMgmt == true)
{
OrderLotSize = AccountEquity() * (RiskPercent * 0.01) / (MM_CurrencyLotSize / MM_AcctLeverage);
if(BrokerPermitsFractionalLots == true)
OrderLotSize = StrToDouble(DoubleToStr(OrderLotSize,MM_Decimals));
else
OrderLotSize = MathRound(MM_OrderLotSize);
}
else
{
OrderLotSize = LotSize;
}
if (OrderLotSize < MM_MinLotSize) {OrderLotSize = MM_MinLotSize;}
if (OrderLotSize > MM_MaxLotSize) {OrderLotSize = MM_MaxLotSize;}
return(OrderLotSize);
}
int OpenBuyOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
int err,ticket, digits;
double myPrice, myBid, myStopLoss = 0, myTakeProfit = 0;
myPrice = MarketInfo(Symbol(), MODE_ASK);
myBid = MarketInfo(Symbol(), MODE_BID);
myStopLoss = StopLong(myBid,mStopLoss);
myTakeProfit = TakeLong(myBid,mTakeProfit);
digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
if (digits > 0)
{
myPrice = NormalizeDouble( myPrice, digits);
myStopLoss = NormalizeDouble( myStopLoss, digits);
myTakeProfit = NormalizeDouble( myTakeProfit, digits);
}
ticket=OrderSend(Symbol(),OP_BUY,mLots,myPrice,mSlippage,myStopLoss,myTakeProfit,mComment,mMagic,0,mColor);
if (ticket > 0)
{
if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) )
{
Print("BUY order opened : ", OrderOpenPrice( ));
}
}
else
{
err = GetLastError();
if(err==0)
{
return(ticket);
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
}
else //normal error
{
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
}
return(ticket);
}
void OpenSellOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
int err, ticket, digits;
double myPrice, myAsk, myStopLoss = 0, myTakeProfit = 0;
myPrice = MarketInfo(Symbol( ), MODE_BID);
myAsk = MarketInfo(Symbol( ), MODE_ASK);
myStopLoss = StopShort(myAsk,mStopLoss);
myTakeProfit = TakeShort(myAsk,mTakeProfit);
digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
if (digits > 0)
{
myPrice = NormalizeDouble( myPrice, digits);
myStopLoss = NormalizeDouble( myStopLoss, digits);
myTakeProfit = NormalizeDouble( myTakeProfit, digits);
}
ticket=OrderSend(Symbol(),OP_SELL,mLots,myPrice,mSlippage,myStopLoss,myTakeProfit,mComment,mMagic,0,mColor);
if (ticket > 0)
{
if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) )
{
Print("Sell order opened : ", OrderOpenPrice());
}
}
else
{
err = GetLastError();
if(err==0)
{
return(ticket);
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000)Показано первые 50% кода (символов: 24998)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода: 2 500 ₽ (≈ $29.50 USDT)