Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
E-Skoch-Open_Ordera
#property copyright "Copyright © 2010, Õëûñòîâ Âëàäèìèð"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 1300, //óðîâåíü âûñòàâëåíèÿ SL, åñëè 0, òî SL íå âûñòàâëÿåòñÿ
takeprofit = 20000, //óðîâåíü âûñòàâëåíèÿ TP, åñëè 0, òî TP íå âûñòàâëÿåòñÿ
key = 0; //óíèêàëüíûé íîìåð îðäåðà
extern bool SELL = false, //îòêðûòü îðäåð SELL
BUY = false; //îòêðûòü îðäåð BUY
extern double lot = 0.01; //îáúåì îðäåðà
extern int slippage = 30; //Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ
extern double _percentProfit=1.2;///// - Ïðîôåöèò
//----------- Alen_T 2011 http://fxgeneral.com
extern bool Close_ON = false; //çàêðûòèå ïîçèöèè ïî îáðàòíîìó ñèãíàëó
extern int MaxBuyCount = 1; // Ìàêñ äîïóñòèìîå êîë. îòêðûòûõ îðäåðîâ áàé, -1 - íå íîãðàíè÷åíî
extern int MaxSellCount = 1; // Ìàêñ äîïóñòèìîå êîë. îòêðûòûõ îðäåðîâ ñåëë, -1 - íå îãðàíè÷åíî
//-----------
datetime BARflag = 0; //--Äëÿ ïîáàðîâîãî ðåæèìà
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
datetime now = Time[0];//--Äëÿ ïîáàðîâîãî ðåæèìà
if(BARflag >= now) return(0);//--Äëÿ ïîáàðîâîãî ðåæèìà
BARflag = now;//--Äëÿ ïîáàðîâîãî ðåæèìà
int nLots; //--Ìàê.îòê.îðäåðîâ
if(totalO(-1,key)==0) GlobalVariableSet(StringConcatenate(key," eq"),AccountEquity());//- % ïî "Òåêóùåå ýêâèòè "
Comment("Êîíòðîëüíîå ýêâèòè ",GlobalVariableGet(StringConcatenate(key," eq")),"\n",//- % ïî "Òåêóùåå ýêâèòè "
"Òåêóùåå ýêâèòè ",AccountEquity(),"\n", //- % ïî "Òåêóùåå ýêâèòè "
"Òåêóùèé ïðîöåíò ðîñòà Ýêâèòè ",100*(AccountEquity()-GlobalVariableGet(StringConcatenate(key," eq")))/GlobalVariableGet(StringConcatenate(key," eq"))," %");//- % ïî "Òåêóùåå ýêâèòè "
_CheckProfit();///// - Ïðîôåöèò- % ïî "Òåêóùåå ýêâèòè "
if ((Close[3]>Close[2]) && (Close[1]<Close[2])){
{
if(Close_ON) CloseOrders(OP_SELL, Ask, key);// --Ìàê.îòê.îðäåðîâ
nLots = ExistPositionsN(NULL,OP_BUY, key);// --Ìàê.îòê.îðäåðîâ
if(MaxSellCount != -1 && nLots >= MaxSellCount) return(0); //--Ìàê.îòê.îðäåðîâ
if (BUY)
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy");
}
}
if ((Close[3]>Close[2]) && (Close[2]<Close[1])){
{
if(Close_ON) CloseOrders(OP_BUY, Bid, key);// --Ìàê.îòê.îðäåðîâ
nLots = ExistPositionsN(NULL,OP_SELL, key);// --Ìàê.îòê.îðäåðîâ
if(MaxSellCount != -1 && nLots >= MaxSellCount) return(0);// --Ìàê.îòê.îðäåðîâ
if (SELL)
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell");
}
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, getlotlast(key),NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",key,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,getlotlast(key),NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",key,0,Red);
if (error==-1) //íåóäà÷íàÿ ïîêóïêà OK
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
return;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì ",Symbol());return;
case 3: Alert("Error íåïðàâèëüíûå ïàðàìåòðû ",Symbol());return;
case 130: Alert("Error áëèçêèå ñòîïû Ticket ",Symbol());return;
case 134: Alert("Íåäîñòàòî÷íî äåíåã ",Symbol());return;
case 146: Alert("Error Ïîäñèñòåìà òîðãîâëè çàíÿòà ",Symbol());return;
case 129: Alert("Error Íåïðàâèëüíàÿ öåíà ",Symbol());return;
case 131: Alert("Error Íåïðàâèëüíûé îáúåì ",Symbol());return;
case 4200:Alert("Error Îáúåêò óæå ñóùåñòâóåò ",Symbol());return;
default: Alert("Error " ,err," ",Symbol());return;
}
}
//----------------------------------------++++
//------ Åñëè ,, ëîñü,, òî + Ëîò ---------------------
//èùåì ïîñëåäíèé çàêðûòûé îáúåì
double getlotlast(int _key)
{
double _lot = lot ;
for(int i=OrdersHistoryTotal(); i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()) {
if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1){
if(OrderProfit()<0){
int kol=getLastType(_key)*(-1);
_lot=((kol-MathMod(kol,2))/2+1)*lot; // -- +1 ýòî + ËÎÒ
break;
}
if(OrderProfit()>=0) break;
}
}
}
return(_lot);
}
//êàêîé òèï îðäåðà çàêðûëñÿ ïîñëåäíèé è ñêîëüêî îðäåðîâ â ñåðèè
int getLastType(int _key)
{
int KolType=0;
int j=1;
for(int i=OrdersHistoryTotal() ; i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ) && OrderSymbol()==Symbol()) {
if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1) {
if(j==1 && OrderProfit()>=0)KolType++;
if(j==1 && OrderProfit()<0)KolType--;
if(j!=1 && OrderProfit()>=0 && KolType>0)KolType++;
if(j!=1 && OrderProfit()>=0 && KolType<0)break;
if(j!=1 && OrderProfit()<0 && KolType<0)KolType--;
if(j!=1 && OrderProfit()<0 && KolType>0)break;
j++;
}
}
}
return(KolType);
}
//+-------------------------- Ïðîôåöèò ---------------------------+
void _CheckProfit(){//- % ïî "Òåêóùåå ýêâèòè "
if (100*(AccountEquity()-GlobalVariableGet(StringConcatenate(key," eq")))/GlobalVariableGet(StringConcatenate(key," eq"))>=_percentProfit)
_OrderClose();//- % ïî "Òåêóùåå ýêâèòè "
return;//- % ïî "Òåêóùåå ýêâèòè "
}
//+--------------------------------+//- % ïî "Òåêóùåå ýêâèòè "
void _OrderClose(){
int i;
double _price=0.0;
_OrderDelete();
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()==Symbol()){
RefreshRates();
if (OrderType()==OP_SELL) _price=Ask;
if (OrderType()==OP_BUY) _price=Bid;
OrderClose(OrderTicket(),OrderLots(),_price,5,0);
}
}
}
}
return;
}
//+--------------------------------+//- % ïî "Òåêóùåå ýêâèòè "
void _OrderDelete(){//- % ïî "Òåêóùåå ýêâèòè "
int i;
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==Symbol()){
if (OrderType()>1 && OrderType()<6) OrderDelete(OrderTicket());
}
}
}
}
return;
}//- % ïî "Òåêóùåå ýêâèòè "
//+-----------------//- % ïî "Òåêóùåå ýêâèòè "------------------------+++
/*Ñ÷èòàåì êîëè÷åñòâî îðäåðîâ
âõîäÿùèå
int type (if -1 all type)
OP_BUY 0 Ïîêóïêà
OP_SELL 1 Ïðîäàæà
OP_BUYLIMIT 2 Îòëîæåííûé îðäåð BUY LIMIT
OP_SELLLIMIT 3 Îòëîæåííûé îðäåð SELL LIMIT
OP_BUYSTOP 4 Îòëîæåííûé îðäåð BUY STOP
OP_SELLSTOP 5 Îòëîæåííûé îðäåð SELL STOP
int _key MagicNumber
*/
int totalO(int type,int _key)
{
int TotalNumber = 0;
for(int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)||OrderSymbol() !=Symbol()|| OrderMagicNumber()!=_key) continue;
if (OrderType()==type||type==-1){
TotalNumber++;}
}
return(TotalNumber);
}
//+------------------- Êîíåö ôóíêöèè ----------------------------------+++
// ------- Îãðàíå÷åíèè îòêðûòûõ îðäåðîâ ----------
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Çàêðûòèå îòêðûòûõ îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| TipOrder - òèï îðäåðà ( OP_BUY || OP_SELL ) |
//| Price - óñòàíàâëèâàåìûé TP |
//| Magic - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
bool CloseOrders(int TipOrder, double Price, int mn=-1)
{
int Norder;
int total = OrdersTotal();
//---- ïîèñê äëèííîé îòêðûòîé ïîçèöèè
for(int cnt = total - 1; cnt >= 0; cnt--) // Ïåðåáèðàåì âñå îðäåðà
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);//îðäåð âûáèðàåòñÿ ñðåäè îòêðûòûõ è îòëîæåííûõ îðäåðîâ
if( OrderSymbol()==Symbol())// Ñîâïàäàåò ëè ñèìâîë îðäåðà( Çäåñü ïî íàäîáíîñòè åù¸ ìàãèê ìîæíî ïðîâåðèòü)
{
if(OrderType()==TipOrder)//Îòáèðàåì ïîçèöèþ áàé/ñåë
{
if (mn<0 || OrderMagicNumber()==mn)
{
if(TipOrder == OP_BUY) Price = NormalizeDouble(Bid,Digits);
if(TipOrder == OP_SELL) Price = NormalizeDouble(Ask,Digits);
Norder = OrderTicket();
OrderClose(OrderTicket(),OrderLots(),Price,3,Violet); //çàêðûâàåì îðäåð
Print("======= Óäàëåí îðäåð=",Norder);
//âðåìÿ çàäåðæêè
}
}
}
}
}
// ------- Îãðàíå÷åíèè îòêðûòûõ îðäåðîâ ----------
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) |
//+----------------------------------------------------------------------------+
int ExistPositionsN(string sy="", int op=-1, int mn=-1, datetime ot=0)
{
int i, k=OrdersTotal(), rez=0;
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()) rez = rez+1;
}
}
}
}
}
}
return(rez);
}
//------------------------------------------------------------------------------------------------------+
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
---