Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
StepMAExpert_v1[1].1
//+------------------------------------------------------------------+
//| StepMAExpert_v1.1.mq4 |
//| Copyright © 2005, TrendLaboratory Ltd. |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, TrendLaboratory Ltd."
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
#include <stdlib.mqh>
#include <Tracert.mqh>
//---- input parameters
extern string Expert_Name = "---- StepMAExpert_v1 ----";
extern int Magic=1007;
extern int Slippage=6;
extern bool Trace = false; // Trace Switch
extern string Main_Parameters = " Trade Volume & Trade Method";
extern double Lots = 0.1;
extern bool TrailingStop = false; // Trailing Stop Switch
extern bool SwingTrade = false; // Swing Trade Switch
extern bool FirstStop=false; // First Stop Switch
extern bool PendingOrder=false; // PendingOrder/InstantExecution Switch
extern double PendOrdGap=10; // Gap from High/Low for Pending Orders
extern double ZeroLossLevel=0; // Zero Loss Level in points
extern string Calc_Parameters = " StepMA Parameters ";
extern int Length=10; // ATR Period
extern double Kv=1.0; // Sensivity Factor
extern double StepSize=0; // Constant Step Size (if need)
extern bool HighLow=false; // High/Low Mode Switch (more sensitive)
extern double Delta=0; // Breakout Depth in points
extern double ExitDelta=30;
extern double Ks=1.0; // StopLoss Factor
extern string MM_Parameters = " MoneyManagement by L.Williams ";
extern bool MM=false; // ÌÌ Switch
extern double Risk=0.15; // Risk Factor
extern double LossMax=1000; // Maximum Loss by 1 Lot
int trend=0,TradeSignal=0,ExitSignal=0,matrend=0,Kz=0,mode=0,Type=0;
double Smin0=0,Smax0=0,Smin1=0,Smax1=0,Price=0;
double line0=0,line1=0,bsmin1=0,bsmax1=0;
double BuyStop=0,SellStop=0,ATRmin=10000,ATRmax=0,bsmax2=0,bsmin2=0;
int b=0,cnt=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int total,ticket;
//----
if ( Trace ) SetTrace();
if (Bars>b)
{
b=Bars;
if(TrailingStop) FirstStop=true;
double Lotsi=Lots;
if ( MM ) Lotsi=NormalizeDouble(AccountFreeMargin()*Risk/LossMax,1);
if (Lotsi<0.1) Lotsi=0.1;
if(StepSize>0)
{
double Step=Kv*StepSize*Point;
}
else
{
double ATR0 = iATR(NULL,0,Length,1);
ATRmax=MathMax(ATR0,ATRmax);
ATRmin=MathMin(ATR0,ATRmin);
Step=0.5*Kv*(ATRmax+ATRmin);
}
Smin1=Smin0;
Smax1=Smax0;
if(HighLow)
{
Smax0=Low[1]+2.0*Step;
Smin0=High[1]-2.0*Step;
}
else
{
Smax0=Close[1]+2.0*Step;
Smin0=Close[1]-2.0*Step;
}
if(Close[1]>Smax1) matrend=1;
if(Close[1]<Smin1) matrend=-1;
line1=line0;
if(matrend>0)
{
if(Smin0<Smin1) Smin0=Smin1;
line0=Smin0+Step;
}
else
{
if(Smax0>Smax1) Smax0=Smax1;
line0=Smax0-Step;
}
bsmin2=bsmin1;
bsmax2=bsmax1;
bsmin1=Smin0;
bsmax1=Smax0;
// Trade Signal area
if(!SwingTrade) TradeSignal=0;
// - BUY
if
(
Close[1]>iMA(NULL,0,50,0,MODE_EMA,0,1)
&&
line0-line1>Delta*Point
&&
line1>0
&&
trend<=0
) TradeSignal= 1;
// - SELL
if
(
Close[1]<iMA(NULL,0,50,0,MODE_EMA,0,1)
&&
line1-line0>Delta*Point
&&
line1>0
&&
trend>=0
) TradeSignal= -1;
// Exit Signal area
// - BUY Orders
if
(
Close[1]<iMA(NULL,0,50,0,MODE_EMA,0,1)
||
line1-line0>Delta*Point
) ExitSignal= -1;
// - SELL Orders
if
(
Close[1]>iMA(NULL,0,50,0,MODE_EMA,0,1)
||
line0-line1>Delta*Point
) ExitSignal= 1;
if(SwingTrade) ExitSignal=TradeSignal;
// Orders Close area :
//-----------------------------
total=OrdersTotal();
for (cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (ZeroLossLevel > 0 && OrderMagicNumber()==Magic)
{
if (mode==OP_BUY)
{
if (Bid-OrderOpenPrice() > Kz*ZeroLossLevel*Point)
{
BuyStop=OrderOpenPrice()+((Kz-1)*ZeroLossLevel+1.0)*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),BuyStop,0,0,LightBlue);
Kz=Kz+1;
return(0);
}
}
if (mode==OP_SELL)
{
if (OrderOpenPrice()-Ask > Kz*ZeroLossLevel*Point)
{
SellStop=OrderOpenPrice()-((Kz-1)*ZeroLossLevel+1.0)*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),SellStop,0,0,Orange);
Kz=Kz+1;
return(0);
}
}
}
if (OrderMagicNumber()==Magic)
{
// - BUY Orders
if ( ExitSignal<0 )
{
if (mode==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
}
}
// - SELL Orders
if ( ExitSignal>0 )
{
if (mode==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
}
}
}
// Orders Modify Area
if (TrailingStop && OrderMagicNumber()==Magic)
{
if ( bsmin1>OrderStopLoss())
{
if (mode==OP_BUY)
{
OrderModify(OrderTicket(),OrderOpenPrice(),bsmin1,0,0,LightGreen);
return(0);
}
}
// - SELL Orders
if ( bsmax1<OrderStopLoss() )
{
if (mode==OP_SELL)
{
OrderModify(OrderTicket(),OrderOpenPrice(),bsmax1,0,0,Yellow);
return(0);
}
}
}
// Closing of Pending Orders
if(Close[1]<MathMin(iMA(NULL,0,50,0,MODE_EMA,0,1),line0))int PendClose=1;
if(Close[1]>MathMax(iMA(NULL,0,50,0,MODE_EMA,0,1),line0)) PendClose=-1;
if (mode==OP_BUYSTOP && PendClose>0 && OrderMagicNumber()==Magic)
{
OrderDelete(OrderTicket());
return(0);
}
if (mode==OP_SELLSTOP && PendClose<0 && OrderMagicNumber()==Magic)
{
OrderDelete(OrderTicket());
return(0);
}
}//for (cnt=0;cnt<total;cnt++)
// Orders open area :
// - SELL Orders
if (total<1)
{
if ( trend>=0 && TradeSignal<0 )
{
if (FirstStop) SellStop=High[1]+Ks*Step/Kv; else SellStop=0;
if(PendingOrder)
{
Type=OP_SELLSTOP;
Price=Low[1]-PendOrdGap*Point;
}
else
{
Type=OP_SELL;
Price=Bid;
}
ticket=OrderSend(Symbol(),Type,Lotsi,Price,Slippage,SellStop,0,"sell",Magic,0,Red);
Kz=1;
if(SwingTrade) trend=-1; else {trend=0;}
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
return(0);
}
// - BUY Orders
if (trend <=0 && TradeSignal>0)
{
if (FirstStop) BuyStop=Low[1]-Ks*Step/Kv; else BuyStop=0;
if(PendingOrder)
{
Type=OP_BUYSTOP;
Price=High[1]+PendOrdGap*Point;
}
else
{
Type=OP_BUY;
Price=Ask;
}
ticket=OrderSend(Symbol(),Type,Lotsi,Price,Slippage,BuyStop,0,"buy",Magic,0,Blue);
Kz=1;
if(SwingTrade) trend=1; else {trend=0;}
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
return(0);
}
}
}//if (Bars>b)
//----
//----
return(0);
}
//+------------------------------------------------------------------+
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
---