Author: Zuzabush
Orders Execution
It automatically opens orders when conditions are reachedIt Closes Orders by itself Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
Ambush
//+----------------------------------------------------------------------------+
//|                                                         Çàñàäà.mq4         |
//|                                                          Zuzabush          |
//|                                                  www.Zuzabush@yandex.ru    |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//|                                                                            |
//+----------------------------------------------------------------------------+
#property copyright "Zuzabush"
#property link      "www.Zuzabush@yandex"
 
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern bool  AllSymbols   = False;     // Óïðàâëÿòü âñåìè ñòîïîâûìè îðäåðàìè
extern int   Otstup  = 10;             // Íà÷àëüíàÿ äèñòàíöèÿ
extern int   TrailingStop = 10;        // Ôèêñèðîâàííûé ðàçìåð òðàëà îòë
extern int   TrailingStep = 1;         // Øàã òðàëà îòë
extern int   PK = 15;                  // Êîýô âèðò ïðîôèò
extern int   SK = 1;                   // Êîýô âèðò ñòîï
extern bool  UseSound     = True;      // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern bool  ShowComment  = True;      // Ïîêàçûâàòü êîììåíòàðèé
extern color clModifyBuy  = Aqua;      // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
extern color clModifySell = Tomato;    // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
 
 
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool   gbNoInit     = False;           // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
string SoundSuccess = "ok.wav";        // Çâóê óñïåõà
string SoundError   = "timeout.wav";   // Çâóê îøèáêè
int    NumberOfTry  = 3;               // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
double Take;
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>             // Ñòàíäàðòíàÿ áèáëèîòåêà
 
 
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  expert initialization function                                            |
//+----------------------------------------------------------------------------+
void init() {
  gbNoInit=False;
  if (!IsTradeAllowed()) {
    Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
    gbNoInit=True; return;
  }
  if (!IsLibrariesAllowed()) {
    Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
    gbNoInit=True; return;
  }
  if (!IsTesting()) {
    if (IsExpertEnabled()) Comment("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
    else Comment("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
  }
  start();
}
 
//+----------------------------------------------------------------------------+
//|  expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }
 
//+----------------------------------------------------------------------------+
//|  expert start function                                                     |
//+----------------------------------------------------------------------------+
void start() {
 
   bool   result;
   int    error;
   int Lots  ;
   int order;
   int KO = AccountBalance()/500; 
      
       Lots = KO ;
 
           if   (OrdersTotal()<1||((OrdersTotal()<2)&&(OrderType()==OP_BUYSTOP))) //åñëè , òî îòêðûâàåì
            order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",16384,0,Green);
            
                      if  ((OrderType()==OP_SELLSTOP)&&(OrdersTotal()<2))  //åñëè , òî îòêðûâàåì
       
            order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",16384,0,Green);
            
        
          
       if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         if (((AccountEquity()-AccountBalance())>KO*PK)||(AccountEquity()-AccountBalance())<-KO*SK )
     {   if(OrderType()==OP_BUY)    result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); 
          if(OrderType()==OP_SELL)  result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),30,CLR_NONE); 
          if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
           OrderDelete(OrderTicket());
 
          
           if(result!=TRUE) { error=GetLastError();
              Print("LastError = ",error, " ",Symbol()); }
           else error=0; }
   else Print( "Error when order select ", GetLastError());
  if (gbNoInit) {
    Comment("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
  }
  if (IsTesting()) {
    if (ShowComment) {
      Comment(IIFs(AllSymbols, "AllSymbols  ", "")
             ,"TrailingStop=", DoubleToStr(TrailingStop, 0), "ï.  "
             ,"TrailingStep=", DoubleToStr(TrailingStep, 0), "ï.  "
             ,IIFs(UseSound, "UseSound  ", "")
             );
    } else Comment("");
  }
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllSymbols || OrderSymbol()==Symbol()) {
        TrailingOrders();
      }
    }
  }
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 18.07.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
 
 
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
 
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  color  cl=IIFc(OrderType()==OP_BUY
              || OrderType()==OP_BUYLIMIT
              || OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
   
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm) {
        if (UseSound) PlaySound(SoundSuccess); break;
      } else {
        er=GetLastError();
        if (UseSound) PlaySound(SoundError);
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//|  Ñîïðîâîæäåíèå îðäåðîâ ïðîñòûì òðàëîì                                      |
//+----------------------------------------------------------------------------+
void TrailingOrders() {
  double di, pa, pb, pp, sl, tp;
 
  pp=MarketInfo(OrderSymbol(), MODE_POINT);
 
  if (OrderType()==OP_BUYSTOP) {
    pa=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderOpenPrice()-pa!=(TrailingStop+TrailingStep-1)*pp) {
      di=OrderOpenPrice()-pa-TrailingStop*pp;
 
        ModifyOrder(pa+TrailingStop*pp, sl, tp);
    }
  }
  if (OrderType()==OP_SELLSTOP) {
    pb=MarketInfo(OrderSymbol(), MODE_BID);
 
    if (pb-OrderOpenPrice()!=(TrailingStop+TrailingStep-1)*pp) {
      di=pb-OrderOpenPrice()-TrailingStop*pp;
 
     ModifyOrder(pb-TrailingStop*pp, sl, tp);
    }
  }
}
 
 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

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 ---