Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-LemanTrend
//+------------------------------------------------------------------+
//| e-LemanTrend.mq4 |
//| Copyright © 2010, D. Zhebrak aka Necron |
//| www.mqlcoder.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, D.Zhebrak aka Necron"
#property link "www.mqlcoder.ru"
#property link "mailto: mqlcoder@yandex.ru"
#define version "1.0.0.3"
#define Ea_Name "e_LemanTrend"
#include <stdlib.mqh>
extern string i_property="Íàñòðîéêè èíäèêàòîðà LeManTrend";
extern int Min = 13;
extern int Midle = 21;
extern int Max = 34;
extern int PeriodEMA = 3;
extern string e_property="Íàñòðîéêà ñîâåòíèêà";
extern int MagicNumber=20100802; //ìàãè÷åñêèé íîìåð ýêñïåðòà
extern double Lot=0.1; //ëîò äëÿ òîðãîâëè
extern int StopLoss=34; //ñòîï-ëîññ, -1 - íå óñòàíàâëèâàåì
extern int TakeProfit=55; //òåéê-ïðîôèò, -1 - íå óñòàíàâëèâàåì
extern int TrailingStop=21; //òðåéëèíã-ñòîï â ïóíêòàõ
extern int TrailingStep=10; //øàã òðåéëèíã-ñòîïà
int OrdersNum=0,
Ticket=0,
err=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Create.Label("copyright","www.mqlcoder.ru",Gray,10,10,3,10);
if(!IsTesting() && !IsDemo())
{
Alert("Ýêñïåðò "+Ea_Name+" íå ïðåäíàçíà÷åí äëÿ ðàáîòû íà ðåàëüíîì òîðãîâîì ñ÷åòå. \n",
"Îáðàòèòåñü ê ðàçðàáîò÷èêó: www.mqlcoder.ru \n",
"mailto: mqlcoder@yandex.ru");
return(-1);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if(ObjectFind("copyright")!=-1) ObjectDelete("copyright");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
static int bt;
if(init()==-1)
{
Print("Îøèáêà èíöèàëèçàöèè òîðãîâîãî ýêñïåðòà "+Ea_Name+"");
return(-1);
}
OrdersNum=Orders.Total(Symbol(),-1,MagicNumber);
if(OrdersNum>0)
{
TrailingStop();
}
if(bt==Time[0])return(-1);
if(OrdersNum>0)
{
if(Signal()==-1) Order.Close(OP_BUY);
if(Signal()== 1) Order.Close(OP_SELL);
}
if(OrdersNum<1)
{
if(Signal()==1)
{
Ticket=OrderSend(Symbol(),OP_BUY,Lot,-nd(Ask,Symbol()),3,Get.SL(OP_BUY),Get.TP(OP_BUY),Ea_Name,MagicNumber,0,Lime);
if(Ticket<0)
{
err=GetLastError();
Print("Îøèáêà îòêðûòèÿ OP_BUY #"+err+": "+ErrorDescription(err)+"");
}
}
if(Signal()==-1)
{
Ticket=OrderSend(Symbol(),OP_SELL,Lot,nd(Bid,Symbol()),3,Get.SL(OP_SELL),Get.TP(OP_SELL),Ea_Name,MagicNumber,0,Red);
if(Ticket<0)
{
err=GetLastError();
Print("Îøèáêà îòêðûòèÿ OP_SELL #"+err+": "+ErrorDescription(err)+"");
}
}
}
bt=Time[0];
//----
return(0);
}
//+------------------------------------------------------------------+
//---- ô. âîçâðàùàåò 1 åñëè ïîÿâèëñÿ ñèãíàë íà ïîêóïêó è -1 åñëè ïîÿâèëñÿ ñèãíàë íà ïðîäàæó
int Signal()
{
double value1[2], value2[2];
int _return=0;
value1[0]=iCustom(Symbol(),0,"LeManTrend",Min,Midle,Max,PeriodEMA,0,1);
value1[1]=iCustom(Symbol(),0,"LeManTrend",Min,Midle,Max,PeriodEMA,0,2);
value2[0]=iCustom(Symbol(),0,"LeManTrend",Min,Midle,Max,PeriodEMA,1,1);
value2[1]=iCustom(Symbol(),0,"LeManTrend",Min,Midle,Max,PeriodEMA,1,2);
if(value1[1]<value2[1] && value1[0]>value2[0]) _return=1;
if(value1[1]>value2[1] && value1[0]<value2[0]) _return=-1;
return(_return);
}
//---- ô. âîçâðàùàåò êîëè÷åñòâî îðäåðîâ ýêñïåðòà
int Orders.Total(string sym, int ty, int mn)
{
int i=0,
k=OrdersTotal()-1,
num=0;
for (i=k;i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym||sym=="")
{
if(OrderType()==ty||ty<0)
{
if(OrderMagicNumber()==mn||mn<0) num++;
}
}
}
}
return(num);
}
//---- ô. âîçâðàùàåò çíà÷åíèå Point ñ ó÷åòîì âîçìîæíîãî ïÿòèçíàêà
double PointX(string _Symbol)
{
int dg=MarketInfo(_Symbol,MODE_DIGITS);
double PointX = 0,
po=MarketInfo(_Symbol,MODE_POINT);
if(dg==5||dg==3)
{
PointX=po*10;
}
if(dg==4||dg==2)
{
PointX=po;
}
return(PointX);
}
//---- ô. âîçâðàùàåò íîðìàëèçîâàííóþ öåíó äî Digits îïðåäåëåííîãî ñèìâîëà
double nd(double v,string _Symbol)
{
int dg=MarketInfo(_Symbol,MODE_DIGITS);
return(NormalizeDouble(v,dg));
}
//---- ô. ñîçäàåò îáúåêò Label íà ãðàôèêå
void Create.Label(string name, string txt, color clr, int x, int y,int corner,int FontSize)
{
if (ObjectFind(name)<0) ObjectCreate(name, OBJ_LABEL, 0, 0,0);
ObjectSetText(name, txt, FontSize);
ObjectSet(name, OBJPROP_COLOR , clr);
ObjectSet(name, OBJPROP_XDISTANCE, x);
ObjectSet(name, OBJPROP_YDISTANCE, y);
ObjectSet(name, OBJPROP_CORNER , corner);
ObjectSet(name, OBJPROP_FONTSIZE , FontSize);
}
//---- ô. çàêðûâàåò ïîçèöèè ýêñïåðòà îïðåäåëåííîãî òèïà
void Order.Close(int ty)
{
for(int k=OrdersTotal()-1;k>=0;k--)
{
if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==ty||ty<0)
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),nd(Bid,Symbol()),3,Lime);
else if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),nd(Ask,Symbol()),3,Red);
else break;
}
}
}
}
}
return;
}
double Get.TP(int ty)
{
double _return;
if(ty==OP_BUY)
{
if(TakeProfit>0) _return=nd(Ask+TakeProfit*PointX(Symbol()),Symbol());
else _return=0;
}
else if(ty==OP_SELL)
{
if(TakeProfit>0) _return=nd(Bid-TakeProfit*PointX(Symbol()),Symbol());
else _return=0;
}
return(_return);
}
double Get.SL(int ty)
{
double _return;
if(ty==OP_BUY)
{
if(StopLoss>0) _return=nd(Ask-StopLoss*PointX(Symbol()),Symbol());
else _return=0;
}
else if(ty==OP_SELL)
{
if(StopLoss>0) _return=nd(Bid+StopLoss*PointX(Symbol()),Symbol());
else _return=0;
}
return(_return);
}
void TrailingStop()
{
int total=OrdersTotal()-1;
for(int j=total;j>=0;j--)
{
if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop*PointX(Symbol()) )
{
if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*PointX(Symbol()))
{
OrderModify(OrderTicket(),OrderOpenPrice(),nd(Ask-TrailingStop*PointX(Symbol()),Symbol()),OrderTakeProfit(),0,CLR_NONE);
return;
}
}
}
}
else if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(PointX(Symbol())*TrailingStop))
{
if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*PointX(Symbol()))
{
OrderModify(OrderTicket(),OrderOpenPrice(),nd(Bid+TrailingStop*PointX(Symbol()),Symbol()),OrderTakeProfit(),0,CLR_NONE);
return;
}
}
}
}
}
}
}
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
---