//+------------------------------------------------------------------+
//| e-TLE_v.1.7.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 20.09.2005 Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ (Three Level Exit). |
//| Îòðàáàòûâàåò âñå îòêðûòûå ïîçèöèè. |
//| Âåøàòü òîëüêî íà îäèí ëþáîé ãðàôèê. |
//| 22.09.2005 v.1.0 Ââ¸ë âíåøíèé ïàðàìåòð äëÿ óïðàâëåíèÿ çîíîé |
//| âëèÿíèÿ ñîâåòíèêà. |
//| 22.09.2005 v.1.1 Ââ¸ë ïàðàìåòðû äëÿ îãðàíè÷åíèé ïî ñ÷¸òó |
//| 22.09.2005 v.1.2 Èñïðàâèë îøèáêó ñ îïðåäåëåíèåì âàëþòû |
//| 22.09.2005 v.1.3 Ðåàëèçîâàë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû |
//| 22.09.2005 v.1.4 Ïîïðàâèë ìåõàíèçì îòñå÷êè ñíèæåíèÿ öåíû |
//| 23.09.2005 v.1.5 Ðåàëèçîâàë ôàêòè÷åñêóþ óñòàíîâêó ñòîïîâ |
//| 14.10.2005 v.1.6 Òðè óðîâíÿ ïåðåíîñà ñòîïà |
//| 20.10.2005 v.1.7 Çàêðûòèå îäíîé òðåòè ïîçèöèè - |
//| çàêðûâàåò òðåòü ïîçèöèè ïðè äîñòèæåíèè ïåðâîé ïðîôèòíîé çîíû |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà --------------------------------
extern bool UseOneAccount = True; // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå
extern int NumberAccount = 82946; // Íîìåð òîðãîâîãî ñ÷¸òà
extern bool AllPositions = False; // Óïðàâëÿòü âñåìè ïîçèöèÿìè
extern int LevelProfit1 = 20; // Ïåðâûé óðîâåíü ïðîôèòà
extern int LevelMoving1 = 1; // Ïåðâûé óðîâåíü ïåðåíîñà
extern bool UseCloseOneThird = True; // Óïðàâëÿòü âñåìè ïîçèöèÿìè
extern int LevelProfit2 = 35; // Âòîðîé óðîâåíü ïðîôèòà
extern int LevelMoving2 = 20; // Âòîðîé óðîâåíü ïåðåíîñà
extern int LevelProfit3 = 55; // Òðåòèé óðîâåíü ïðîôèòà
extern int LevelMoving3 = 30; // Òðåòèé óðîâåíü ïåðåíîñà
extern int TrailingStop = 40; // Ðàçìåð òðàëà
extern int TrailingStep = 5; // Øàã òðàëà
extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèè
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ----------------------------
//+------------------------------------------------------------------+
//| Custor expert deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start() {
double pp;
int nd;
string comm="";
if (UseOneAccount && AccountNumber()!=NumberAccount) {
Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
return;
}
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()==Symbol()) {
ThreeLevelSystemOfOutput();
nd=MarketInfo(OrderSymbol(), MODE_DIGITS);
pp=MarketInfo(OrderSymbol(), MODE_POINT);
comm=comm+OrderSymbol()+" Öåíà: "+DoubleToStr(OrderOpenPrice(),nd)+
" SL = " + DoubleToStr(OrderStopLoss(),nd)+
" ("+StopLossInPoint()+")\n";
}
}
}
if (ShowComment) Comment(comm);
}
//+------------------------------------------------------------------+
//| Òð¸õóðîâíåâàÿ ñèñòåìà âûõîäîâ |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput() {
int pr=ProfitPosition(), sl=StopLossInPoint();
int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
if (pr>LevelProfit1 && pr<=LevelProfit2 && sl<LevelMoving1) {
ModifyStopLossInPoint(LevelMoving1);
if (UseCloseOneThird) CloseOneThird();
}
if (pr>LevelProfit2 && pr<=LevelProfit3 && sl<LevelMoving2) ModifyStopLossInPoint(LevelMoving2);
if (pr>LevelProfit3 && sl<LevelMoving3) ModifyStopLossInPoint(LevelMoving3);
if (pr>LevelMoving3+TrailingStop+TrailingStep) {
TrailingPositions();
}
}
//+------------------------------------------------------------------+
//| Çàêðûòèå îäíîé òðåòè ïîçèöèè |
//+------------------------------------------------------------------+
void CloseOneThird() {
bool fc=False;
double Lots=MathCeil(OrderLots()/3*10)/10;
if (Lots>0) {
if (OrderType()==OP_BUY)
fc=OrderClose(OrderTicket(), Lots, Bid, Slippage, CLR_NONE);
if (OrderType()==OP_SELL)
fc=OrderClose(OrderTicket(), Lots, Ask, Slippage, CLR_NONE);
if (fc && UseSound) PlaySound(NameFileSound);
}
}
//+------------------------------------------------------------------+
//| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì |
//+------------------------------------------------------------------+
void TrailingPositions() {
double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid=MarketInfo(OrderSymbol(), MODE_BID);
if (pBid-OrderOpenPrice()>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL) {
pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss |
//| Ïàðàìåòðû: |
//| ldStopLoss - óðîâåíü StopLoss |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
bool fm; // Ôëàã ìîäèôèêàöèè ïîçèöèè
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss |
//| Ïàðàìåòðû: |
//| ldStopLoss - óðîâåíü StopLoss |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
bool fm; // Ôëàã ìîäèôèêàöèè ïîçèöèè
double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) ldSL=OrderOpenPrice()+pp*mp;
if (OrderType()==OP_SELL) ldSL=OrderOpenPrice()-pp*mp;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ïðîôèò ïîçèöèè â ïóíêòàõ |
//+------------------------------------------------------------------+
int ProfitPosition() {
double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
double pr=0;
if (OrderType()==OP_BUY) {
pBid=MarketInfo(OrderSymbol(), MODE_BID);
pr=(pBid-OrderOpenPrice())/pp;
}
if (OrderType()==OP_SELL) {
pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
pr=(OrderOpenPrice()-pAsk)/pp;
}
return(MathRound(pr));
}
//+------------------------------------------------------------------+
//| Âîçâðàùàåò StopLoss ïîçèöèè â ïóíêòàõ |
//+------------------------------------------------------------------+
int StopLossInPoint() {
double pp=MarketInfo(OrderSymbol(), MODE_POINT);
double sp=0;
if (OrderType()==OP_BUY) {
sp=(OrderStopLoss()-OrderOpenPrice())/pp;
}
if (OrderType()==OP_SELL) {
sp=(OrderOpenPrice()-OrderStopLoss())/pp;
}
if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
return(MathRound(sp));
}
//+------------------------------------------------------------------+
Comments