NewMartin_V1.0

Author: ������ urdala ���������
Orders Execution
Checks for the total of open ordersChecks for the total of closed ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
NewMartin_V1.0
//+------------------------------------------------------------------+
//|                                               NewMartin_V1.0.mq4 |
//|                                          Ñåðãåé urdala Ðàøåâñêèé |
//|                                                   urdala@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Ñåðãåé urdala Ðàøåâñêèé"
#property link      "urdala@mail.ru"
#property version   "1.00"
#property strict
extern double Lot    = 0.1; //Îáúåì ïåðâîãî îðäåðà
extern double TP     = 1;   //Òåéêïðîôèò â % îò öåíû
extern double SL     = 1;   //Ñòîïëîññ â % îò öåíû
extern double KefLot = 2.0; //Êîýôôèöèåíò óâåëè÷åíèÿ ëîòà â ñëó÷àå óáûòêà
extern int    MaxNom = 5;   //Ìàêñèìàëüíàÿ äëèííà ñåðèè îðäåðîâ
extern int    Shema  = 0;   //Ñõåìà ðàáîòû

int i=0;
int LastProf = 0;
int Slippage = 1;
bool chk;
double Lots;
string com;
datetime LastTime,LastUpd;
string StrShema="";
//////////////////////////////////////////////////////////////////////
int OnInit()
  {
   LastTime = 0;
   LastUpd  = 0;
   for(i=1;i<=MaxNom;i++)
     {
      StrShema=StrShema+"-"+(string)CheckNom(i,Shema);
     }
   Print("Ñõåìà ðàáîòû : ",StrShema);
   return(INIT_SUCCEEDED);
  }
//////////////////////////////////////////////////////////////////////
void OnDeinit(const int reason)
  {

  }
//////////////////////////////////////////////////////////////////////
void OnTick()
  {
//////////////////////////////////////////////////////////////////////
//ïðîâåðêà íà íàëè÷èå îòêðûòûõ îðäåðîâ
   int openord=OrdersTotal();
   if(openord>0){LastTime=Time[0];return;}
//////////////////////////////////////////////////////////////////////
//îïðåäåëÿåì íà÷àëî áàðà
   if(LastTime == Time[0])return;
   LastTime=Time[0];
//////////////////////////////////////////////////////////////////////
//àíàëèçèðóåì ïîñëåäíèé îðäåð â èñòîðèè
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)LastProf=1;
      else LastProf=-1;
     }
   else LastProf=0;
//////////////////////////////////////////////////////////////////////
//ðàññ÷èòûâàåì îáúåì è îòêðûâàåì îðäåð
   if(LastProf<0 && (int)OrderComment()<MaxNom)
     {
      Lots= NormalizeDouble(Lot*MathPow(KefLot,(int)OrderComment()),2);
      com =(string)((int)OrderComment()+1);
     }
   else
     {
      Lots= Lot;
      com = "1";
     }
   if(CheckNom((int)com,Shema)==0)OpenOrder(Symbol(),OP_BUY,Lots,Ask,Ask-SL/100*Ask,Ask+TP/100*Ask,com,1);
   else OpenOrder(Symbol(),OP_SELL,Lots,Bid,Bid+SL/100*Bid,Bid-TP/100*Bid,com,1);
//////////////////////////////////////////////////////////////////////
  }
/////////////////////////////////////////////////////////////////////
/////////                 Ôóíêöèè                   /////////////////
/////////////////////////////////////////////////////////////////////
int CheckNom(int nom,int shema)
  {
   int a = nom;
   int b = shema >> (a-1);
   int c = b & 1;
   return(c);
  }
//////////////////////////////////////////////////////////////////////
int OpenOrder(string symb,int cmd,double lot,double price,double stoploss,double takeprofit,string comf,int magic)
  {
   if(AccountFreeMarginCheck(Symbol(),cmd,lot)<=0)return(0);
   int err=0,f=0,ticket=0;
   color clr=CLR_NONE;
   while(f<10)
     {
      RefreshRates();
      if(cmd==0){price=MarketInfo(symb,MODE_ASK);clr=RoyalBlue;}
      if(cmd==1){price=MarketInfo(symb,MODE_BID);clr=Red;}
      ticket=OrderSend(symb,cmd,lot,NormalizeDouble(price,Digits),Slippage,0,0,comf,magic,0,clr);
      err=GetLastError();
      if(err==0) break;
      Print(WindowExpertName(),symb,"  ïðè îòêðûòèè îðäåðà.",err);
      f++;
      Sleep(1000);
     }
   if(ticket>0 && (takeprofit!=0 || stoploss!=0))
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET))ModifyOrder(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit);
     }
   return(ticket);
  }
/////////////////////////////////////////////////////////////////////////
int CloseOrder(int ticket,double lots)
  {
   int err=0,f=0;
   double price=0;
   if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))return(0);
   if(lots==0)lots=OrderLots();
   if(lots<MarketInfo(OrderSymbol(),MODE_MINLOT))lots=MarketInfo(OrderSymbol(),MODE_MINLOT);
   while(f<10)
     {
      RefreshRates();
      if(OrderType()==0)price=Bid;
      if(OrderType()==1)price=Ask;
      if(OrderType()>1){chk=OrderDelete(ticket);return(0);}
      chk = OrderClose(ticket,lots,NormalizeDouble(price,Digits),Slippage,Goldenrod);
      err = GetLastError();
      if(err==0) break;
      Print(WindowExpertName(),OrderSymbol(),"  ïðè çàêðûòèè îðäåðà.",err);
      f++;
      Sleep(1000);
     }
   return(0);
  }
/////////////////////////////////////////////////////////////////////////
int ModifyOrder(int ticket,double price,double stoploss,double takeprofit)
  {
   int err,f=0;
   while(f<10)
     {
      RefreshRates();
      chk = OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE);
      err = GetLastError();
      if(err==0) break;
      Print(WindowExpertName(),OrderSymbol(),"  ïðè ìîäèôèêàöèè îðäåðà",err);
      Sleep(1000);
      f++;
     }
   return(0);
  }
//////////////////////////////////////////////////////////////////////////

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