Orders Execution
0
Views
0
Downloads
0
Favorites
Tester Expert 1 TimeFrame Indicators
//+------------------------------------------------------------------+
//| Tester Expert 1 TimeFrame Indicators.mq4 |
//| Edi Dimitrovski |
//| http://maktrade.org |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property show_inputs
//---- input
extern int TakeProfit = 100;
extern int Stop = 1000;
extern int Trailing = 40;
extern int BreakOut = 1;
extern int PlusSafetyPercent = 1000;
extern int magicNumber = 5;
extern int slip = 5;
extern bool safe = true;
extern int IndSignal=2;
extern bool IndSlow=false;
extern double IndFilterPoints=5.0;
extern bool IndRepaint=true;
extern bool CloseOnlyWithProfit=false;
//---- var
int in[7] ;
double do[6];
//+------------------------------------------------------------------+
int init()
{
clear();
Print("Starting Lots = ",Lots()*MarketInfo(Symbol(),23));
if ( in[6] > TakeProfit || in[6] > Stop || in[6] > Trailing )
Print("TakeProfit, Trailing or Stop is smaller than allowed, should be minimum = ",in[6]);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
// common functions
bool up, dn, acc = (AccountFreeMargin()>0.0), test = IsTesting();
double fast0, slow0, fast1, fast1p, slow1, slow1p, fast2, fast2p, slow2, slow2p;
// new period selection
in[1] = Time[0];
do[1] = Close[0];
if ( in[0] < in[1] ) clear(); // update new bar time
// order selection
fast0 = iCustom(NULL,60,"Combined MA Signal",(IndSignal*3),IndSlow,IndFilterPoints,IndRepaint,2,0);
slow0 = iCustom(NULL,60,"Combined MA Signal",(IndSignal*3),IndSlow,IndFilterPoints,IndRepaint,3,0);
if(!test)
{
fast1 = iCustom(NULL,240,"Combined MA Signal",(IndSignal*2),IndSlow,IndFilterPoints,IndRepaint,0,0);
fast1p= iCustom(NULL,240,"Combined MA Signal",(IndSignal*2),IndSlow,IndFilterPoints,IndRepaint,0,1);
slow1 = iCustom(NULL,240,"Combined MA Signal",(IndSignal*2),IndSlow,IndFilterPoints,IndRepaint,1,0);
slow1p = iCustom(NULL,240,"Combined MA Signal",(IndSignal*2),IndSlow,IndFilterPoints,IndRepaint,1,1);
fast2 = iCustom(NULL,1440,"Combined MA Signal",IndSignal,IndSlow,IndFilterPoints,IndRepaint,0,0);
fast2p= iCustom(NULL,1440,"Combined MA Signal",IndSignal,IndSlow,IndFilterPoints,IndRepaint,0,1);
slow2 = iCustom(NULL,1440,"Combined MA Signal",IndSignal,IndSlow,IndFilterPoints,IndRepaint,1,0);
slow2p = iCustom(NULL,1440,"Combined MA Signal",IndSignal,IndSlow,IndFilterPoints,IndRepaint,1,1);
}
in[4] = -1;
// buy
if ( fast0 > 0.0 )
{
up = ((slow1>slow1p || slow1>0.0) && fast1>fast1p+Point*IndFilterPoints && (fast1>0.0 || !IndSlow));
if ( !safe || ( safe && ( test || up ) ) ) // buy condition H4
{
close(1); // close sell condition live or buy condition for testing
if ( in[2] < 1 && // no opened buy possition on the current bar
( test || ( up && (slow2>slow2p || slow2>0.0) && fast2>fast2p+Point*IndFilterPoints && (fast2>0.0 || !IndSlow) ) ) ) // buy condition D1
in[4] = 0 ; // order selection is OP_BUY
}
}
// sell
else if ( slow0 < 0.0 )
{
dn = ((slow1<slow1p || slow1<0.0) && fast1+Point*IndFilterPoints<fast1p && (fast1<0.0 || !IndSlow));
if ( !safe || ( safe && ( test || dn ) ) ) // sell condition H4
{
close(0); // close buy condition live or sell condition for testing
if ( in[3] < 1 && // no opened sell possition on the current bar
( test || ( dn && (slow2<slow2p || slow2<0.0) && fast2+Point*IndFilterPoints<fast2p && (fast2<0.0 || !IndSlow) ) ) ) // sell condition D1
in[4] = 1 ; // order selection is OP_SELL
}
}
// orders part
if ( acc )
{
if ( in[4] == 0 && do[2]<AccountFreeMargin()/MarketInfo(Symbol(),32) ) // buy condition met = send new buy order
in[2] = OrderSend ( Symbol() , in[4] , Lots() * do[2] , Ask , slip ,
Bid - Stop * Point , Bid + TakeProfit * Point , "" , magicNumber , 0 , Green ) ;
else if ( in[4] == 1 && do[2]<AccountFreeMargin()/MarketInfo(Symbol(),32) ) // sell condition met = = send new order
in[3] = OrderSend ( Symbol() , in[4] , Lots() * do[2] , Bid , slip ,
Ask + Stop * Point , Ask - TakeProfit * Point , "" , magicNumber , 0 , Green ) ;
}
// check for trailing stop
if ( Trailing > in[6] ) trail(); // if trailing is bigger than minimum stop level do trailing
return(0);
}
//+------------------------------------------------------------------+
double Lots()
{
// volume lots section
do[3] = MarketInfo(Symbol(),32);
in[5] = AccountFreeMargin();
do[5] = in[5]/do[3]/do[2];
return(NormalizeDouble(MathMin(MathMax(in[5]/do[3]*in[5]/
(( TakeProfit + Stop*safe )*0.01*(1+PlusSafetyPercent)
*(in[5]/do[3])*do[4]+in[5]),
do[2]),MarketInfo(Symbol(),25))/do[2],0));
}
//+------------------------------------------------------------------+
void clear()
{
// new period selection clear
do[2] = MarketInfo(Symbol(),23);
do[4] = MarketInfo(Symbol(),16);
in[6] = MarketInfo(Symbol(),14);
do[0] = do[1] ;
in[0] = in[1] ;
in[2] = 0 ;
in[3] = 0 ;
return;
}
//+------------------------------------------------------------------+
void close(int type)
{
double price;
for ( int i=0; i<OrdersTotal(); i++)
{
if ( OrderSelect(i,SELECT_BY_POS) )
{
if ( OrderMagicNumber()==magicNumber && Symbol()==OrderSymbol() && OrderType()==type && ( OrderProfit()>0.0 || !CloseOnlyWithProfit ) )
{
if ( IsTesting() )
{
if ( type == 1 ) price = Ask;
else price = Bid;
}
else price = MarketInfo(Symbol(),9+type);
OrderClose(OrderTicket(),OrderLots(),price,slip,CLR_NONE);
}
}
}
return;
}
//+------------------------------------------------------------------+
void trail()
{
int spread = MarketInfo(Symbol(),13), total = OrdersTotal();
for(int cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))continue;
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber() == magicNumber)
{
// buy possitions
if(BreakOut>0 && OrderStopLoss()<OrderOpenPrice())
{
if(Bid-OrderOpenPrice() > Point*(in[6]+spread+BreakOut))
OrderModify(OrderTicket(),0,Bid-Point*(in[6]+spread),OrderTakeProfit(),0,Green);
}
if(Trailing>in[6] && Bid-OrderOpenPrice()>Point*Trailing)
{
if(OrderStopLoss()<Bid-Point*Trailing)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,Green);
}
}
else if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber() == magicNumber)
{
// sell possitions
if(BreakOut>0 && OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()<Point )
{
if(OrderOpenPrice()-Ask > Point*(in[6]+spread+BreakOut))
OrderModify(OrderTicket(),0,Ask+Point*(in[6]+spread),OrderTakeProfit(),0,Green);
}
if(Trailing>in[6] && OrderOpenPrice()-Ask>Point*Trailing)
{
if(OrderStopLoss()>Ask+Point*Trailing || OrderStopLoss()<Point)
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0,Green);
}
}
}
return;
}
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
---