NewMartin_V1.1

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.1
ÿþ//+------------------------------------------------------------------+

//|                                               NewMartin_V1.0.mq4 |

//|                                          !5@359 urdala  0H52A:89 |

//|                                                   urdala@mail.ru |

//+------------------------------------------------------------------+

#property copyright "!5@359 urdala  0H52A:89"

#property link      "urdala@mail.ru"

#property version   "1.00"

#property strict

extern double Lot    = 0.1; //1J5< ?5@2>3> >@45@0

extern double TP     = 1;   //"59:?@>D8B 2 % >B F5=K

extern double SL     = 1;   //!B>?;>AA 2 % >B F5=K

extern double KefLot = 2.0; //>MDD8F85=B C25;8G5=8O ;>B0 2 A;CG05 C1KB:0

extern int    MaxNom = 5;   //0:A8<0;L=0O 4;8==0 A5@88 >@45@>2

extern int    Shema  = 0;   //!E5<0 @01>BK



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("!E5<0 @01>BK : ",StrShema);

   return(INIT_SUCCEEDED);

  }

//////////////////////////////////////////////////////////////////////

void OnDeinit(const int reason)

  {



  }

//////////////////////////////////////////////////////////////////////

void OnTick()

  {

//////////////////////////////////////////////////////////////////////

//?@>25@:0 =0 =0;8G85 >B:@KBKE >@45@>2

   int openord=OrdersTotal();

   if(openord>0){LastTime=Time[0];return;}

//////////////////////////////////////////////////////////////////////

//>?@545;O5< =0G0;> 10@0

   if(LastTime == Time[0])return;

   LastTime=Time[0];

//////////////////////////////////////////////////////////////////////

//0=0;878@C5< ?>A;54=89 >@45@ 2 8AB>@88

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

     {

      if(OrderProfit()>0)LastProf=1;

      else LastProf=-1;

     }

   else LastProf=0;

//////////////////////////////////////////////////////////////////////

//@0AAG8BK205< >1J5< 8 >B:@K205< >@45@

   int nom = 1;

   if(LastProf<0 && (int)OrderComment()<MaxNom)

     {

      int sh1 = StringFind(OrderComment(),"(");

      int sh2 = StringFind(OrderComment(),")");

      if(sh1>=0 && sh2>=0)

        {

         string stroka = StringSubstr(OrderComment(),sh1+1,sh2-sh1-1);

         nom = (int)stroka;

         if(nom < MaxNom)

           {

            Lots= NormalizeDouble(Lot*MathPow(KefLot,(int)nom),2);

            nom ++;

            com ="("+(string)nom+")";

           }

           else {Lots= Lot;com = "(1)";nom=1;}

        }

        else {Lots= Lot;com = "(1)";nom=1;}

     }

   else {Lots= Lot;com = "(1)";nom=1;}

   if(CheckNom(nom,Shema)==0)OpenOrder(Symbol(),OP_BUY,Lots,Ask,Ask-SL/100*Ask,Ask+TP/100*Ask,com,0);

   else OpenOrder(Symbol(),OP_SELL,Lots,Bid,Bid+SL/100*Bid,Bid-TP/100*Bid,com,0);

//////////////////////////////////////////////////////////////////////

  }

/////////////////////////////////////////////////////////////////////

/////////                 $C=:F88                   /////////////////

/////////////////////////////////////////////////////////////////////

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,"  ?@8 >B:@KB88 >@45@0.",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(),"  ?@8 70:@KB88 >@45@0.",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(),"  ?@8 <>48D8:0F88 >@45@0",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 ---