InstantExecution

Author: Copyright 2015, @traderconfident
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
InstantExecution
//+------------------------------------------------------------------+
//|                                                    InstantExecution.mq4 |
//|                                 Copyright 2015, @traderconfident |
//|                            https://confident-trader.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, @traderconfident"
#property link      "https://confident-trader.blogspot.com"
#property version   "1.0"
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function  
                  
//+------------------------------------------------------------------+

extern string _Orders_ = " --- Set Order ---";
extern double Lots = 0.05; 
extern int StopLoss = 0;
extern int TakeProfit = 70;              
extern int TrailingStart = 5 ;  
extern int TrailingSize = 5 ;    
extern int MaxOrderAtOnceTime = 1;
extern int Slippage = 3;
extern int Magic = 90910;



double _sl, _tp, _pip;


int OnInit()
  {
    _pip = Point;
    if(Digits==3 || Digits==5) _pip = 10*Point;
    
//---
   ObjectCreate(0,"CloseButton",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"CloseButton",OBJPROP_XDISTANCE,10);
   ObjectSetInteger(0,"CloseButton",OBJPROP_YDISTANCE,15);
   ObjectSetInteger(0,"CloseButton",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"CloseButton",OBJPROP_YSIZE,25);
   
   ObjectSetString(0,"CloseButton",OBJPROP_TEXT,"Close Orders");
   
   ObjectSetInteger(0,"CloseButton",OBJPROP_COLOR, White);
   ObjectSetInteger(0,"CloseButton",OBJPROP_BGCOLOR, Red);
   ObjectSetInteger(0,"CloseButton",OBJPROP_BORDER_COLOR,Red);
   ObjectSetInteger(0,"CloseButton",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"CloseButton",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);
   ObjectSetInteger(0,"CloseButton",OBJPROP_FONTSIZE,12);
   
   //Exit
   ObjectCreate(0,"Exit",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Exit",OBJPROP_XDISTANCE,120);
   ObjectSetInteger(0,"Exit",OBJPROP_YDISTANCE,15);
   ObjectSetInteger(0,"Exit",OBJPROP_XSIZE,80);
   ObjectSetInteger(0,"Exit",OBJPROP_YSIZE,25);
   
   ObjectSetString(0,"Exit",OBJPROP_TEXT,"Exit");
   
   ObjectSetInteger(0,"Exit",OBJPROP_COLOR, White);
   ObjectSetInteger(0,"Exit",OBJPROP_BGCOLOR, Green);
   ObjectSetInteger(0,"Exit",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"Exit",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"Exit",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Exit",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Exit",OBJPROP_FONTSIZE,12);
   
   //Buy
   ObjectCreate(0,"Buy",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Buy",OBJPROP_XDISTANCE,210);
   ObjectSetInteger(0,"Buy",OBJPROP_YDISTANCE,15);
   ObjectSetInteger(0,"Buy",OBJPROP_XSIZE,50);
   ObjectSetInteger(0,"Buy",OBJPROP_YSIZE,25);
   
   ObjectSetString(0,"Buy",OBJPROP_TEXT,"Buy");
   
   ObjectSetInteger(0,"Buy",OBJPROP_COLOR, White);
   ObjectSetInteger(0,"Buy",OBJPROP_BGCOLOR, Blue);
   ObjectSetInteger(0,"Buy",OBJPROP_BORDER_COLOR,Blue);
   ObjectSetInteger(0,"Buy",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"Buy",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Buy",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Buy",OBJPROP_FONTSIZE,12);
   
   //Sell
   ObjectCreate(0,"Sell",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Sell",OBJPROP_XDISTANCE,270);
   ObjectSetInteger(0,"Sell",OBJPROP_YDISTANCE,15);
   ObjectSetInteger(0,"Sell",OBJPROP_XSIZE,50);
   ObjectSetInteger(0,"Sell",OBJPROP_YSIZE,25);
   
   ObjectSetString(0,"Sell",OBJPROP_TEXT,"Sell");
   
   ObjectSetInteger(0,"Sell",OBJPROP_COLOR, White);
   ObjectSetInteger(0,"Sell",OBJPROP_BGCOLOR, Gray);
   ObjectSetInteger(0,"Sell",OBJPROP_BORDER_COLOR,Gray);
   ObjectSetInteger(0,"Sell",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"Sell",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Sell",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Sell",OBJPROP_FONTSIZE,12);      
      
   //Closed at Profit
   ObjectCreate(0,"CloseAtProfit",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_XDISTANCE,330);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_YDISTANCE,15);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_YSIZE,25);
   
   ObjectSetString(0,"CloseAtProfit",OBJPROP_TEXT,"Close Profit");
   
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_COLOR, White);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_BGCOLOR, Green);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_STATE,false);
   ObjectSetInteger(0,"CloseAtProfit",OBJPROP_FONTSIZE,12);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//void OnTick(){}
