Orders Execution
0
Views
0
Downloads
0
Favorites
Trailing_By_Object_v1_2
//+------------------------------------------------------------------+
//| Trailing_By_Object.mq4 |
//| Copyright © Evgeniy Trofimov, 2010 |
//| http://vkontakte.ru/id5374887/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © Evgeniy Trofimov, 2009"
#property link "http://www.mql4.com/ru/users/EvgeTrofi"
extern int Ticket = 0; // - Íîìåð ïîçèöèè, êîòîðóþ íóæíî ìîäèôèöèðîâàòü. Åñëè 1, òî âñå ïîçèöèè ïî òåêóùåìó èíñòðóìåíòó
extern string NameObject = ""; // - Íàèìåíîâàíèå ëèíèè, íà ãðàôèêå öåíû, ïî êîòîðîé ñêîëüçèì StopLoss èëè îòëîæåííûé îðäåð
extern int SleepPage = 30; // - Òî÷íîñòü çàêðûòèÿ ïîçèöèè â ïóíêòàõ
extern int SparePips = 50; // - Çàïàñ â ïóíêòàõ - ðàññòîÿíèå íà êîòîðîå îðäåð ñðàáîòàåò ïîçäíåå
extern bool CloseExtern = true; // - Çàêðûâàòü îòêðûòóþ ïîçèöèþ ñðàçó ïîñëå ïåðåñå÷åíèÿ ëèíèè
extern bool OunlyOrders = false; // - Ñîâåòíèê ðàáîòàåò òîëüêî íà îòëîæåííûå îðäåðà (Sell Stop èëè Buy Stop)
extern bool TrailingTP = false; // - Äâèãàòü TakeProfit â îòëîæåííûõ îðäåðàõ
double Spare;
//+------------------------------------------------------------------+
int start() {
int x1,x2;
double y1,y2, Price;
string txt;
int positions[], j;
if(ObjectFind(NameObject)==0) {//Îáúåêò â îêíå ãðàôèêà öåíû
x1=GetBar(ObjectGet(NameObject,OBJPROP_TIME1));
y1=ObjectGet(NameObject,OBJPROP_PRICE1);
x2=GetBar(ObjectGet(NameObject,OBJPROP_TIME2));
y2=ObjectGet(NameObject,OBJPROP_PRICE2);
Price = y2-(x2-0)*(y2-y1)/(x2-x1);
if(Ticket==0){
txt="";
}else if(Ticket==1){
txt="\nAll tickets";
for (int i = 0; i < OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()){
ArrayResize(positions, j+1);
positions[j]=OrderTicket();
j++;
}
}
}//Next i
for(i=0; i<j; i++){
Move(positions[i], Price);
}//Next i
}else{
txt="\nTicket = "+Ticket;
if(OrderExist(Symbol(), Ticket)) {
Move(Ticket, Price);
} else {
txt="\nTicket "+Ticket+" not found";
}
}
Comment("Price = "+DoubleToStr(Price, Digits)+txt);
} else {
Comment("Object not found");
}
return(0);
}//start()
//+------------------------------------------------------------------+
int init(){
Spare=SparePips*Point;
}//init()
//+------------------------------------------------------------------+
int deinit(){
Comment("");
}//deinit()
//+------------------------------------------------------------------+
int Move(int myTicket, double Price) {
double Spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
double Delta, tp, sl;
if(OrderSelect(myTicket,SELECT_BY_TICKET)) {
switch(OrderType()) {
case OP_BUY:
if(OunlyOrders==false){
if(Price<Bid-StopLevel){
if(Price>OrderStopLoss()+Spare){
if(IsTradeAllowed()){
OrderModify(myTicket, OrderOpenPrice(), NormalizeDouble(Price-Spare, Digits), OrderTakeProfit(), 0);
}
}
}
if(CloseExtern){
if(Price-Spare>Bid) {
if(IsTradeAllowed()) {
OrderClose(myTicket, OrderLots(), MarketInfo(Symbol(),MODE_BID), SleepPage);
}
}
}
}
case OP_SELL:
if(OunlyOrders==false){
if(Price>Ask+StopLevel){
if(OrderStopLoss()>Price+Spread+Spare) {
if(IsTradeAllowed()) {
OrderModify(myTicket, OrderOpenPrice(), NormalizeDouble(Price+Spread+Spare, Digits),
OrderTakeProfit(), 0);
}
}
}
if(CloseExtern){
if(Bid>Price+Spare){
if(IsTradeAllowed()){
OrderClose(myTicket, OrderLots(), MarketInfo(Symbol(),MODE_ASK), SleepPage);
}
}
}
}
case OP_BUYSTOP:
if(Price>Ask+StopLevel){
if(OrderOpenPrice()>Price+Spread+Spare) {
Delta=OrderOpenPrice()-(Price+Spread+Spare);
if(Delta>NormalizeDouble(SleepPage*Point,Digits)){
if(IsTradeAllowed()){
Print("Ïîïûòêà ìîäèôèêàöèè îðäåðà "+myTicket+" íà öåíó "+DoubleToStr(OrderOpenPrice()-Delta, Digits));
if(OrderTakeProfit()>0)
if(TrailingTP)
tp=NormalizeDouble(OrderTakeProfit()-Delta, Digits);
else
tp=OrderTakeProfit();
else
tp=0;
if(OrderStopLoss()>0)
sl=NormalizeDouble(OrderStopLoss()-Delta, Digits);
else
sl=0;
OrderModify(myTicket, NormalizeDouble(OrderOpenPrice()-Delta, Digits), sl, tp, 0);
}
}
}
}
case OP_SELLSTOP:
if(Price<Bid-StopLevel){
if(OrderOpenPrice()<Price-Spare){
Delta=(Price-Spare)-OrderOpenPrice();
if(Delta>NormalizeDouble(SleepPage*Point,Digits)){
if(IsTradeAllowed()){
Print("Ïîïûòêà ìîäèôèêàöèè îðäåðà "+myTicket+" íà öåíó "+DoubleToStr(OrderOpenPrice()+Delta, Digits));
if(OrderTakeProfit()>0)
if(TrailingTP)
tp=NormalizeDouble(OrderTakeProfit()+Delta, Digits);
else
tp=OrderTakeProfit();
else
tp=0;
if(OrderStopLoss()>0)
sl=NormalizeDouble(OrderStopLoss()+Delta, Digits);
else
sl=0;
OrderModify(myTicket, NormalizeDouble(OrderOpenPrice()+Delta, Digits), sl, tp, 0);
}
}
}
}
}
}
}//Move()
//+------------------------------------------------------------------+
bool OrderExist(string fSymbol="", int fTicket=0) {
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==fSymbol || fSymbol=="") {
if(OrderTicket()==fTicket) {
return(true);
}
} // Åñëè ñâîé
} // Next i
return(false);
}//OrderExist()
//+------------------------------------------------------------------+
int GetBar(datetime TimeBar, int start=0){
for(int i=start; i<Bars; i++){
if(Time[i]<TimeBar){
return(i);
}
}
}//GetBar()
//+------------------------------------------------------------------+
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
---