OsMaSter_V0

Author: Yuriy Tokman
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
Moving Average of Oscillator
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
OsMaSter_V0
//+------------------------------------------------------------------+
//|                                                  OsMaSter_V0.mq4 |
//|                                                     Yuriy Tokman |
//|                                            yuriytokman@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman"
#property link      "yuriytokman@gmail.com"

extern int    TF                 = 0;
extern int    fast_ema_period    = 9;
extern int    slow_ema_period    = 26;
extern int    signal_period      = 5;
extern int    applied_price      = 0;
extern int    shift_1            = 0;
extern int    shift_2            = 1;
extern int    shift_3            = 2;
extern int    shift_4            = 3;

extern double Lots               = 0.01;         // Ðàçìåð ëîòà
extern int    StopLoss           = 50;           // Ðàçìåð ñòîïà â ïóíêòàõ
extern int    TakeProfit         = 50;           // Ðàçìåð òåéêà â ïóíêòàõ
extern int    MagicNumber        = 20081975 ;    // ìàãè÷åñêîå ÷èñëî ñîâåòíèêà
extern int    Slippage           = 3;            // Ïðîñêàëüçûâàíèå öåíû
extern int    NumberOfTry        = 5;            // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê

bool   UseSound                  = True;         // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound             = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clOpenBuy                 = LightBlue;    // Öâåò çíà÷êà îòêðûòèÿ Buy
color  clOpenSell                = LightCoral;   // Öâåò çíà÷êà îòêðûòèÿ Sell


bool          gbDisabled         = False;        // Áëîêèðîâêà
#include <stdlib.mqh>                            // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 double sl = 0, tp = 0;

if(!ExistPositions(NULL,-1, MagicNumber))
  {
   if (GetSignal()==+1)
     {
      if (StopLoss  >0) sl=Ask-StopLoss*Point;   else sl=0;
      if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_BUY, Lots, sl, tp, MagicNumber);      
     }
   if (GetSignal()==-1)
     {
      if (StopLoss  >0) sl=Bid+StopLoss*Point;   else sl=0;
      if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_SELL, Lots, sl, tp, MagicNumber);      
     }      
  }   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 int GetSignal()
   {
    double Os_1=iOsMA(Symbol(),TF,fast_ema_period,slow_ema_period,signal_period,applied_price,shift_1);
    double Os_2=iOsMA(Symbol(),TF,fast_ema_period,slow_ema_period,signal_period,applied_price,shift_2);
    double Os_3=iOsMA(Symbol(),TF,fast_ema_period,slow_ema_period,signal_period,applied_price,shift_3);
    double Os_4=iOsMA(Symbol(),TF,fast_ema_period,slow_ema_period,signal_period,applied_price,shift_4);    

    int vSignal = 0;
    if(Os_4>Os_3 && Os_3<Os_2 && Os_2<Os_1) vSignal = 1;//up 
    else
    if(Os_4<Os_3 && Os_3>Os_2 && Os_2>Os_1) vSignal =-1;//down
    
    return (vSignal);
   }
//+----------------------------------------------------------------------------+
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");
  }
}
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
      // Âûâîä ñîîáùåíèÿ îá îøèáêå
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
}
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}   

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