Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Move_v1_by_Vlad123
//+------------------------------------------------------------------+
//| Move_v1_byVlad123.mq4 |
//| Vlad123 |
//| |
//+------------------------------------------------------------------+
#property copyright "Vlad123"
//--------------------------------------------------------------- 1 --
extern double StopLossMax =150; // SL ìàêñèìàëüíûé äëÿ îòêðûâàåìîãî îðäåðà
extern double TakeProfitLevel =4.5; // ÒÐ óðîâåíü ÷åðåç äåëåíèå êàíàëà ïåðèîäà Period_1
extern int Period_1=15; // Ïåðèîä ïîñëåäíåãî ìîíèòîðèíãà - çäåñü äëÿ Ì15
extern int Period_2=10; // Ïåðèîä æèçíè ïðîãíîçà - çäåñü äëÿ Ì15
extern int Period_3=2; // Ïåðèîäáîëüøîãî ìîíèòîðèíãà äëÿ âûÿâëåíèÿ îòíîñèòåëíîãî äâèæåíèÿ, çäåñü äëÿ Ì15, íî â ÄÍßÕ
extern double MoveLevel=0.5; // Ñèëà îòíîñèòåëüíîãî äâèæåíèÿ
extern double HistPriceMin=0.5; // Öåíà íèæå ìèíèìóìîâ ïåðèîäà òîðãîâëè
extern double HistPriceMax=2.0; // Öåíà âûøå ìàêñèìóìîâ ïåðèîäà òîðãîâëè
extern double BackLevelMin=0.14; // Ìèíèìàëüíûé óðîâåíü îòñêîêà äëÿ âõîäà
extern double BackLevelMax=0.17; // Ìàêñèìàëüíûé óðîâåíü îòñêîêà äëÿ âõîäà
extern double Lots =0.1; // Æåñòêî çàäàííîå êîëè÷. ëîòîâ
extern double Prots =0.07; // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
bool Work=true; // Ýêñïåðò áóäåò ðàáîòàòü.
string Symb; // Íàçâàíèå ôèíàíñ. Èíñòðóìåíòà
double OpenPrice; // Öåíà îòêðûòèÿ ïîçèöèè
//--------------------------------------------------------------- 2 --
int start()
{
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket; // Íîìåð îðäåðà
//StopLoss, // SL
//TakeProfit; // TP
double
Lot, // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
Lts, // Êîëè÷. ëîòîâ â îòêðûâ.îðäåðå
Min_Lot, // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
Step, // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
Free, // Òåêóùèå ñâîáîäíûå ñðåäñòâà
One_Lot, // Ñòîèìîñòü îäíîãî ëîòà
Price, // Öåíà âûáðàííîãî îðäåðà
SL, // SL âûáðàííîãî îðäåðà
TP; // TP âûáðàííîãî îðäåðà
bool
Ans =false, // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
Cls_B=false, // Êðèòåðèé äëÿ çàêðûòèÿ Buy
Cls_S=false, // Êðèòåðèé äëÿ çàêðûòèÿ Sell
Opn_B=false, // Êðèòåðèé äëÿ îòêðûòèÿ Buy
Opn_S=false; // Êðèòåðèé äëÿ îòêðûòèÿ Sell
//--------------------------------------------------------------- 3 --
// Ïðåäâàðèò.îáðàáîòêà
if(Bars < Period_3) // Íåäîñòàòî÷íî áàðîâ
{
Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
if(Work==false) // Êðèòè÷åñêàÿ îøèáêà
{
Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
//--------------------------------------------------------------- 4 -
// Ó÷¸ò îðäåðîâ
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
Total=0; // Êîëè÷åñòâî îðäåðîâ
for(int i=1; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symb)continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Ticket=OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
Lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
//--------------------------------------------------------------- 5 --
// Òîðãîâûå êðèòåðèè
// Ïåðâûé ïåðèîä
double PriceMidH;
double PriceMidL;
int x=0;
double MinLocal=HistPriceMax;
double MaxLocal=HistPriceMin;
while (x<=Period_1)
{
PriceMidH=iHigh(NULL,0,x); // perebor ceny
PriceMidL=iLow(NULL,0,x); // perebor ceny
// Äâèæåíèå Max i Min Local
if (PriceMidH>MaxLocal)
{
MaxLocal=PriceMidH; // kriterij ekstremuma
}
if ( PriceMidL<MinLocal)
{
MinLocal=PriceMidL; // kriterij ekstremuma
}
x++;
}
double DeltaPrice=MaxLocal-MinLocal;
// Âòîðîé ïåðèîä
double PriceMidH1;
double PriceMidL1;
int x1=0;
double MinLocal1=HistPriceMax;
double MaxLocal1=HistPriceMin;
while (x1<=Period_2)
{
PriceMidH1=iHigh(NULL,0,x1); // perebor ceny
PriceMidL1=iLow(NULL,0,x1); // perebor ceny
// Äâèæåíèå Max i Min Local
if (PriceMidH1>MaxLocal1)
{
MaxLocal1=PriceMidH1; // kriterij ekstremuma
}
if ( PriceMidL1<MinLocal1)
{
MinLocal1=PriceMidL1; // kriterij ekstremuma
}
x1++;
}
double DeltaPrice1=MaxLocal1-MinLocal1;
// Òðåòèé ïåðèîä
double PriceMidH2;
double PriceMidL2;
int x2=0;
double MinLocal2=HistPriceMax;
double MaxLocal2=HistPriceMin;
while (x2<=Period_3)
{
PriceMidH2=iHigh(NULL,PERIOD_D1,x2); // perebor ceny
PriceMidL2=iLow(NULL,PERIOD_D1,x2); // perebor ceny
// Äâèæåíèå Max i Min Local
if (PriceMidH2>MaxLocal2)
{
MaxLocal2=PriceMidH2; // kriterij ekstremuma
}
if ( PriceMidL2<MinLocal2)
{
MinLocal2=PriceMidL2; // kriterij ekstremuma
}
x2++;
}
double DeltaPrice2=MaxLocal2-MinLocal2;
// Îòêðûòèå ïîçèöèè
double Proc=MoveLevel;
if ( Bid>MinLocal+DeltaPrice*BackLevelMin && Bid<MinLocal+DeltaPrice*BackLevelMax // Êðèòåðèé îòñêîêà
&& DeltaPrice>Proc*DeltaPrice2 // Êðèòåðèé äâèæåíèÿ
&& DeltaPrice>85*Point && DeltaPrice<StopLossMax*Point) // Êðèòåðèé âîëàòèëüíîñòè - ìèíèìóì çàâèñèò îò âîçìîæíîñòè ÄÖ äëÿ ÒÐ, ìàõ îò äîïóñêàåìîé ïðîñàäêè
{
Opn_S=true; // Êðèòåðèé îòêð.
}
if ( Ask<MaxLocal-DeltaPrice*BackLevelMin && Ask>MaxLocal-DeltaPrice*BackLevelMax && DeltaPrice>Proc*DeltaPrice2 && DeltaPrice>85*Point && DeltaPrice<StopLossMax*Point) // Åñëè ðàçíèöà ìåæäó
{ // ..ÌÀ 1 è 2 áîëüøàÿ è ÌÀ1áîëÌÀ2è áîë ÌÀ3 è ÌÀ4 ïðîáèëî ÌÀ1 íà 5 ïóíêòîâ
Opn_B=true; // Êðèòåðèé îòêð.
}
// Çàêðûòèå ïîçèöèè ïî âðåìåíè æèçíè
if ( Tip==0 && MaxLocal1<OpenPrice) // Åñëè âî âðåìÿ æèçíè ïðîãíîçà öåíà íå ïðîáèëà îòêðûòèå
{
Cls_B=true; // Êðèòåðèé çàêð.
}
if ( Tip==1 && OpenPrice<MinLocal1)
{
Cls_S=true;
}
//--------------------------------------------------------------- 6 --
// Çàêðûòèå îðäåðîâ
while(true) // Öèêë çàêðûòèÿ îðä.
{
if (Tip==0 && Cls_B==true) // Îòêðûò îðäåð Buy..
{ //è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Buy ",Ticket,". Îæèäàíèå îòâåòà..");
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Bid,2); // Çàêðûòèå Buy
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Buy ",Ticket);
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if (Tip==1 && Cls_S==true) // Îòêðûò îðäåð Sell..
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Sell ",Ticket,". Îæèäàíèå îòâåòà..");
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Ask,2); // Çàêðûòèå Sell
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Sell ",Ticket);
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//--------------------------------------------------------------- 7 --
// Ñòîèìîñòü îðäåðîâ
RefreshRates(); // Îáíîâëåíèå äàííûõ
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Ìèíèì. êîëè÷. ëîòîâ
Free =AccountFreeMargin(); // Ñâîáîäí ñðåäñòâà
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Ñòîèìîñòü 1 ëîòà
Step =MarketInfo(Symb,MODE_LOTSTEP); // Øàã èçìåíåí ðàçìåðà
if (Lots > 0) // Åñëè çàäàíû ëîòû,òî
Lts =Lots; // ñ íèìè è ðàáîòàåì
else // % ñâîáîäíûõ ñðåäñòâ
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Äëÿ îòêðûòèÿ
if(Lts < Min_Lot) Lts=Min_Lot; // Íå ìåíüøå ìèíèìàëüí
if (Lts*One_Lot > Free) // Ëîò äîðîæå ñâîáîäí.
{
Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîòîâ");
return; // Âûõîä èç start()
}
// Ó÷¸ò îðäåðîâ 2
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
Total=0; // Êîëè÷åñòâî îðäåðîâ
for(int j=1; j<=OrdersTotal(); j++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(j-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symb)continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
return; // Âûõîä èç start()
}
Ticket=OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
Lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
//--------------------------------------------------------------- 8 --
// Îòêðûòèå îðäåðîâ
// Óðåçàíèå Ñòîï Ëîññ
double StopLoss;
if (DeltaPrice/Point<StopLossMax)
{
StopLoss=DeltaPrice/Point;
}
else
{
StopLoss=StopLossMax;
}
//
while(true) // Öèêë çàêðûòèÿ îðä.
{
if (Total==0 && Opn_B==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Buy
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Bid - New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
TP=Bid + New_Stop(DeltaPrice/Point/TakeProfitLevel)*Point; // Âû÷èñëåíèå TP îòêð.
Alert("Ïîïûòêà îòêðûòü Buy. Îæèäàíèå îòâåòà..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Îòêðûòèå Buy
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð Buy ",Ticket);
OpenPrice=Ask;
Alert(OpenPrice);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if (Total==0 && Opn_S==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Sell
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Ask + New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
TP=Ask - New_Stop(DeltaPrice/Point/TakeProfitLevel)*Point; // Âû÷èñëåíèå TP îòêð.
Alert("Ïîïûòêà îòêðûòü Sell. Îæèäàíèå îòâåòà..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Îòêðûòèå Sel
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
Alert ("Îòêðûò îðäåð Sell ",Ticket);
OpenPrice=Bid;
Alert(OpenPrice);
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//--------------------------------------------------------------- 9 --
return; // Âûõîä èç start()
}
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error) // Ô-èÿ îáðàáîò îøèáîê
{
switch(Error)
{ // Ïðåîäîëèìûå îøèáêè
case 4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..");
RefreshRates(); // Îáíîâèì äàííûå
return(1); // Âûõîä èç ôóíêöèè
case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..");
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(1); // Âûõîä èç ôóíêöèè
case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..");
Sleep(500); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
// Êðèòè÷åñêèå îøèáêè
case 2: Alert("Îáùàÿ îøèáêà.");
return(0); // Âûõîä èç ôóíêöèè
case 5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 64: Alert("Ñ÷åò çàáëîêèðîâàí.");
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 133:Alert("Òîðãîâëÿ çàïðåùåíà.");
return(0); // Âûõîä èç ôóíêöèè
case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.");
return(0); // Âûõîä èç ôóíêöèè
default: Alert("Âîçíèêëà îøèáêà ",Error); // Äðóãèå âàðèàíòû
return(0); // Âûõîä èç ôóíêöèè
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Ïðîâåðêà ñòîï-ïðèê.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
if (Parametr < Min_Dist) // Åñëè ìåíüøå äîïóñò.
{
Parametr=Min_Dist; // Óñòàíîâèì äîïóñò.
Alert("Óâåëè÷åíà äèñòàíöèÿ ñòîï-ïðèêàçà.");
}
return(Parametr); // Âîçâðàò çíà÷åíèÿ
}
//-------------------------------------------------------------- 12 -
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
---