Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
s7_up_bot_1.00
//+------------------------------------------------------------------+
//| UP_bot_1.mq4 |
//| Copyright © 2014, sova75 |
//+------------------------------------------------------------------+
#property copyright "sova75"
#property link "html://www.mql4.com"
#property version "1.00"
#property description "òîðãîâëÿ îò óðîâíåé - âõîä íà âòîðîì áàðå"
//--- îáúÿâëåíèå êîíñòàíò
#define BUY 0 // ñîçäàäèì ïðåäîïðåäåëåííþ ïåðåìåííóþ ñî çíà÷åíèåì 0
#define SEL 1 // ñîçäàäèì ïðåäîïðåäåëåííþ ïåðåìåííóþ ñî çíà÷åíèåì 1
//--- input parameters
extern string separator1 ="------ start trade settings ------";
extern int TakeProfit =30; // óðîâåíü TakeProfit
extern int StopLoss =0; // óðîâåíü StopLoss (if 0 then auto)
extern double HLdivergence =0.1; // ìèíèì. îòêëîíåíèå äâóõ ñîñåäíèõ áàðîâ äëÿ âõîäà
extern double SpanPrice =6; // îòñòóï îò ñòàðòîâîãî óðîâíÿ äëÿ îòêðûòèÿ îðäåðà
extern double Lots =0.01; // ðàçìåð ñòàâêè
extern int MaxTrades =1; // ìàêñ. êîë-âî îäíîâðåìåííî îòêðûòûõ îðäåðîâ
extern int Slippage =5; // ïðîñêàëüçûâàíèå
extern int MagicNumber =140804; // íîìåð ñîâåòíèêà
extern string separator2 ="------ output settings ------";
extern bool TrailingStop =false; // òðàë ñòîïîâ îòêðûòûõ îðäåðîâ
extern int TrailStopLoss =20; // óðîâåíü òðàëà StopLoss
extern bool ZeroTrailingStop =false; // òðàë ñòîïîâ äî óðîâíÿ ÁÓ
extern double StepTrailing =0.5; // øàã òðàëà ñòîïîâ
extern bool OutputAtLower =false; // âûõîä ïðè ñíèæåíèè íèæå ïðåäûäóùåãî áàðà
extern bool OutputAtRevers =false; // âûõîä ïðè ïåðåâîðîòå òðåíäà
extern double SpanToRevers =3; // îòñòóï îò ðåâåðñèâíîãî óðîâíÿ äëÿ çàêðûòèÿ îðäåðà
//--- ãëîáàëüíûå ïåðåìåííûå
int expertBars;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
void OnInit() {
//--- ïðîâåðÿåì ðàçðÿäíîñòü
if(Digits==3 || Digits==5) {
TakeProfit *=10;
StopLoss *=10;
Slippage *=10;
SpanPrice *=10;
HLdivergence *=10;
TrailStopLoss *=10;
StepTrailing *=10;}
//--- ïåðåâîäèì çíà÷åíèå ïåðåìåííîé HLdivergence â öåíîâóþ ôîðìó
// if(Digits==2 || Digits==3) {HLdivergence/=1000; SpanPrice/=1000;}
// else {HLdivergence/=100000; SpanPrice/=100000;}
//--- ïðîâåðÿåì ðàçðåøåííûå óðîâíè TakeProfit, StopLoss
if (TakeProfit<MarketInfo(_Symbol,MODE_STOPLEVEL) && TakeProfit!=0) {
Comment("TakeProfit value too small, must be >= "+DoubleToStr(MarketInfo(_Symbol,MODE_STOPLEVEL),0));}
if (StopLoss<MarketInfo(_Symbol,MODE_STOPLEVEL) && StopLoss!=0) {
Comment("StopLoss value too small, must be >= "+DoubleToStr(MarketInfo(_Symbol,MODE_STOPLEVEL),0));}
//---
return;}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
return;}
//+------------------------------------------------------------------+
//| expert ontick function |
//+------------------------------------------------------------------+
void OnTick() {
//--- åñëè îðäåðîâ íåò, ïðîâåðÿåì óñëîâèÿ äëÿ âõîäà
if(CountOrders()<MaxTrades)
if(NextTrade())
if(StartTrade(BUY)) OpenOrders(BUY);
if(CountOrders()<MaxTrades)
if(NextTrade())
if(StartTrade(SEL)) OpenOrders(SEL);
//--- åñëè îðäåðà åñòü - ïðîâåðÿåì óñëîâèÿ âûõîäà
if(CountOrders()!=0) {
//--- òðàëèì ñòîïû ðûíî÷íûõ îðäåðîâ
if(TrailingStop) Trailing();
//--- òðàëèì ñòîïû ðûíî÷íûõ îðäåðîâ äî óðîâíÿ ÁÓ
if(ZeroTrailingStop) ZeroTrailing();
//--- âûõîäèì ïðè ñíèæåíèè íèæå ïðåäûäóùåãî áàðà
if(OutputAtLower) OutputAL();
//--- âûõîäèì ïðè ñíèæåíèè iHigh áàðà
if(OutputAtRevers) OutputAR();}
return;}
//+------------------------------------------------------------------+
//| îïðåäåëÿåì êîëè÷åñòâî îòêðûòûõ îðäåðîâ ïî ìàãèêó |
//+------------------------------------------------------------------+
int CountOrders() {int count=0;
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;}}
return(count);}
//+------------------------------------------------------------------+
//| ïðîâåðÿåì áàð ïîñëåäíåãî îòêðûòîãî îðäåðà |
//+------------------------------------------------------------------+
bool NextTrade() {int count=0;
if(OrdersTotal()==0) return true;
for(int i=OrdersTotal()-1; i >= 0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderMagicNumber()==MagicNumber) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if(OrderOpenTime()<Time[0])
return true;}}}}
return false;}
//+------------------------------------------------------------------+
//| ïðîâåðÿåì óñëîâèÿ äëÿ âõîäà |
//+------------------------------------------------------------------+
bool StartTrade(int typ) {
//--- ïðîâåðÿåì âîçìîæíîñòü ïîêóïêè
if(typ==BUY) {
if(MathAbs(Low[0]-Low[1])<Point*HLdivergence)
if(Bid-Low[0]>Point*SpanPrice && Bid-Low[0]<Point*SpanPrice*1.5) return true;}
//--- ïðîâåðÿåì âîçìîæíîñòü ïðîäàæè
if(typ==SEL) {
if(MathAbs(High[0]-High[1])<Point*HLdivergence)
if(High[0]-Bid>Point*SpanPrice && High[0]-Bid<Point*SpanPrice*1.5) return true;}
return false;}
//+------------------------------------------------------------------+
//| îòêðûâàåì îðäåðà ïî òåêóùåé öåíå |
//+------------------------------------------------------------------+
bool OpenOrders(int typ) {
double price=0,SL=0,TP=0,spread=0; // îáíóëèì ïåðåìåííûå äëÿ öåíû
int p=0,ticket=-1; // è ñ÷åò÷èê ïîïûòîê îòêðûòèÿ îðäåðîâ
if(typ==BUY) { // åñëè ìû õîòèì îòêðûòü îðäåð íà ïîêóïêó
price=NormalizeDouble(Ask,Digits); // çàïðîñèì öåíó äëÿ åãî îòêðûòèÿ è ñðàçó æå åå íîðìàëèçóåì ïîä 4 èëè 5 çíàêîâ àâòîìàòè÷åñêè
if (StopLoss>0) SL=NormalizeDouble(Bid-Point*StopLoss,Digits);
else SL=NormalizeDouble(Low[0]-Point*HLdivergence,Digits);
TP=NormalizeDouble(Ask+Point*TakeProfit,Digits);}
if(typ==SEL) { // åñëè ìû õîòèì îòêðûòü îðäåð íà ïîêóïêó
price=NormalizeDouble(Bid,Digits); // çàïðîñèì öåíó äëÿ åãî îòêðûòèÿ è ñðàçó æå åå íîðìàëèçóåì ïîä 4 èëè 5 çíàêîâ àâòîìàòè÷åñêè
spread=MarketInfo(_Symbol,MODE_SPREAD);
if (StopLoss>0) SL=NormalizeDouble(Ask+Point*StopLoss,Digits);
else SL=NormalizeDouble(High[0]+Point*HLdivergence+Point*spread,Digits);
TP=NormalizeDouble(Bid-Point*TakeProfit,Digits);}
if(IsTradeAllowed()) // ïðîâåðèì, ñâîáîäåí ëè ïîòîê êîòèðîâîê è ìîæåì ëè ìû îòêðûòü îðäåð
while(p<5) { // çàïóñòèì öèêë ïîïûòîê îòêðûòèÿ îðäåðà íà 5 ïîïûòîê
ticket=OrderSend(Symbol(),typ,Lots,price,Slippage,SL,TP,WindowExpertName()+" "+(string)MagicNumber,MagicNumber,0,clrBlack);
if(ticket>=0) // åñëè íàø îðäåð îäîáðèëè, çàïîìíèì åãî òèêåò â ïåðåìåííóþ ticket
return true; // âûéäåì èç ôóíêöèè ñ óñïåõîì
else { // åñëè ñåðâåð íå ïðèíÿë íàø îðäåð
p++; // óâåëè÷èì ñ÷åò÷èê íà 1
Print("OrderSend çàâåðøèëàñü ñ îøèáêîé #",GetLastError()); // âûâåäåì â æóðíàë èìÿ ôóíêöèè è íîìåð îøèáêè
Sleep(500); RefreshRates();}} // ïîäîæäåì ïîëñåêóíäû è îáíîâèì äàííûå
return false;} // â ñëó÷àå åñëè çà 5 ïîïûòîê îðäåð íå îòêðûëñÿ, âûéäåì èç ôóíêöèè ñ íåóäà÷åé
//+------------------------------------------------------------------+
//| òðàëèì ñòîïû ðûíî÷íûõ îðäåðîâ |
//+------------------------------------------------------------------+
void Trailing() {
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderType()<=OP_SELL && OrderMagicNumber()==MagicNumber) {
if(OrderType()==OP_BUY) {
if(OrderStopLoss()<Bid-Point*TrailStopLoss) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailStopLoss,OrderTakeProfit(),0,clrBlue))
Print("Îøèáêà ìîäèôèêàöèè Trailing. Êîä îøèáêè=",GetLastError());}}
else {
if(OrderStopLoss()>Ask+Point*TrailStopLoss) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailStopLoss,OrderTakeProfit(),0,clrRed))
Print("Îøèáêà ìîäèôèêàöèè Trailing. Êîä îøèáêè=",GetLastError());}}}
else Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());}}
return;}
//+------------------------------------------------------------------+
//| ïåðåâîäèì â îðäåðà ÁÓ ïî äîñòèæåíèè |
//+------------------------------------------------------------------+
void ZeroTrailing() {double SL;
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderType()<=OP_SELL && OrderMagicNumber()==MagicNumber) {
if(OrderType()==OP_BUY) {
if(OrderStopLoss()<OrderOpenPrice()) {
if (StopLoss>0) SL=NormalizeDouble(Bid-Point*StopLoss,Digits);
else SL=NormalizeDouble(Bid-Point*(SpanPrice+HLdivergence),Digits);
if(OrderStopLoss()<SL && SL-OrderStopLoss()>Point*StepTrailing) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,clrBlue))
Print("Îøèáêà ìîäèôèêàöèè ZeroTrailing. Êîä îøèáêè=",GetLastError());}}}
else {
if(OrderStopLoss()>OrderOpenPrice()) {
if (StopLoss>0) SL=NormalizeDouble(Ask+Point*StopLoss,Digits);
else SL=NormalizeDouble(Ask+Point*(SpanPrice+HLdivergence),Digits);
if(OrderStopLoss()>SL && OrderStopLoss()-SL>Point*StepTrailing) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,clrRed))
Print("Îøèáêà ìîäèôèêàöèè ZeroTrailing. Êîä îøèáêè=",GetLastError());}}}}
else Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());}}
return;}
//+------------------------------------------------------------------+
//| âûõîäèì ïðè ñíèæåíèè íèæå ïðåäûäóùåãî áàðà |
//+------------------------------------------------------------------+
void OutputAL() {
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderType()<=OP_SELL && OrderMagicNumber()==MagicNumber) {
if(OrderType()==OP_BUY) {
if(Bid<iLow(NULL,0,1)) {
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
Print("Îøèáêà ìîäèôèêàöèè OutputAtLower. Êîä îøèáêè=",GetLastError());}}
else {
if(Bid>iHigh(NULL,0,1)) {
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed))
Print("Îøèáêà ìîäèôèêàöèè OutputAtLower. Êîä îøèáêè=",GetLastError());}}}
else Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());}}
return;}
//+------------------------------------------------------------------+
//| âûõîäèì ïðè ïåðåâîðîòå òðåíäà |
//+------------------------------------------------------------------+
void OutputAR() {
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderType()<=OP_SELL && OrderMagicNumber() == MagicNumber) {
if(OrderType()==OP_BUY) {
if(MathAbs(High[0]-High[1])<Point*HLdivergence) {
if(High[0]-Bid>Point*SpanToRevers && High[0]-Bid<Point*SpanToRevers*1.5) {
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
Print("Îøèáêà ìîäèôèêàöèè OutputAtRevers. Êîä îøèáêè=",GetLastError());}}}
else {
if(MathAbs(Low[0]-Low[1])<Point*HLdivergence) {
if(Bid-Low[0]>Point*SpanToRevers && Bid-Low[0]<Point*SpanToRevers*1.5) {
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed))
Print("Îøèáêà ìîäèôèêàöèè OutputAtRevers. Êîä îøèáêè=",GetLastError());}}}}
else Print("OrderSelect() âåðíóë îøèáêó - ",GetLastError());}}
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
---