Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
elder_v1
//+------------------------------------------------------------------+
//| Ñèñòåìà òðåõ ýêðàíîâ Ýëäåðà |
//| Copyright © 2011, GMX[23RUS] |
//| locke_13@rambler.ru |
//+------------------------------------------------------------------+
extern double TakeProfit = 0;
extern double LotSize = 0.1;
extern double TrailStop = 30;
extern int StopLoss=55;
extern int MAper=7;
datetime newBar;
int magic=13;
int counterB=0;
int counterS=0;
int count=20;
int MacdPer=PERIOD_H1;
int StPer=PERIOD_M30;
int ThurdP=PERIOD_M5;
int dep;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
ObjectCreate("my", OBJ_LABEL, 0, 0, 0);
ObjectSet("my", OBJPROP_CORNER, 1);
ObjectSet("my", OBJPROP_XDISTANCE, 10 );
ObjectSet("my", OBJPROP_YDISTANCE, 15);
newBar=iTime(NULL, StPer, 0);
dep=AccountBalance();
}
int start()
{
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
datetime bar=iTime(NULL, StPer, 0);
if (bar==0) Alert("bar=0");
if (bar!=newBar) // íîâûé áàð?
{
OrdModif();
Thurd();
TrailingStop(TrailStop);
newBar=bar;
Lot();
}
return(0);
}
int MACDsamp() // ïåðâûé ýêðàí - ÷àñîâîé MACD
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
int total;
MacdCurrent=iMACD(NULL,MacdPer,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
MacdPrevious=iMACD(NULL,MacdPer,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
SignalCurrent=iMACD(NULL,MacdPer,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
SignalPrevious=iMACD(NULL,MacdPer,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
// no opened orders identified
if(AccountFreeMargin()<(1000*LotSize))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// åñëè ìàêä ðàñòåò - èùåì ñèãíàë íà ïîêóïêó
if(MacdPrevious<MacdCurrent)
{
return(1);
}
// åñëè ïàäàåò - íà ïðîäàæó
if( MacdPrevious>MacdCurrent)
{
return(-1);
}
return(0);
}
int Stoch() // âòîðîé ýêðàí - ñòîõàñòèêà, èíäåêñ ñèëû è ADX - åñëè õîòÿ áû äâîå äàþò ñèãíàë - ñîâåðøàåì ñäåëêó
{
int ball=0;
double StCurrent, StPrev;
StCurrent=iStochastic(NULL, StPer, 6, 2, 1, MODE_EMA, 0, MODE_MAIN, 0);
StPrev=iStochastic(NULL, StPer, 6, 2, 1, MODE_EMA, 0, MODE_MAIN, 1);
if (StCurrent>70 && StPrev<70)
{
ball++;
}
else if (StCurrent>30 && StPrev<30)
{
ball--;
}
double forceCurr, forcePrev, forcePrevPrev;
forceCurr=iForce(NULL, StPer, 3, MODE_EMA, PRICE_WEIGHTED, 0);
forcePrev=iForce(NULL, StPer, 3, MODE_EMA, PRICE_WEIGHTED, 1);
forcePrevPrev=iForce(NULL, StPer, 3, MODE_EMA, PRICE_WEIGHTED, 2);
if (forceCurr<0 && forceCurr>forcePrev && forcePrevPrev>forcePrev) ball++;
if (forceCurr>0 && forceCurr<forcePrev && forcePrevPrev<forcePrev) ball--;
double adxMcurr, adxMprev, adxPDI, adxMDI;
adxMcurr=iADX(NULL, StPer, 13, PRICE_CLOSE, MODE_MAIN, 0);
adxMprev=iADX(NULL, StPer, 13, PRICE_CLOSE, MODE_MAIN, 1);
adxPDI=iADX(NULL, StPer, 13, PRICE_CLOSE, MODE_PLUSDI, 0);
adxMDI=iADX(NULL, StPer, 13, PRICE_CLOSE, MODE_MINUSDI, 0);
if (adxMcurr>adxMprev)
{
if (adxPDI>adxMDI) ball++;
if (adxPDI<adxMDI) ball--;
}
/*
double willCurr, willPrev;
willCurr=iWPR(NULL, StPer, 14, 0);
willCurr=iWPR(NULL, StPer, 14, 1);
if (willCurr<-30 && willPrev>-30) ball++;
if (willCurr>-70 && willPrev<-70) ball++;
*/
if (ball>=2) return(1);
if (ball<=-2) return(-1);
return(0);
}
int Thurd() // ñîáñòâåííî, òðåòèé ýêðàí - âûñòàâëÿåì îòëîæåííèêè
{ // âûøå ïðåäûäóùåãî ìàêñèìóìà èëè íèæå ïðåäûäóùåãî ìèíèìóìà
int err, total;
double LastH, LastL, SLB, SLS, prof;
total=OrdersTotal();
if(total<1) // òîëüêî îäèí îðäåð ìîæåò áûòü îòêðûò îäíîâðåìåííî
{
LastH=iHigh(NULL, ThurdP, 1)+1*Point; // ìàêñèìóì ïðåäûùóùåãî áàðà, ëèáî
if (LastH-Ask<10*Point) LastH=Ask+10*Point; // åñëè îí áëèæå ìèíèìàëüíîé äèñòàíöèè - íà ìèíèìàëüíóþ äèñòàíöèþ
LastH=NormalizeDouble(LastH, Digits);
LastL=iLow(NULL, ThurdP, 1)-1*Point; // ìèíèìóì ïðåäûäóùåãî áàðà, ëèáî
if (Bid-LastL<10*Point) LastL=Bid-10*Point; // åñëè îí áëèæå ìèíèìàëüíîé äèñòàíöèè - íà ìèíèìàëüíóþ äèñòàíöèþ
LastL=NormalizeDouble(LastL,Digits);
SLB=iLow(NULL, ThurdP, iLowest(NULL, ThurdP, MODE_LOW, 30, 1));// ñòîïëîññ äëÿ áàÿ âûñòàâëÿåì íà óðîâíå ìèíèìóìà çà ïîñëåäíèå 30 áàðîâ
if (SLB>Ask-StopLoss*Point) SLB=Ask-StopLoss*Point; // íî íå ìåíüøå ðàññòîÿíèÿ StopLoss
SLS=iHigh(NULL, ThurdP, iHighest(NULL, ThurdP, MODE_HIGH, 30, 1)); // äëÿ ñåëëà - àíàëîãè÷íî
if (SLS<Bid+StopLoss*Point) SLS=Bid+StopLoss*Point;
ObjectSetText("my","MACD="+MACDsamp()+" Stoch="+Stoch(),8,"Arial",Snow);
if (MACDsamp()+Stoch()==2)
{
if (TakeProfit==0) prof=0; else prof=LastH+TakeProfit*Point;
err=OrderSend(Symbol(), OP_BUYSTOP, LotSize, LastH, 0, SLB, prof, NULL, magic, 0, CLR_NONE); // âûñòàâëÿåì îòëîæåííèê
if (err==-1)
{
Alert("Îøèáêà îòêðûòèÿ BuyStop ",TxtERROR(0)," price ", LastH," öåíà ", Ask," LotSize ", LotSize, "SL=", SLB);
return(0);
}
return(1);
}
else if (MACDsamp()+Stoch()==-2)
{
if (TakeProfit==0) prof=0; else prof=LastL-TakeProfit*Point;
err=OrderSend(Symbol(), OP_SELLSTOP, LotSize, LastL, 0, SLS, prof, NULL, magic, 0, CLR_NONE); // è íà ïðîäàæó
if (err==-1)
{
Alert("Îøèáêà îòêðûòèÿ SellStop ",TxtERROR(0)," price ",LastL," öåíà ", Bid," prof ", prof, "SL=", SLB);
return(0);
}
return(-1);
}
}
return(0);
}
void OrdModif() // ôóíêöèÿ ðåäàêòèðîâàíèÿ îòëîæåííûõ îðäåðîâ
{
int tip,Ticket;
bool error;
double StLo,OSL,OOP;
double LastH, LastL, SLB, SLS;
LastH=iHigh(NULL, ThurdP, 1)+1*Point; // áàé ñòîï áóäåì óñòàíàâëèâàòü íà 1 ïîèíò âûøå ìàêñèìóìà ïðåäûäóùåãî áàðà
if (LastH-Ask<10*Point) LastH=Ask+10*Point; // åñëè ìàêñèìóì âûøå ìèíèìàëüíîé äèñòàíöèè - âûñòàâëÿåì íà ìèíèìàëüíóþ äèñòàíöèþ
LastL=iLow(NULL, ThurdP, 1)-1*Point; // ñåëë ñòîï áóäåì óñòàíàâëèâàòü íà 1 ïîèíò íèæå ìèíèìóìà ïðåäûäóùåãî áàðà
if (Bid-LastL<10*Point) LastL=Bid-10*Point; // ëèáî, ñîîòâåòñòâåííî íà ìèíèìàëüíóþ äèñòàíöèþ
SLB=iLow(NULL, ThurdP, iLowest(NULL, ThurdP, MODE_LOW, 30, 1)); // ñòîï ëîññ äëÿ áàÿ âûñòàâëÿåì íà óðîâíå ìèíèìóìà çà ïðåäûäóùèå 30 áàðîâ
if (SLB>Ask-StopLoss*Point) SLB=Ask-(StopLoss*Point); // ëèáî, ñîîòâåòñòâåííî íà ìèíèìàëüíóþ äèñòàíöèþ
SLS=iHigh(NULL, ThurdP, iHighest(NULL, ThurdP, MODE_HIGH, 30, 1)); // ñòîï ëîññ äëÿ ñåëëà âûñòàâëÿåì íà óðîâíå ìàêñèìóìà çà ïðåäûäóùèå 30 áàðîâ
if (SLS<Bid+StopLoss*Point) SLS=Bid+StopLoss*Point; // ëèáî, ñîîòâåòñòâåííî íà ìèèíèìàëüíóþ äèñòàíöèþ
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
//if (LastH<OOP) LastH=OOP;
//if (LastL>OOP) LastL=OOP;
Ticket = OrderTicket();
if (tip==OP_BUYSTOP && LastH<OOP)
{
if (counterB<count)
{
counterB++;
error=OrderModify(Ticket,NormalizeDouble(LastH, Digits),SLB,OrderTakeProfit(),0,White); // åñëè îðäåð íå îòêðûëñÿ ïîäâèãàåì åãî âíèç íà 1 ïîèíò âûøå ìàêñèìóìà ïðåäûäóùåãî áàðà
if (error==-1)
{
Alert("Îøèáêà èçìåíåíèÿ Buy ",TxtERROR(0)," price ",NormalizeDouble(LastH, Digits)," ",Symbol()," LotSize ", LotSize);
return(0);
}
}
else
{
OrderDelete(Ticket); // åñëè îðäåð íå îòêðûëñÿ â òå÷åíèå count áàðîâ, óäàëÿåì åãî
counterB=0;
}
}
if (tip==OP_SELLSTOP && LastL>OOP && MACDsamp()+Stoch()<=-1)
{
if (counterS<count)
{
counterS++;
error=OrderModify(Ticket,NormalizeDouble(LastL, Digits),SLS,OrderTakeProfit(),0,White); // åñëè îðäåð íå îòêðûëñÿ ïîäâèãàåì åãî ââåðõ íà 1 ïîèíò âûøå ìèíèìóìà ïðåäûäóùåãî áàðà
if (error==-1)
{
Alert("Îøèáêà èçìåíåíèÿ Buy ",TxtERROR(0)," price ",NormalizeDouble(LastL, Digits)," ",Symbol()," LotSize ", LotSize);
return(0);
}
}
else
{
OrderDelete(Ticket); // åñëè îðäåð íå îòêðûëñÿ â òå÷åíèå ñount áàðîâ, óäàëÿåì åãî
counterS=0;
}
}
}
}
}
}
void TrailingStop(int tral) // ôóíêöèÿ çàêðûòèÿ îðäåðîâ çàêðûâàåò ëèáî òðàëîì,
{ // ëèáî ïðè ðàçâîðîòå MA
int tip,Ticket;
bool error;
double StLo,OSL,OOP, MAcurr, MAprev;
MAcurr=iMA(NULL, PERIOD_M5, MAper, 0, MODE_EMA, PRICE_CLOSE, 0);
MAprev=iMA(NULL, PERIOD_M5, MAper, 0, MODE_EMA, PRICE_CLOSE, 1);
//ObjectSetText("my","MAcurr+"+MAcurr+" MAprev="+MAprev,12,"Arial",Snow);
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
Ticket = OrderTicket();
if (tip==OP_BUY)
{
if (Bid>OOP && MAcurr<MAprev) // åñëè öåíà â ïðîôèòå íî ïàäàåò
{
error=OrderClose(Ticket, LotSize, NormalizeDouble(Bid, 4), 0, CLR_NONE); // çàêðûâàåì îðäåð
if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError());
} else if (OSL<OOP-StopLoss*Point && !1) // óñëîâèå äëÿ ïîäòÿãèâàíèÿ ñòîïëîññà ñðàáîòàâøåìó îðäåðó - îòêëþ÷åíî (÷òîáû âêëþ÷èòü óäàëèòü "&& !1")
{
error=OrderModify(Ticket,OOP,OOP-StopLoss*Point,OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
//Sleep(500);
if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError());
}
if ((OSL<OOP && OOP>Bid-tral*Point) /*|| OSL>OOP*/) continue; // òðåéëèíã ñòîï
StLo = NormalizeDouble(Bid - tral*Point,Digits);
Alert("OSL=", OSL, " OOP=", OOP, " StLo=", StLo);
if (StLo > OSL && StLo >= OOP /*&& StLo<Bid-10*Point*/)
{ error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
//Sleep(500);
if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError());
}
}
if (tip==OP_SELL)
{
if (Ask<OOP && MAcurr>MAprev) // åñëè öåíà â ïðîôèòå íî ðàñòåò
{
error=OrderClose(Ticket, LotSize, NormalizeDouble(Ask, 4), 0, CLR_NONE);
if (!error) Print(Symbol()," Error order ",Ticket," Ask=", Ask, " bid=", Bid);
} else if (OSL>OOP+StopLoss*Point && !1)
{
error=OrderModify(Ticket,OOP,OOP+StopLoss*Point,OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
//Sleep(500);
if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError());
}
if ((OSL>OOP && OSL!=0 && OOP<Ask+tral*Point) /*|| OSL<OOP*/) continue;
StLo = NormalizeDouble(Ask + tral*Point,Digits);
if ((StLo < OSL||OSL==0) && StLo <= OOP && StLo>Ask+10*Point)
{ error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
//Sleep(500);
if (!error) Print(Symbol()," Error order ",Ticket," TrailingStop ",GetLastError());
}
}
}
}
}
}
void Lot()
{
if (AccountBalance()/dep>=2)
{
LotSize=LotSize+LotSize/2;
dep=AccountBalance();
}
}
string TxtERROR(int e)
{
if (e==0) e = GetLastError();
switch ( e )
{
case 0: return;
case 1: return;
case 2: return("Îáùàÿ îøèáêà ");
case 3: return("íåïðàâèëüíûå ïàðàìåòðû ");
case 6: return("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì ");
case 130: return("Íåïðàâèëüíûå ñòîïû ");
case 131: return("Íåïðàâèëüíûé îáúåì ");
case 132: return("Ðûíîê çàêðûò ");
case 133: return("Òîðãîâëÿ çàïðåùåíà ");
case 134: return("Íåäîñòàòî÷íî äåíåã ");
case 136: return("Íåò öåí ");
case 146: return("Ïîäñèñòåìà òîðãîâëè çàíÿòà ");
case 129: return("Íåïðàâèëüíàÿ öåíà ");
case 131: return("Íåïðàâèëüíûé îáúåì ");
case 4051:return("Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè ");
case 4059:return("Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå");
case 4063:return("Îæèäàåòñÿ ïàðàìåòð òèïà integer ");
case 4105:return("Íè îäèí îðäåð íå âûáðàí ");
case 4107:return("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè ");
case 4108:return("Íåâåðíûé íîìåð òèêåòà ");
case 4109:return("Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ `Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü` â ñâîéñòâàõ ýêñïåðòà.");
case 4200:return("Îáúåêò óæå ñóùåñòâóåò ");
default: return(StringConcatenate("Error ",e," "));
}
}
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
---