Orders Execution
0
Views
0
Downloads
0
Favorites
Followme
//+------------------------------------------------------------------+
//| Followme.mq4 |
//| Roger |
//| http://www.rogersignals.com |
//+------------------------------------------------------------------+
#property copyright "Roger"
#property link "http://www.rogersignals.com"
//Ñîâåòíèê äëÿ ðó÷íîãî òåñòèðîâàíèÿ ñòðàòåãèé. Çàïóñòèòå òåñòåð, âûáåðèòå íóæíûé
//òàéìôðåéì, ïàðó âàëþò, êà÷åñòâî òåñòèðîâàíèÿ, äàòû íà÷àëà è êîíöà è ðåæèì
//Âèçóàëèçàöèÿ. Ñðàçó ïîñëå ñòàðòà íàæìèòå Ïàóçó. Â îòêðûâøåìñÿ ãðàôèêå óâèäèòå
//äâå ëèíèè, ãîëóáóþ - äëÿ îðäåðîâ íà ïîêóïêó, æåëòóþ - äëÿ îðäåðîâ íà ïðîäàæó.
//Ïîêà Âû íå òðîãàåòå ýòè ëèíèè, íè÷åãî íå ïðîèçîéäåò.
//Âû ìîæåòå áðîñèòü íà ãðàôèê ëþáûå èíäèêàòîðû. Ìàíèïóëèðóÿ êíîïêîé Ïóñê/Ïàóçà,
//Âû ìîæåòå îñòàíàâëèâàòü õîä ïðîöåññà â ëþáîé ìîìåíò.
//Åñëè Âàì íåîáõîäèìî îòêðûòü îðäåð íà ïîêóïêó, âûäåëèòå ãîëóáóþ ëèíèþ è ïîòÿíèòå
//åå íà ìåñòî ïðåäïîëàãàåìîãî îòêðûòèÿ. Óáåðèòå Ïàóçó, ñðàçó æå îòêðîåòñÿ îðäåð.
//Åñëè ðàññòîÿíèå ìåæäó Áèäîì è ëèíèåé áûëî ìåíüøå äîïóñòèìîãî óðîâíÿ ñòîïà, îòêðîåòñÿ
//ïîêóïêà. Åñëè ëèíèÿ áûëà âûøå - îòêðîåòñÿ ñòîïîâûé îðäåð, íèæå - ëèìèòíûé.
//×òîáû çàêðûòü îðäåð, äîñòàòî÷íî ïîòÿíóòü ëþáóþ ëèíèþ, íî îòêðîåòñÿ äðóãîé îðäåð.
//Åñëè ïàðàìåòð NoStops ïîñòàâèòü â false, ïîÿâÿòñÿ ëèíèè ñòîïîâ è òåéêîâ, ò.å.
//Âû ñðàçó ñìîæåòå óñòàíîâèòü íåîáõîäèìûå ñòîïû è òåéêè â íîâîì îðäåðå.
//Åñëè Âàì êàêàÿ-íèáóäü ëèíèÿ íå íóæíà, âûäåëèòå åå è óäàëèòå, íî ïîìíèòå, ïðè
//óäàëåíèè óäàëÿòñÿ âñå âûäåëåííûå ëèíèè, ò.å., åñëè Âû çàáûëè, ÷òî ÷òî-òî åùå
//âûäåëèëè, òî îíî âñå ðàâíî óäàëèòñÿ.
//---- input parameters
extern double Lots=0.1;
extern bool NoStops=true;
double prbuy,prbuyt,prbuys,prsell,prsellt,prsells;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
drawline();//ðèñóåì ëèíèè
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("BUY"); //ïîä÷èùàåì õâîñòû
ObjectDelete("SELL");
ObjectDelete("BUYT");
ObjectDelete("SELLT");
ObjectDelete("BUYS");
ObjectDelete("SELLS");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells,stl,tpr;
int stlev=MarketInfo(Symbol(),MODE_STOPLEVEL);//óðîâåíü ñòîïëåâåë
int ticket;
if(ObjectFind("BUY")==-1&&ObjectFind("SELL")==-1)drawline();//åñëè ëèíèè ñòåðëèñü îò íàëîæåíèÿ øàáëîíà
nprbuy=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits);
if(ObjectFind("BUYT")!=-1)nprbuyt=NormalizeDouble(ObjectGet("BUYT",OBJPROP_PRICE1),Digits);
if(ObjectFind("BUYS")!=-1)nprbuys=NormalizeDouble(ObjectGet("BUYS",OBJPROP_PRICE1),Digits);
nprsell=NormalizeDouble(ObjectGet("SELL",OBJPROP_PRICE1),Digits);
if(ObjectFind("SELLT")!=-1)nprsellt=NormalizeDouble(ObjectGet("SELLT",OBJPROP_PRICE1),Digits);
if(ObjectFind("SELLS")!=-1)nprsells=NormalizeDouble(ObjectGet("SELLS",OBJPROP_PRICE1),Digits);
if(nprbuy==prbuy&&nprbuyt==prbuyt&&nprbuys==prbuys&&nprsell==prsell&&nprsellt==prsellt&&nprsells==prsells)return(0);//åñëè âñå êàê áûëî, óõîäèì
if(nprbuy!=prbuy||nprsell!=prsell)//åñëè äâèãàëè ëèíèè êóïëè èëè ïðîäàæè
{
if(OrdersTotal()>0)closeord();//ñíà÷àëà óäàëèì âñå îòêðûòûå îðäåðà
if(nprbuy!=prbuy)//äëÿ îðäåðîâ ïîêóïêè
{
if(nprbuyt-nprbuy<=stlev*Point||nprbuyt==0)tpr=0;
else tpr=nprbuyt;
if(nprbuy-nprbuys<=stlev*Point||nprbuys==0)stl=0;
else stl=nprbuys;
if(MathAbs(Bid-nprbuy)<=stlev*Point)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,stl,tpr);
if(ticket==-1) Print("ErrorBuy - ",GetLastError());
else
{
Print("PriceBuy - ",Ask," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
else if(Bid>nprbuy)
{
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,nprbuy,3,stl,tpr);
if(ticket==-1) Print("ErrorBuyLimit - ",GetLastError());
else
{
Print("PriceBuyLimit - ",nprbuy," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
else
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,nprbuy,3,stl,tpr);
if(ticket==-1) Print("ErrorBuySell - ",GetLastError());
else
{
Print("PriceBuyStop - ",nprbuy," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
}
else//äëÿ îðäåðîâ ïðîäàæè
{
if(nprsell-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
else tpr=nprsellt;
if(nprsells-nprsell<=stlev*Point||nprsells==0)stl=0;
else stl=nprsells;
if(MathAbs(Bid-nprsell)<=stlev*Point)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,stl,tpr);
if(ticket==-1) Print("ErrorSell - ",GetLastError());
else
{
Print("PriceSell - ",Bid," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
else if(Bid<nprsell)
{
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,nprsell,3,stl,tpr);
if(ticket==-1) Print("ErrorSellLimit - ",GetLastError());
else
{
Print("PriceSellLimit - ",nprsell," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
else
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,nprsell,3,stl,tpr);
if(ticket==-1) Print("ErrorSellStop - ",GetLastError());
else
{
Print("PriceSellStop - ",nprsell," Stop - ",stl," Take - ",tpr);
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
}
}
else//åñëè òîëüêî õîòåëè èçìåíèòü ñòîï è/èëè òåéê
{
if(OrdersTotal()==0)return(0);
OrderSelect(0, SELECT_BY_POS);
stl=OrderStopLoss();
tpr=OrderTakeProfit();
if((OrderType()==0)&&(nprbuyt!=prbuyt||nprbuys!=prbuys))
{
if(nprbuyt!=prbuyt)
{
if(nprbuyt-Bid<=stlev*Point||nprbuyt==0)tpr=0;
else tpr=nprbuyt;
}
if(nprbuys!=prbuys)
{
if(Bid-nprbuys<=stlev*Point||nprbuys==0)stl=0;
else stl=nprbuys;
}
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifyBuy - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);
else
{
Print("ModifyBuy, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
if((OrderType()==2||OrderType()==4)&&(nprbuyt!=prbuyt||nprbuys!=prbuys))
{
if(nprbuyt!=prbuyt)
{
if(nprbuyt-prbuy<=stlev*Point||nprbuyt==0)tpr=0;
else tpr=nprbuyt;
}
if(nprbuys!=prbuys)
{
if(prbuy-nprbuys<=stlev*Point||nprbuys==0)stl=0;
else stl=nprbuys;
}
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifyBuy - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);
else
{
Print("ModifyBuy, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
if((OrderType()==1)&&(nprsellt!=prsellt||nprsells!=prsells))
{
if(nprsellt!=prsellt)
{
if(Ask-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
else tpr=nprsellt;
}
if(nprsells!=prsells)
{
if(nprsells-Ask<=stlev*Point||nprsells==0)stl=0;
else stl=nprsells;
}
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifySell - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);
else
{
Print("ModifySell, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
if((OrderType()==3||OrderType()==5)&&(nprsellt!=prsellt||nprsells!=prsells))
{
if(nprsellt!=prsellt)
{
if(prsell-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
else tpr=nprsellt;
}
if(nprsells!=prsells)
{
Print("Hello");
if(nprsells-prsell<=stlev*Point||nprsells==0)stl=0;
else stl=nprsells;
}
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifySell - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);
else
{
Print("ModifySell, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
void closeord()//çàêðûòèå îðäåðîâ
{
OrderSelect(0, SELECT_BY_POS);
if(OrderType()==OP_BUY) // long position is opened
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
}
else if (OrderType()==OP_SELL)// go to short position
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
}
else OrderDelete(OrderTicket() );
return;
}
void equal(double nprbuy,double nprbuyt,double nprbuys,double nprsell,double nprsellt,double nprsells)
{
prbuy=nprbuy;
prbuyt=nprbuyt;
prbuys=nprbuys;
prsell=nprsell;
prsellt=nprsellt;
prsells=nprsells;
return;
}
void drawline()//ðèñîâàíèå ëèíèé
{
ObjectCreate("BUY",OBJ_HLINE,0,0,Bid+2*Period()*Point); //âûñòàâëÿåì íîâûå
ObjectSet("BUY",OBJPROP_COLOR,Aqua);
ObjectCreate("SELL",OBJ_HLINE,0,0,Bid-2*Period()*Point);
ObjectSet("SELL",OBJPROP_COLOR,Yellow);
prbuy=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits);
prsell=NormalizeDouble(ObjectGet("SELL",OBJPROP_PRICE1),Digits);
if(!NoStops)//ðèñîâàíèå ñòîïîâ è òåéêîâ
{
prbuyt=Bid+3*Period()*Point;
prbuys=Bid+Period()*Point;
prsellt=Bid-3*Period()*Point;
prsells=Bid-Period()*Point;
ObjectCreate("BUYT",OBJ_HLINE,0,0,prbuyt);
ObjectSet("BUYT",OBJPROP_COLOR,DarkTurquoise);
ObjectCreate("BUYS",OBJ_HLINE,0,0,prbuys);
ObjectSet("BUYS",OBJPROP_COLOR,MediumOrchid);
ObjectCreate("SELLT",OBJ_HLINE,0,0,prsellt);
ObjectSet("SELLT",OBJPROP_COLOR,Gold);
ObjectCreate("SELLS",OBJ_HLINE,0,0,prsells);
ObjectSet("SELLS",OBJPROP_COLOR,DeepPink);
}
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
---