Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Split_f2k
//+------------------------------------------------------------------+
//| Copyright © 2011, Vladimir Hlystov |
//| Çàêðûâàåò âñå îðäåðà ïðè îïðåäåëåííîì ïðîôèòå |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, http://cmillion.narod.ru"
#property link "cmillion@narod.ru"
extern string b = "Ïàðàìåòðû ñêðèïòà";
#property show_inputs
//--------------------------------------------------------------------
extern datetime TimeSet = D'2011.12.10 17:47'; //Âðåìÿ âûñòàâëåíèÿ îðäåðîâ, åñëè òåêóùåå âðåìÿ áîëüøå óñòàíîâëåííîãî, òî âûñòàâëÿþòñÿ ñðàçó
extern bool Stop = true; //îòêðûòü ñòîï îðäåðà
extern bool Limit = false; //îòêðûòü ëèìèòíûå îðäåðà
extern bool SELL = true; //îòêðûòü îðäåðà SELL
extern bool BUY = true; //îòêðûòü îðäåðà BUY
extern string __ = "";
extern double FirstBuyStop = 0; //öåíà âûñòàâëåíèÿ ïåðâîãî BuyStop îðäåðà, åñëè 0 òî ïåðâûé BuyStop áóäåò âûñòàâëåí ïî öåíå Ask+delta
extern double FirstSellStop = 0; //öåíà âûñòàâëåíèÿ ïåðâîãî SellStop îðäåðà, åñëè 0 òî ïåðâûé SellStop áóäåò âûñòàâëåí ïî öåíå Bid-delta
extern double FirstBuyLimit = 0; //öåíà âûñòàâëåíèÿ ïåðâîãî BuyLimit îðäåðà, åñëè 0 òî ïåðâûé BuyLimit áóäåò âûñòàâëåí ïî öåíå Bid-delta
extern double FirstSellLimit = 0; //öåíà âûñòàâëåíèÿ ïåðâîãî SellLimit îðäåðà, åñëè 0 òî ïåðâûé SellLimit áóäåò âûñòàâëåí ïî öåíå Ask+delta
extern int FirstStop = 50; //ðàññòîÿíèå (â ïóíêòàõ) îò òåêóùåé öåíû äî ïåðâîãî Stop îðäåðà â ñëó÷àå First..Stop=0
extern int FirstLimit = 0; //ðàññòîÿíèå (â ïóíêòàõ) îò òåêóùåé öåíû äî ïåðâîãî Limit îðäåðà â ñëó÷àå First..Limit=0
extern int StepStop = 50; //ðàññòîÿíèå (â ïóíêòàõ) ìåæäó Stop îðäåðàìè
extern int StepLimit = 0; //ðàññòîÿíèå (â ïóíêòàõ) ìåæäó Limit îðäåðàìè
extern string _ = "";
extern int Orders = 15; //êîë-âî îðäåðîâ ñåòêè
extern double LotStop = 0.01; //îáúåì ïåðâîãî Stop îðäåðà
extern double K_LotStop = 1.2; //óìíîæåíèå ëîòà Stop îðäåðîâ
extern double LotLimit = 0.01; //îáúåì ïåðâîãî Limit îðäåðà
extern double K_LotLimit = 1.2; //óìíîæåíèå ëîòà Limit îðäåðîâ
extern int stoploss = 0; //óðîâåíü âûñòàâëåíèÿ SL, åñëè 0, òî SL íå âûñòàâëÿåòñÿ
extern int takeprofit = 0; //óðîâåíü âûñòàâëåíèÿ TP, åñëè 0, òî TP íå âûñòàâëÿåòñÿ
extern int Expiration = 1440; //Ñðîê èñòå÷åíèÿ îòëîæåííîãî îðäåðà â ìèíóòàõ, åñëè 0, òî ñðîê íå îãðàíè÷åí (1440 - ñóòêè)
extern int attempts = 10; //êîë-âî ïîïûòîê îòêðûòèÿ îðäåðà
extern int Magic = 0; //óíèêàëüíûé íîìåð îðäåðà
//--------------------------------------------------------------------
string txt;
int n,slippage=3,STOPLEVEL;
datetime expiration;
extern string a = "Ïàðàìåòðû ñîâåòíèêà";
//-------------------------------------------------------------------
extern double ProfitClose = 10; //çàêðûâàòü âñå îðäåðà ïðè ïîëó÷åíèè ïðîôèòà
extern double LossClose = 1000; //çàêðûâàòü âñå îðäåðà ïðè ïîëó÷åíèè óáûòêà
extern bool AllSymbol = false;//ó÷èòûâàòü âñå èíñòðóìåíòû èëè òîëüêî òîò, íà êîòîðîì ñòîèò ñîâåòíèê
//-------------------------------------------------------------------
string _txt;
int init()
{
ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
ObjectSet("Balance", OBJPROP_CORNER, 1);
ObjectSet("Balance", OBJPROP_XDISTANCE, 5);
ObjectSet("Balance", OBJPROP_YDISTANCE, 15);
ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
ObjectSet("Equity", OBJPROP_CORNER, 1);
ObjectSet("Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Equity", OBJPROP_YDISTANCE, 25);
ObjectCreate("Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Profit", OBJPROP_CORNER, 1);
ObjectSet("Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Profit", OBJPROP_YDISTANCE, 35);
ObjectCreate("Copyright", OBJ_LABEL, 0, 0, 0);
ObjectSet("Copyright", OBJPROP_CORNER, 3);
ObjectSet("Copyright", OBJPROP_XDISTANCE, 5);
ObjectSet("Copyright", OBJPROP_YDISTANCE, 5);
ObjectSetText("Copyright","CloseProfit Copyright © 2011, http://cmillion.narod.ru\n",8,"Arial",Gold);
if (AllSymbol) _txt = "Ïî âñåì èíñòðóìåíòàì ñ÷åòà";
return(0);
}
//-------------------------------------------------------------------
int deinit()
{
ObjectDelete("Balance");
ObjectDelete("Equity");
ObjectDelete("Profit");
ObjectDelete("Copyright");
return(0);
}
//-------------------------------------------------------------------
int start()
{
if(OrdersTotal()==0)
{
script();
}
double Profit;
int b,s,OT;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() || AllSymbol)
{
OT = OrderType();
if (OT==OP_BUY)
{
b++;
Profit+=OrderProfit();
}
if (OT==OP_SELL)
{
s++;
Profit+=OrderProfit();
}
}
}
}
Comment(_txt,"\nBuy ",b,"\nSell ",s);
//---
if (Profit>=ProfitClose)
{
Alert("Äîñòèãíóò óðîâåíü ïðîôèòà = "+DoubleToStr(Profit,2));
CloseAll();
}
if (Profit<=-LossClose)
{
Alert("Äîñòèãíóò óðîâåíü ìàêñèìàëüíîãî óáûòêà "+DoubleToStr(Profit,2));
CloseAll();
}
ObjectSetText("Balance",StringConcatenate("Balance ",DoubleToStr(AccountBalance(),2)),12,"Arial",Gold);
ObjectSetText("Equity",StringConcatenate("Equity ",DoubleToStr(AccountEquity(),2)),12,"Arial",Gold);
if (AllSymbol) ObjectSetText("Profit",StringConcatenate("Profit All Symbol ",DoubleToStr(Profit,2)),12,"Arial",Color(Profit));
else ObjectSetText("Profit",StringConcatenate("Profit ",DoubleToStr(Profit,2)),12,"Arial",Color(Profit));
return;
}
//------------------------------------------------------------------
color Color(double P)
{
if (P>0) return(Gold);
if (P<0) return(Red);
if (P==0) return(Green);
}
//------------------------------------------------------------------
bool CloseAll()
{
bool error=true;
int err,nn,OT;
string Symb;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
Symb = OrderSymbol();
if (Symb == Symbol() || AllSymbol)
{
OT = OrderType();
if (OT>1)
{
OrderDelete(OrderTicket());
}
if (OT==OP_BUY)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_BID),MarketInfo(Symb,MODE_DIGITS)),3,Blue);
if (error) Alert(Symb," Çàêðûò îðäåð N ",OrderTicket()," ïðèáûëü ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (OT==OP_SELL)
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_ASK),MarketInfo(Symb,MODE_DIGITS)),3,Red);
if (error) Alert(Symb," Çàêðûò îðäåð N ",OrderTicket()," ïðèáûëü ",OrderProfit(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
if (!error)
{
err = GetLastError();
if (err<2) continue;
if (err==129)
{ Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_MINUTES));
Sleep(5000);
RefreshRates();
continue;
}
if (err==146)
{
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",OrderTicket(),
" ",TimeToStr(TimeCurrent(),TIME_MINUTES));
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol() || AllSymbol)
{
OT = OrderType();
if (OT==OP_BUY || OT==OP_SELL) n++;
}
}
}
if (n==0) break;
nn++;
if (nn>10) {Alert(Symb," Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);return(0);}
Sleep(1000);
RefreshRates();
}
return(1);
}
//--------------------------------------------------------------------
int script()
{
//===========================================================================================================================================
//===========================================================================================================================================
//===========================================================================================================================================
/*============================================*/if (IsTesting() && OrdersTotal()>0) return;/*===============================================*/
//===========================================================================================================================================
//===========================================================================================================================================
//===========================================================================================================================================
if (Expiration>0) expiration=TimeCurrent()+Expiration*60; else expiration=0;
Comment("Çàïóñê ñêðèïòà OpenStopOrderNetTime ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Digits==3 || Digits==5) slippage=30;
while (TimeCurrent()<TimeSet)
{
Sleep(1000);
Comment("Ñêðèïò âûñòàâëåíèÿ ñåòêè îòëîæåííûõ îðäåðîâ Copyright © 2011 cmillion@narod.ru\n",
TimeToStr(TimeCurrent(),TIME_SECONDS)," Äî âûñòàâëåíèÿ ñåòêè îñòàëîñü ",TimeToStr(TimeSet-TimeCurrent(),TIME_SECONDS));
RefreshRates();
}
double PriceBS,PriceBL,PriceSS,PriceSL;
double LOTs=LotStop;
double LOTl=LotLimit;
if (FirstBuyStop==0) PriceBS = NormalizeDouble(Ask+FirstStop*Point,Digits);
else PriceBS = NormalizeDouble(FirstBuyStop,Digits);
if ((PriceBS-Ask)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð BuyStop íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
if (FirstSellStop==0) PriceSS = NormalizeDouble(Bid-FirstStop*Point,Digits);
else PriceSS = NormalizeDouble(FirstSellStop,Digits);
if ((Bid-PriceSS)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð SellStop íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
if (FirstBuyLimit==0) PriceBL = NormalizeDouble(Bid-FirstLimit*Point,Digits);
else PriceBL = NormalizeDouble(FirstBuyLimit,Digits);
if ((Bid-PriceBL)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð BuyLimit íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
if (FirstSellLimit==0) PriceSL = NormalizeDouble(Ask+FirstLimit*Point,Digits);
else PriceSL = NormalizeDouble(FirstSellLimit,Digits);
if ((PriceSL-Ask)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð SellLimit íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
for (int i=1; i<=Orders; i++)
{
if (Stop)
{
if (BUY)
{
OPENORDER (OP_BUYSTOP,PriceBS,LOTs,i);
PriceBS = NormalizeDouble(PriceBS+StepStop*Point,Digits);
}
if (SELL)
{
OPENORDER (OP_SELLSTOP,PriceSS,LOTs,i);
PriceSS = NormalizeDouble(PriceSS-StepStop*Point,Digits);
}
}
LOTs=LOTs*K_LotStop;
if (Limit)
{
if (BUY)
{
OPENORDER (OP_BUYLIMIT,PriceBL,LOTl,i);
PriceBL = NormalizeDouble(PriceBL-StepLimit*Point,Digits);
}
if (SELL)
{
OPENORDER (OP_SELLLIMIT,PriceSL,LOTl,i);
PriceSL = NormalizeDouble(PriceSL+StepLimit*Point,Digits);
}
}
LOTl=LOTl*K_LotLimit;
}
Comment("Ñêðèïò çàêîí÷èë ñâîþ ðàáîòó, âûñòàâëåíî ",n," îðäåðîâ ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(int ord,double Price,double LOT,int i)
{
int error,err;
double SL,TP;
while (true)
{ error=true;
if (ord==OP_BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;
error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Blue);
}
if (ord==OP_SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0;
error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Red);
}
if (ord==OP_SELLLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price + stoploss*Point,Digits); else SL=0;
error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Blue);
}
if (ord==OP_BUYLIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;
error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Red);
}
if (error==-1)
{
txt=StringConcatenate(txt,"\nError ",GetLastError());
if (ord==OP_BUYSTOP) txt = StringConcatenate(txt," OPENORDER BUYSTOP ", i," Ask =",DoubleToStr(Ask,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),") STOPLEVEL=",STOPLEVEL);
if (ord==OP_SELLSTOP) txt = StringConcatenate(txt," OPENORDER SELLSTOP ", i," Bid =",DoubleToStr(Bid,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),") STOPLEVEL=",STOPLEVEL);
if (ord==OP_SELLLIMIT) txt = StringConcatenate(txt," OPENORDER SELLLIMIT ",i," Ask =",DoubleToStr(Ask,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),") STOPLEVEL=",STOPLEVEL);
if (ord==OP_BUYLIMIT) txt = StringConcatenate(txt," OPENORDER BUYLIMIT ", i," Bid =",DoubleToStr(Bid,Digits)," Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),") SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),") TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),") STOPLEVEL=",STOPLEVEL);
//Print(txt);
//Comment(txt," ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
err++;Sleep(1000);RefreshRates();
}
else
{
Comment("Îðäåð ",error," óñïåøíî âûñòàâëåí ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
n++;
return;
}
if (err>attempts) return;
}
return;
}
//--------------------------------------------------------------------
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
---