Orders Execution
1
Views
0
Downloads
0
Favorites
hammer_v1
#property copyright "Evgeny I. SHCHERBINA"
//hammer_vX.mq4
//01.12.2011
extern int magic = 789;
extern int risk = 1000;
extern int step = 2;
extern int trail = 4;
double buy, lot, sell;
int decimal = 1, trades;
int init(){
if(MarketInfo(Symbol(),MODE_DIGITS) == 3 || MarketInfo(Symbol(),MODE_DIGITS) == 5){decimal = 10;}
}
int start(){
bool m, cl;
if(trail*decimal < MarketInfo(Symbol(),MODE_STOPLEVEL)){trail = MarketInfo(Symbol(),MODE_STOPLEVEL);}
comments("magic",5,45,"Ìåéäæèê: "+magic+"; îòñòóï: "+step,Gold);
int i, orders;
for(i=0; i<OrdersTotal(); i++){
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber() == magic){
orders++;
if(ObjectGet("close_manual",OBJPROP_XDISTANCE) > 30){
if(OrderType() == OP_BUY){
cl = OrderClose(OrderTicket(),OrderLots(),Bid,3,0);
if(!cl){Print(GetLastError());}
}
else if(OrderType() == OP_SELL){
cl = OrderClose(OrderTicket(),OrderLots(),Ask,3,0);
if(!cl){Print(GetLastError());}
}
}
}
if(OrderComment() == "hammer"){
if(ObjectGet("trailing_stop",OBJPROP_XDISTANCE) > 30){
if(OrderType() == OP_BUY){
if(OrderStopLoss() == 0 && OrderOpenPrice() < NormalizeDouble(Bid-trail*decimal*Point,Digits)){
m = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
if(!m){Print(GetLastError());}
}
if(OrderStopLoss() < NormalizeDouble(Bid-trail*decimal*Point,Digits) && OrderOpenPrice() < NormalizeDouble(Bid-trail*decimal*Point,Digits)){
m = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
if(!m){Print(GetLastError());}
}
}else if(OrderType() == OP_SELL){
if(OrderStopLoss() == 0 && OrderOpenPrice() > NormalizeDouble(Ask+trail*decimal*Point,Digits)){
m = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
if(!m){Print(GetLastError());}
}
if(OrderStopLoss() > NormalizeDouble(Ask+trail*decimal*Point,Digits) && OrderOpenPrice() > NormalizeDouble(Ask+trail*decimal*Point,Digits)){
m = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
if(!m){Print(GetLastError());}
}
}
}
}
}
if(orders > trades){
trades = orders;
if(ObjectFind("level") != -1){ObjectDelete("level");}
buy = 0;
sell = 0;
}
if(orders < trades){
trades = orders;
if(ObjectFind("tp_hammer") != -1){ObjectDelete("tp_hammer");}
}
if(orders == 0){comments("close_manual",5,105,"Çàêðûòü ÂÛÊË.",Gold);}
lot = (MathFloor((AccountEquity()/risk/10)*100))/100;
lot = (MathFloor(lot/MarketInfo(Symbol(),MODE_LOTSTEP)))*MarketInfo(Symbol(),MODE_LOTSTEP);
if(lot < MarketInfo(Symbol(),MODE_MINLOT)){lot = MarketInfo(Symbol(),MODE_MINLOT);}
if(lot > MarketInfo(Symbol(),MODE_MAXLOT)){lot = MarketInfo(Symbol(),MODE_MAXLOT);}
if(ObjectGet("close_manual",OBJPROP_XDISTANCE) > 30){comments("close_manual",40,105,"Çàêðûòü ÂÊË.",Tomato);}
else{comments("close_manual",5,105,"Çàêðûòü ÂÛÊË.",Gold);}
if(ObjectGet("trailing_stop",OBJPROP_XDISTANCE) > 30){comments("trailing_stop",40,60,"Òðåéëèíã-ñòîï ÂÊË.",Tomato);}
else{comments("trailing_stop",5,60,"Òðåéëèíã-ñòîï ÂÛÊË.",Gold);}
comments("lot_risk_trail",5,15,"Ëîò: "+DoubleToStr(lot,2)+"; ðèñê: "+DoubleToStr(risk,0)+"; òðàë: "+DoubleToStr(trail,0),Gold);
check_level();
define_takeprofit();
send_order();
}
void check_level(){
if(ObjectFind("level") == -1 && trades == 0){
buy = 0; sell = 0;
ObjectCreate("level",OBJ_HLINE,0,0,Bid+30*decimal*Point);
ObjectSet("level",OBJPROP_COLOR,Gold);
ObjectSet("level",OBJPROP_STYLE,STYLE_DASHDOTDOT);
}
if(ObjectGet("sell",OBJPROP_XDISTANCE) > 30){
comments("sell",40,75,"Ïðîäàæà ÂÊË.",Tomato);
if(Close[0] >= ObjectGet("level",OBJPROP_PRICE1)){
sell = ObjectGet("level",OBJPROP_PRICE1);
ObjectSet("level",OBJPROP_PRICE1,sell+5*decimal*Point);
}
}else if(ObjectGet("sell",OBJPROP_XDISTANCE) < 30){
comments("sell",5,75,"Ïðîäàæà ÂÛÊË.",Gold);
}
if(ObjectGet("buy",OBJPROP_XDISTANCE) > 30){
comments("buy",40,90,"Ïîêóïêà ÂÊË.",Tomato);
if(Close[0] <= ObjectGet("level",OBJPROP_PRICE1)){
buy = ObjectGet("level",OBJPROP_PRICE1);
ObjectSet("level",OBJPROP_PRICE1,buy-5*decimal*Point);
}
}else if(ObjectGet("buy",OBJPROP_XDISTANCE) < 30){
comments("buy",5,90,"Ïîêóïêà ÂÛÊË.",Gold);
}
comments("buy_sell",5,30,"Áàé: "+DoubleToStr(buy,Digits)+"; ñåëë: "+DoubleToStr(sell,Digits),Gold);
}
void send_order(){
int ti;
if(ObjectGet("sell",OBJPROP_XDISTANCE) > 30 && ObjectGet("buy",OBJPROP_XDISTANCE) < 30 && lot != 0 && trades == 0){
if(sell != 0 && sell-step*decimal*Point > Close[0]){
ti = OrderSend(Symbol(),OP_SELL,lot,Bid,3,0,0,"hammer",magic,0,Red);
if(ti < 0){Print(GetLastError());}
}
}else if(ObjectGet("buy",OBJPROP_XDISTANCE) > 30 && ObjectGet("sell",OBJPROP_XDISTANCE) < 30 && lot != 0 && trades == 0){
if(buy != 0 && buy+step*decimal*Point < Close[0]){
ti = OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,"hammer",magic,0,Green);
if(ti < 0){Print(GetLastError());}
}
}
}
void define_takeprofit(){
bool m;
double tp;
for(int i=0; i<OrdersTotal(); i++){
OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber() == magic){
if(ObjectFind("tp_hammer") != -1){
if(OrderTakeProfit() != ObjectGet("tp_hammer",OBJPROP_PRICE1)){
m = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(ObjectGet("tp_hammer",OBJPROP_PRICE1),Digits),0,0);
if(!m){Print(GetLastError());}
}
}else if(ObjectFind("tp_hammer") == -1){
if(OrderType() == OP_SELL){tp = OrderOpenPrice()-40*decimal*Point;}
else if(OrderType() == OP_BUY){tp = OrderOpenPrice()+40*decimal*Point;}
ObjectCreate("tp_hammer",OBJ_HLINE,0,0,tp);
ObjectSet("tp_hammer",OBJPROP_COLOR,OrangeRed);
ObjectSet("tp_hammer",OBJPROP_STYLE,STYLE_DASHDOTDOT);
}
}
}
}
int comments(string name, int x, int y, string texto, color couleur){
if(ObjectFind(name) == -1){ObjectCreate(name,OBJ_LABEL,0,0,0);}
ObjectSet(name,OBJPROP_XDISTANCE,x);
ObjectSet(name,OBJPROP_YDISTANCE,y);
ObjectSet(name,OBJPROP_CORNER,1);
ObjectSetText(name,texto,10,"Times New Roman",couleur);
}
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
---