Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
mfi_expert_advisor_2
//+------------------------------------------------------------------+
//| adamant.mq4 |
//| Akhmetov Kuanysh. 2013 |
//| http://advisorsport.blogspot.ru |
//+------------------------------------------------------------------+
#property copyright "Akhmetov Kuanysh"
#property link "http://advisorsport.blogspot.ru"
#property version "1.0"
#property description "This Expert Advisor is based on MFI."
#property description "The input parameters are optimized for EURUSD M15."
//---- input parameters
extern int Mfiperiod =8; // set MFI indicator period
extern int Mfiup =80; // the upper level of the indicator
extern int Mfidown =20; // the lower level of the indicator
extern double Lots =0.5; // lot Size ëîò, åñëè 0, òî äèíàìè÷åñêèé
extern int MagicNumber =4321; // magic number
extern int TP =190; // Take Profit
extern int SL =50; // Stop Loss
extern int Tral_dist =35; // Trailing distance
extern int Shag =20; // Step size using Trailing stop
extern int MaPeriod =14;
extern bool Use_shag =false; // Use Shag or not (Use Step or not)
extern bool Use_bezubytok =false; // Use or not breakeven
extern double StohUP =80;
extern double StohLow =20;
extern double RiskPercentage = 50; // % îò äåïî íà ëîò, åñëè äèíàìè÷åñêèé
extern double stohraznost =2;
//--------------------------------------------------------------------
int STOPLEVEL,tip;
string txt;
void OnInit()
{
STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (SL < STOPLEVEL) SL = STOPLEVEL;
if (TP < STOPLEVEL) TP = STOPLEVEL;
Comment("");
}
void OnTick()
{
double Lot = Lots;
if (Lots==0)
{
double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double step = MarketInfo(Symbol(), MODE_LOTSTEP);
double account = AccountFreeMargin();
double percentage = account*RiskPercentage/100;
Lot = MathRound(percentage/margin/step)*step;
if(Lot < minLot)
{
Lot = minLot;
}
if(Lot > maxLot)
{
Lot = maxLot;
}
}
int bay,sel;
for (int y=0; y<OrdersTotal(); y++)
{ if (OrderSelect(y, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
tip=OrderType();
if (tip==0) bay++;
if (tip==1) sel++;
}
}
Comment(txt,"\nÁàëàíñ ",DoubleToStr(AccountBalance(),2),"\nÝêâèòè ",DoubleToStr(AccountEquity(),2),"\nBuy ",bay,"\nSel ",sel);
double tp=0,sl=0;
double mfi,stoh,stoh2;
mfi=iMFI(Symbol(),0,Mfiperiod,1);
stoh=iStochastic(Symbol(),0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
stoh2=iStochastic(Symbol(),0,5,3,3,MODE_SMA,0,MODE_SIGNAL,2);
if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}
int kolpos=0;
for (int pos=0; pos <OrdersTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
kolpos++;
}
if (kolpos==0)
{
int i=10;
i = stoh-stoh2;
if (mfi>=Mfiup && stoh>stoh2 && stoh<StohUP && Ask<iMA(Symbol(),0,MaPeriod,0,0,0,0))
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),20,Bid-sl,Ask+tp,NULL,MagicNumber,0,clrGreen);
if (mfi<=Mfidown && stoh2>stoh && stoh<StohUP && Ask<iMA(Symbol(),0,MaPeriod,0,0,0,0))
OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),20,Ask+sl,Bid-tp,NULL,MagicNumber,0,clrRed);
}
// if there is an open order that included a stop treiling
if (OrdersTotal()>0)
Trailing_stop(MagicNumber,Symbol(),Tral_dist, Shag,Use_shag, Use_bezubytok);
}
//+-----------------------------------------------------------------------------------------------------+
void Trailing_stop(int Magic, string Symb, int Dist, int Shag2, bool Isp_shag, bool bezubytok)
{
Shag2=Shag;
double dist=0;
double shag=0;
if (Digits==3||Digits==5) {dist=Dist*10*Point; shag=Shag2*10*Point;}
else if (Digits==2||Digits==4) {dist=Dist*Point; shag=Shag2*Point;}
for (int pos=0; pos<OrdersTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic||OrderSymbol()==Symb)
{
if (OrderType()==OP_BUY)
{
if (!Isp_shag&&!bezubytok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
if (Isp_shag&&!bezubytok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
if (!Isp_shag&&bezubytok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
if (Isp_shag&&bezubytok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
}
else if (OrderType()==OP_SELL)
{
if (!Isp_shag&&!bezubytok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
if (Isp_shag&&!bezubytok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
if (!Isp_shag&&bezubytok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
if (Isp_shag&&bezubytok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
}
}
}
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---