Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
FXAnalyser_v6
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| FXAnalyser_v6.mq4 |
//| Copyright © 2006, Renato P. dos Santos |
//| inspired on 4xtraderCY's and SchaunRSA's ideas |
//| http://www.strategybuilderfx.com/forums/showthread.php?t=16086 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Renato P. dos Santos"
#property link "http://www.strategybuilderfx.com/forums/showthread.php?t=16086"
extern double Lots = 0;
extern int StopLoss = 30;
extern int TakeProfit = 200;
extern int TrailingStop = 30;
extern int PipsGoal = 200;
extern int PipsLoss = 40;
extern int TimeFrame = 5;
extern double RiskLevel = 0.004;
extern bool UseSound = True;
color clOpenBuy = DodgerBlue;
color clModiBuy = DodgerBlue;
color clCloseBuy = DodgerBlue;
color clOpenSell = Red;
color clModiSell = Red;
color clCloseSell = Red;
color clDelete = White;
string Name_Expert = "FXAnalyser_v6";
string NameFileSound = "expert.wav";
int MODE_DIV=0;
int MODE_SLOPE=1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start() {
if (Period()!=TimeFrame) {
Alert("This advisor works better on the M",TimeFrame," chart"); return(0); }
if (!ExistPositions()) { if (DayOfWeek()==6 && Hour()>=20) {
CloseAllTrades(); Comment("weekend"); return(0); }}
if (!ExistPositions()) { if (Hour()<2 || Hour()>18) {
CloseAllTrades(); Comment("bad hours."); return(0); }}
// if (!(IsTesting() || IsDemo())) { if (GoalCheck()) { CloseAllTrades(); Comment("goal attained"); PlaySound("applause.wav"); return(0); }}
if (!(IsTesting() || IsDemo())) { if (LossCheck()) { CloseAllTrades(); Comment("excessive loss!"); PlaySound("alert.wav"); return(0); }}
if (Bars<100) { Comment("bars less than 100!"); PlaySound("alert.wav"); return(0); }
if (StopLoss<5) { Alert("wrong StopLoss"); PlaySound("alert.wav"); return(0); }
if (TakeProfit<2*StopLoss) { Alert("wrong TakeProfit!"); PlaySound("alert.wav"); return(0); }
if (GetSizeLot()<0.1) { Alert("not enough margin!"); PlaySound("alert.wav"); return(0); }
int EMADiv_OpenLevel,EMADiv_CloseLevel,EMASlope_OpenLevel,EMASlope_CloseLevel;
if(StringSubstr(Symbol(),0,6)=="EURUSD") {
EMADiv_OpenLevel=6;
EMADiv_CloseLevel=1;
EMASlope_OpenLevel=6;
EMASlope_CloseLevel=2;
}
if(StringSubstr(Symbol(),0,6)=="USDJPY") {
EMADiv_OpenLevel=6;
EMADiv_CloseLevel=1;
EMASlope_OpenLevel=6;
EMASlope_CloseLevel=2;
}
if(StringSubstr(Symbol(),0,6)=="GBPUSD") {
EMADiv_OpenLevel=7;
EMADiv_CloseLevel=1;
EMASlope_OpenLevel=7;
EMASlope_CloseLevel=2;
}
if(StringSubstr(Symbol(),0,6)=="USDCHF") {
EMADiv_OpenLevel=6;
EMADiv_CloseLevel=1;
EMASlope_OpenLevel=6;
EMASlope_CloseLevel=2;
}
if(EMADiv_OpenLevel==0) { Comment("Incorrect pair!"); PlaySound("alert.wav"); return(0); }
// Comment(EMADiv_OpenLevel,",",EMASlope_OpenLevel,",",EMASlope_CloseLevel);
Comment("Lots = ",GetSizeLot());
if (!ExistPositions()) {
if (BuyCondition(EMADiv_OpenLevel,EMASlope_OpenLevel)) {
double BuyPrice=NormalizeDouble(0.8*High[0]+0.2*Low[0],MarketInfo(Symbol(),MODE_DIGITS));
OpenBuy(Ask);
return(0);
}
if (SellCondition(EMADiv_OpenLevel,EMASlope_OpenLevel)) {
double SellPrice=NormalizeDouble(0.8*Low[0]+0.2*High[0],MarketInfo(Symbol(),MODE_DIGITS));
OpenSell(Bid);
return(0);
}
}
TrailingPositionsBuy(TrailingStop,EMADiv_CloseLevel,EMASlope_CloseLevel);
TrailingPositionsSell(TrailingStop,EMADiv_CloseLevel,EMASlope_CloseLevel);
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol()==Symbol() && OrderComment()==GetCommentForOrder()) return(True);
}
Comment("no open trades");
return(false);
}
bool BuyCondition(int EMADiv_OpenLevel,int EMASlope_OpenLevel) {
if (((iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)>EMADiv_OpenLevel*Point
&& iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)>0)
|| (iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)>EMASlope_OpenLevel*Point
&& iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)>0))
&& iADX(NULL,0,4,PRICE_CLOSE,MODE_MAIN,0)>50)
return(True);
else
return(False);
}
bool SellCondition(int EMADiv_OpenLevel,int EMASlope_OpenLevel) {
if (((iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)<-EMADiv_OpenLevel*Point
&& iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)<0)
|| (iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)<-EMASlope_OpenLevel*Point
&& iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)<0))
&& iADX(NULL,0,4,PRICE_CLOSE,MODE_MAIN,0)>50)
return(True);
else
return(False);
}
void OpenBuy(double BuyPrice) {
double ldLot = GetSizeLot();
double Slippage = GetSlippage();
double ldStop = GetStopLossBuy(BuyPrice);
double ldTake = GetTakeProfitBuy(BuyPrice);
string lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,BuyPrice,Slippage,ldStop,ldTake,lsComm,0,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell(double SellPrice) {
double ldLot = GetSizeLot();
double Slippage = GetSlippage();
double ldStop = GetStopLossSell(SellPrice);
double ldTake = GetTakeProfitSell(SellPrice);
string lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,SellPrice,Slippage,ldStop,ldTake,lsComm,0,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
void TrailingPositionsBuy(int TrailingStop,int EMADiv_CloseLevel,int EMASlope_CloseLevel) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderComment()==GetCommentForOrder()) {
if (OrderType()==OP_BUY) {
if (CloseBuyCondition(EMADiv_CloseLevel,EMASlope_CloseLevel))
OrderClose(OrderTicket(),OrderLots(),Bid,GetSlippage(),clCloseBuy);
if (Bid-OrderOpenPrice()>TrailingStop*Point && OrderOpenPrice()>OrderStopLoss())
ModifyStopLoss(OrderOpenPrice(),clModiBuy);
if (Bid-OrderOpenPrice()>TrailingStop*Point)
if (OrderStopLoss()<Bid-TrailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Bid-TrailingStop*Point,clModiBuy);
if (OrderTakeProfit()-Bid<TrailingStop*Point/2)
ModifyStopLoss(Bid-TrailingStop*Point/2,clModiBuy);
}
}
}
}
}
void TrailingPositionsSell(int trailingStop,int EMADiv_CloseLevel,int EMASlope_CloseLevel) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderComment()==GetCommentForOrder()) {
if (OrderType()==OP_SELL) {
if (CloseSellCondition(EMADiv_CloseLevel,EMASlope_CloseLevel))
OrderClose(OrderTicket(),OrderLots(),Ask,GetSlippage(),clCloseSell);
if (OrderOpenPrice()-Ask>TrailingStop*Point && OrderOpenPrice()<OrderStopLoss())
ModifyStopLoss(OrderOpenPrice(),clModiBuy);
if (OrderOpenPrice()-Ask>TrailingStop*Point)
if (OrderStopLoss()>Ask+TrailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+TrailingStop*Point,clModiBuy);
if (Ask-OrderTakeProfit()<TrailingStop*Point/2)
ModifyStopLoss(Ask+TrailingStop*Point/2,clModiSell);
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss, double clModi) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),
ldStopLoss,OrderTakeProfit(),OrderExpiration(),clModi);
if (fm && UseSound) PlaySound(NameFileSound);
}
bool CloseBuyCondition(int EMADiv_CloseLevel,int EMASlope_CloseLevel) {
if (iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)<-EMADiv_CloseLevel*Point)
return(True);
else
return(False);
}
bool CloseSellCondition(int EMADiv_CloseLevel,int EMASlope_CloseLevel) {
if (iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)>EMADiv_CloseLevel*Point)
return(True);
else
return(False);
}
void CloseAllTrades() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderComment()==GetCommentForOrder()) {
if (OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,GetSlippage(),clCloseBuy);
if (OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,GetSlippage(),clCloseSell);
if (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT ||
OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
OrderDelete(OrderTicket());
}
}
}
}
bool GoalCheck() {
int handle = FileOpen(LogFileName(),FILE_CSV|FILE_READ,";");
if (handle>0) {
int lsteqty = FileReadNumber(handle);
FileClose(handle);
}
else lsteqty = 0;
if (lsteqty==0) {
handle = FileOpen(LogFileName(),FILE_CSV|FILE_WRITE,";");
FileWrite(handle,AccountEquity());
FileClose(handle);
}
else if (AccountEquity()-lsteqty>=PipsGoal*GetSizeLot()) return(True);
else return(False);
}
bool LossCheck() {
int handle = FileOpen(LogFileName(),FILE_CSV|FILE_READ,";");
if (handle>0) {
int lsteqty = FileReadNumber(handle);
FileClose(handle);
}
else lsteqty = 0;
if (lsteqty-AccountEquity()>=PipsLoss*GetSizeLot()) return(True);
else return(False);
}
string LogFileName() {
string stryear = DoubleToStr(Year(),0);
string strmonth = DoubleToStr(Month(),0);
if (StringLen(strmonth)<2) strmonth = "0"+strmonth;
string strday = DoubleToStr(Day(),0);
if (StringLen(strday)<2) strday = "0"+strday;
return(stryear+strmonth+strday+".log");
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { if (IsTesting() || IsDemo()) return(1);
else if (Lots > 0) return(Lots);
else return(NormalizeDouble(AccountFreeMargin()/StopLoss*RiskLevel,1)); }
double GetSlippage() { return((Ask-Bid)/Point); }
double GetStopLossBuy(double BuyPrice) { if (StopLoss==0) return(0); else return(BuyPrice-StopLoss*Point); }
double GetStopLossSell(double SellPrice) { if (StopLoss==0) return(0); else return(SellPrice+StopLoss*Point); }
double GetTakeProfitBuy(double BuyPrice) { if (TakeProfit==0) return(0); else return(BuyPrice+TakeProfit*Point); }
double GetTakeProfitSell(double SellPrice) { if (TakeProfit==0) return(0); else return(SellPrice-TakeProfit*Point); }
´Ó7Ó½vß^9ó}z
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
---