//+------------------------------------------------------------------+

int start(){  
  
   Trailing();
   return(0);
}

//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  { 
      int _ticket = 0;
      if(sparam=="CloseButton") // Close button has been pressed
      {
            int total = OrdersTotal();
            int i = 0;
            for (i = total ; i >=0 ; i--)
            {
               if(OrderSelect(i,SELECT_BY_POS) &&  OrderSymbol()==Symbol())
               {
                  //OrderSelect(i,SELECT_BY_POS);
                  if(OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL)){
                     _ticket = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),5);
                     _ticket = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),5);
                  }
               }
            }
            if(_ticket>0){
               ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);
               ObjectsDeleteAll();
               ExpertRemove();
            }

      }
      if (sparam=="Exit"){
         ObjectSetInteger(0,"Exit",OBJPROP_STATE,false);
         ObjectsDeleteAll();
         ExpertRemove();
      } 
      if (sparam=="Buy"){
         ObjectSetInteger(0,"Buy",OBJPROP_STATE,false);
         _ticket = Order("BUY");
      } 
      if (sparam=="Sell"){
         ObjectSetInteger(0,"Sell",OBJPROP_STATE,false);
         _ticket = Order("SELL");
      } 
      if (sparam=="CloseAtProfit"){
         ObjectSetInteger(0,"CloseAtProfit",OBJPROP_STATE,false);
         CloseAtProfit();
      }     
  }
//+------------------------------------------------------------------+

void Trailing(){
   int ticket=0;
   for(int cnt=0;cnt<OrdersTotal();cnt++) {
      ticket = OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     
        {
         if(OrderType()==OP_BUY)
           {
            if((TakeProfit>0 && Bid-OrderOpenPrice()>=TakeProfit*_pip) || (StopLoss>0 && OrderOpenPrice()-Ask>StopLoss*_pip))
              {
               ticket = OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
              }
 //Trail  
            if(TrailingStart>0){
               if(Bid-OrderOpenPrice()>TrailingStart*_pip){
                  if(OrderStopLoss()<Bid -(TrailingSize+1)*_pip){
                     ticket = OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingSize*_pip,OrderTakeProfit(),0,Violet);
                  }
               }
            }
           }
         if(OrderType()==OP_SELL)
           {
            if((TakeProfit>0 && OrderOpenPrice()-Ask>=TakeProfit*_pip) || (StopLoss>0 && Bid-OrderOpenPrice()>StopLoss*_pip))
              {
               ticket = OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet); 
              }
            //Trail  
            if(TrailingStart>0){        
               if(OrderOpenPrice()-Ask>TrailingStart*_pip){
                  if(OrderStopLoss()>Ask+(TrailingSize+1)*_pip || OrderStopLoss()==0){
                     ticket = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingSize*_pip,OrderTakeProfit(),0,Violet);
                  }
               }                   
            }
           }
        }
    }
}


void CloseAtProfit(){
   int ticket=0;
   RefreshRates();
   for(int cnt=0;cnt<OrdersTotal();cnt++) {
      ticket = OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid>OrderOpenPrice()) {
         ticket = OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
      }
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderOpenPrice()>Ask) {
         ticket = OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);       
      }
   }
}

int Order(string _Order) {
   int i, ticket = 0;
   _sl = 0.0;
   _tp = 0.0;
   if(_Order=="BUY"){
      for (i=0; i<MaxOrderAtOnceTime; i++) {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,_sl,_tp,"",Magic,0,Blue);                            
      }
   }else {
      for (i=0; i<MaxOrderAtOnceTime; i++) {
        ticket =  OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,_sl,_tp,"",Magic,0,Red);
      }          
   }
   
   return(ticket);
}


Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---