Orders Execution
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---