Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
FletCanal
//+-----------------------------------------------------------------+
//| FletCanal.mq4 |
//+-----------------------------------------------------------------+
//| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH |
//| H\ \ http://wsforex.ru/ / / H |
//| H )----)----------------------------------------------(----( H |
//| H/ / Ïèøó òîðãîâûå ñèñòåìû íà çàêàç: wsforex.ru \ \ H |
//| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH |
//+-----------------------------------------------------------------+
#property copyright "wsforex@list.ru"
#property link "http://wsforex.ru/"
//+-----------------------------------------------------------------+
//| Ðàçðàáîòêà : Ñåðãåé.Æ - ìîé ñàéò - "http://wsforex.ru/" |
//+-----------------------------------------------------------------+
extern bool ExpertTime = True; // Èñïîëüçîâàòü ôóíêöèþ ðàáîòû ïî âðåìåíè True-âêë False-âûêë
extern string TradeDay = "1,2,3,4,5";
extern int HourStart = 0; // Ñòàðò â ïîíåäåëüíèê
extern int HourStops = 19; // Ñòîï â ïÿòíèöó
extern int Ea.Start = 0; // Ñòàðò ñîâåòíèêà
extern int Ea.Stop = 23; // Ñòîï Ñîâåòíèêà
// -----
extern bool MM = False;
extern double MaxRisk = 0.7;
extern double Lots = 0.01;
extern int Otstup = 0;
extern int Life_time = 1440;
extern int MuStopLevel = 100;
extern int MuSpread = 30;
extern int MagicNumber = 777;
extern string Áëîê =" Íàñòðîéêè ôëýòà ";
extern int StdDevPer = 37;
extern int FletBars = 2;
extern int CanalMin = 610;
extern int CanalMax = 1860;
//+-----------------------------------------------------------------+
//| Ðàçðàáîòêà : Ñåðãåé.Æ - ìîé ñàéò - "http://wsforex.ru/" |
//+-----------------------------------------------------------------+
extern bool Trailing = True;
extern double FiboTral = 0.873;
//+-----------------------------------------------------------------+
//| Ðàçðàáîòêà : Ñåðãåé.Æ - ìîé ñàéò - "http://wsforex.ru/" |
//+-----------------------------------------------------------------+
int tik, exp, dg, lv, sp;
double pa, pb, po;
string Times, symbol;
string com = "";
string ExpertName;
bool flagup, flagdw, EaDisabled = False;
//+-----------------------------------------------------------------+
//| Ðàçðàáîòêà : Ñåðãåé.Æ - ìîé ñàéò - "http://wsforex.ru/" |
//+-----------------------------------------------------------------+
int init()
{
//----
symbol = Symbol();
ExpertName=WindowExpertName();
//----
if(symbol=="EURUSD")
{
}
//----
if(symbol=="GBPUSD")
{
}
//----
if (!IsTesting()) {
if (IsExpertEnabled()) Message("\nÑîâåòíèê óñòàíîâëåí è áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("\nÂíèìàíèå! îòæàòà êíîïêà íà âêëàäêå ñîâåòíèêè");
}
//----
return(0);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void start(){
// -----
Times = "Âðåìÿ GMT - "+ TimeToStr(TimeCurrent()-3600, TIME_MINUTES|TIME_SECONDS);
pb = MarketInfo(symbol,MODE_BID);
pa = MarketInfo(symbol,MODE_ASK);
dg = MarketInfo(symbol,MODE_DIGITS);
po = MarketInfo(symbol,MODE_POINT);
lv = MarketInfo(symbol,MODE_STOPLEVEL)+MarketInfo(symbol,MODE_SPREAD);
// -----
Comment("\nÑîâåòíèê "+ExpertName+" âåñü â ðàáîòå: - ",IIcm(Tradetime(ExpertTime, Ea.Start, Ea.Stop)==1 && EaDisabled==False),
"\nÄåíü: - ",Dayof(),
"\nÒîðãîâûé ñ÷¸ò: - ",shet(),
"\nCompany: - ",AccountCompany(),
"\nEquity: - ",AccountEquity(),
"\nStop Out: - ",AccountStopoutLevel(),
"\nÂðåìÿ ïî GMT: - " +Times,
"\nSpread: - ",MarketInfo(symbol,MODE_SPREAD),
"\nStopLevel: - ",lv,
"\n쑌֔: - ",AccountLeverage()
);
// -----
if(AccountEquity()<=AccountStopoutLevel())
{
ClosePosBySelect(OP_BUY, MagicNumber);
DeleteOrders(OP_BUYSTOP, MagicNumber);
ClosePosBySelect(OP_SELL, MagicNumber);
DeleteOrders(OP_SELLSTOP, MagicNumber);
}
// -----
static datetime BARflag = 0;
datetime now = Time[0];
if(BARflag < now){
BARflag = now;
if(OrdersCount(OP_SELL,MagicNumber)==1)DeleteOrders(OP_BUYSTOP, MagicNumber);
if(OrdersCount(OP_BUY,MagicNumber)==1)DeleteOrders(OP_SELLSTOP, MagicNumber);
// -----
int ress = ChecBarsFlet();
double Pricemax = PriceMaxBars(ress);
double Pricemin = PriceMinBars(ress);
double ChCan=Pricemax-Pricemin;
double TPBuy=Pricemax+ChCan;
double TPSell=Pricemin-ChCan;
double SLBuy=Pricemax-ChCan*2;
double SLSell=Pricemin+ChCan*2;
// -----
if(ChCan<CanalMax*po && ChCan>=CanalMin*po && ress>=FletBars && OrdersCount(-1, MagicNumber)==0)
{
TrendLine("Max", Time[ress],Time[0], Pricemax, Pricemax, 0,BlueViolet);
TrendLine("Min", Time[ress],Time[0], Pricemin, Pricemin, 0, BlueViolet);
TrendLine("TPBuy", Time[ress],Time[0], TPBuy, TPBuy, 1, Red);
TrendLine("TPSell", Time[ress],Time[0], TPSell, TPSell, 1, Red);
}
// -----
exp=CurTime()+PERIOD_D1*Life_time;
if(Trailing) ModificacionsOrders(MagicNumber);
// ---- Ó Ñ Ò À Í Î Â Ê À - Î Ð Ä Å Ð À -----------------------------------------+
if(ChCan>=CanalMin *po && ChCan<CanalMax*po && ress>=FletBars && Tradetime(ExpertTime, Ea.Start, Ea.Stop)==1 && EaDisabled==False){
int Loss, Profit, stops=0;
double lot, op, sl, tp;
//---
int orders=OrdersHistoryTotal();
for (int i = orders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print("Îøèáêà â èñòîðèè!");
break;
}
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderMagicNumber() !=MagicNumber) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) Loss++;
}
//---
srvol();
lot=GetLots();
if(Loss==1)lot=Lots*4;
if(flagup==true && pa>Pricemin && pa<Pricemax && OrdersCount(OP_BUYSTOP, MagicNumber)==0 &&
OrdersCount(OP_BUY,MagicNumber)==0 && OrdersCount(OP_SELL,MagicNumber)==0) {
op=Pricemax;
sl=SLBuy;
tp=TPBuy;
if((op-pa)/po>lv && (op-sl)/po>lv && (tp-op)/po>lv) {
tik=SetOrder(symbol, OP_BUYSTOP, lot, op, sl, tp, MagicNumber, com, exp);
if(tik>0)flagup=false;
}
}
if(flagdw==true && pb>Pricemin && pb<Pricemax && OrdersCount(OP_SELLSTOP,MagicNumber)==0 &&
OrdersCount(OP_SELL,MagicNumber)==0 && OrdersCount(OP_BUY,MagicNumber)==0) {
op=Pricemin;
sl=SLSell;
tp=TPSell;
if((pb-op)/po>lv && (sl-op)/po>lv && (op-tp)/po>lv) {
tik=SetOrder(symbol, OP_SELLSTOP, lot, op, sl, tp, MagicNumber, com, exp);
if(tik>0)flagdw=false;
}
}
}
}
// -----
return(0);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
int srvol(int bar=100){
int ress, pp;
for (int i=0; i<bar; i++){
pp=pp+MathAbs(Close[i]-Open[i])/Point;
}
ress=pp/bar;
return(ress);
}
/*
int vol(int bar=100){
int ress, pp;
for (int i=0; i<bar; i++){
pp=pp+Volume[i];
}
ress=pp/bar;
return(ress);
}*/
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
int ChecBarsFlet(){
// -----
int i,ress=0;
for (i=0; i<100; i++){
if(stddev(i)>stddev(i+1)) break;
if(stddev(i)<stddev(i+1)){
ress++;
flagup=true;
flagdw=true;
}
}
// -----
return(ress);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
double stddev(int i=0){
return(iStdDev(Symbol(),0,StdDevPer,0,MODE_SMMA,PRICE_MEDIAN,i));
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
double PriceMaxBars(int bar=0){
// -----
double new_extremum;
for(int i=1;i<=bar;i++)
{
if (i==1) new_extremum = iHigh(Symbol(),0,i); else
if (new_extremum<iHigh(Symbol(),0,i)) new_extremum = iHigh(Symbol(),0,i);
}
// -----
return(new_extremum);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
double PriceMinBars(int bar=0){
// -----
double new_extremum;
for(int i=1;i<=bar;i++)
{
if (i==1) new_extremum = iLow(Symbol(),0,i); else
if (new_extremum>iLow(Symbol(),0,i)) new_extremum = iLow(Symbol(),0,i);
}
// -----
return(new_extremum);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void TrendLine(string name, datetime x1,
datetime x2, double y1, double y2, bool ly, color col)
{
string label = "Line " + name;
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(label, OBJPROP_RAY, ly);//True
ObjectSet(label, OBJPROP_WIDTH, 2);
ObjectSet(label, OBJPROP_COLOR, col);
ObjectSet(label, OBJPROP_STYLE, STYLE_SOLID);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
double GetLots(int Loss=1000){
// -----
double Free =AccountFreeMargin();
double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor((Free*MaxRisk/100)/(Loss*LotVal)/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(!MM)Lot=Lots;
// -----
return(Lot);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void ModificacionsOrders(int mn=0){
//+----
double sl,ur;
int cnt=OrdersTotal();
for (int i=0; i<cnt; i++) {
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != symbol) continue;
if (OrderMagicNumber() != mn) continue;
//+----
if(OrderType()==OP_BUY){
ur=OrderOpenPrice()+ND((OrderTakeProfit()-OrderOpenPrice())*FiboTral);
if(OrderOpenPrice()>OrderStopLoss() && ND(ur)<ND(Bid)){
ModifyOrder(OrderOpenPrice(),ND(OrderOpenPrice()+1*po),OrderTakeProfit(),OrderExpiration());
}
}
//+----
if(OrderType()==OP_SELL){
ur=OrderOpenPrice()-ND((OrderOpenPrice()-OrderTakeProfit())*FiboTral);
if(OrderOpenPrice()<OrderStopLoss() && ND(ur)>ND(Ask)){
ModifyOrder(OrderOpenPrice(),ND(OrderOpenPrice()-1*po),OrderTakeProfit(),OrderExpiration());
}
}
}
//+----
return(0);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string Dayof(){
string dd;
switch(DayOfWeek()){
case 1: dd="Ïîíåäåëüíèê"; break;
case 2: dd="Âòîðíèê"; break;
case 3: dd="Ñðåäà"; break;
case 4: dd="×åòâåðã"; break;
case 5: dd="Ïÿòíèöà"; break;
case 6: dd="Ñóááîòà"; break;
case 7: dd="Âîñêðåñåíüå"; break;
}
return(dd);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
int OrdersCount(int type, int mn)
{
//+----
int orders=0;
int cnt=OrdersTotal();
for (int i=0; i<cnt; i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber()!=mn) continue;
if (OrderType()==type||type<0) orders++;
}
//+----
return (orders);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void DeleteOrders(int op=-1, int mn=-1) {
bool fd;
int i, it, k=OrdersTotal();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderType()==op) {
if (OrderMagicNumber()==mn) {
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(), 0);
if (fd) { PlaySound("ok.wav"); break;
Sleep(1000*5);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string IIcm(int com){
if(com==1)return("äà:"); else return("íåò:");
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string shet(){
string s;
if (IsDemo())s="Äåìî"; else s="Ðåàë";
return(s);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal(), ty;
// ----
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void Message(string m) {
if (StringLen(m)>0)
Print(m);
WriteLineInFile(ExpertName+" Îøèáêè",m);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
if (TimeFrame==0) TimeFrame=Period();
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("Unknown Period");
}
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
int SetOrder(string sy, int op, double ll, double pp,
double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
color cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, LightBlue, LightCoral);
datetime ot;
double pa, pb, mp;
int err, it, ticket, msl, sp;
// ----
if (sy=="" || sy=="0") sy=Symbol();
msl=MarketInfo(sy, MODE_STOPLEVEL);
if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
if (ex>0 && ex<TimeCurrent()) ex=0;
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
Message("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;
}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ot=TimeCurrent();
sp=MarketInfo(sy, MODE_SPREAD);
pp=NormalizeDouble(pp, Digits);
sl=NormalizeDouble(sl, Digits);
tp=NormalizeDouble(tp, Digits);
ticket=OrderSend(sy, op, ll, pp, sp, sl, tp, co, mn, ex, cl);
if (ticket>0) { PlaySound("ok.wav"); break;
} else {
err=GetLastError();
if (err==128 || err==142 || err==143) {
Sleep(1000*66);
if (ExistOrders(sy, op, mn, ot)) { PlaySound("ok.wav"); break;
}
Print("Error(",err,") set order: ",error(err),", try ",it);
Message("Error("+err+") set order: "+error(err)+", try "+it);
continue;
}
PlaySound("timeout.wav");
mp=MarketInfo(sy, MODE_POINT);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
Print("Error(",err,") set order: ",error(err),", try ",it);
Message("Error("+err+") set order: "+error(err)+", try "+it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
Message("Ask="+DT(pa)+" Bid="+DT(pb)+" sy="+sy+" ll="+ll+" op="+GetNameOP(op)+
" pp="+DT(pp)+" sl="+DT(sl)+" tp="+DT(tp)+" mn="+mn);
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if (err==2 || err==64 || err==65 || err==133) {
EaDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
// Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
if (err==8 || err==141) Sleep(1000*100);
if (err==139 || err==140 || err==148) break;
// Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
// Îáíóëåíèå äàòû èñòå÷åíèÿ
if (err==147) {
ex=0; continue;
}
if (err!=135 && err!=138) Sleep(1000*7.7);
}
}
return(ticket);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
int Tradetime(bool exptime, int OpenHour, int CloseHour){
// ---
int day[];
int i=0, np;
int Trading=0;
string st, tmp=TradeDay;
ArrayResize(day, 0);
while (StringLen(tmp)>0) {
np=StringFind(tmp, ",");
if (np<0) {
st=tmp;
tmp="";
} else {
st=StringSubstr(tmp, 0, np);
tmp=StringSubstr(tmp, np+1);
}
i++;
ArrayResize(day, i);
day[i-1]=StrToInteger(st);
}
// ---
int TradingTime=0;
for (int f=0; f<7; f++) {
if (DayOfWeek()==day[f])Trading=1;
}
if (OpenHour>CloseHour){
if (Hour()<=CloseHour || Hour()>=OpenHour)TradingTime=1;
}
if (OpenHour<CloseHour){
if (Hour()>=OpenHour && Hour()<=CloseHour)TradingTime=1;
}
if (OpenHour==CloseHour){
if (Hour()==OpenHour)TradingTime=1;
}
if (DayOfWeek()==1 && Hour() < HourStart)TradingTime=0;
if (DayOfWeek()==5 && Hour() >= HourStops)TradingTime=0;
if (Trading!=1)TradingTime=0;
if (exptime!=true)TradingTime=1;
// ---
return(TradingTime);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void ClosePosBySelect(int type, int mn=-1) {
bool fc;
color clClose;
double ll, pa, pb, pp;
int sp, i, k=OrdersTotal();
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), err, it;
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==type && OrderMagicNumber()==mn) {
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
if (OrderType()==OP_BUY) {
pp=pb; clClose=Blue;
} else {
pp=pa; clClose=Red;
}
ll=OrderLots();
pp=NormalizeDouble(pp, dg);
fc=OrderClose(OrderTicket(), ll, pp, sp, clClose);
if (fc) { PlaySound("ok.wav"); break;
} else {
err=GetLastError();
PlaySound("timeout.wav");
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
error(err),", try ",it);
Message("Error("+err+") Close "+GetNameOP(OrderType())+" "+
error(err)+", try "+it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Message(OrderTicket()+" Ask="+DT(pa)+" Bid="+DT(pb)+" pp="+DT(pp));
Print("sy=",OrderSymbol()," ll=",ll," sl=",DT(OrderStopLoss()),
" tp=",DT(OrderTakeProfit())," mn=",OrderMagicNumber());
Message("sy="+OrderSymbol()+" ll="+ll+" sl="+DT(OrderStopLoss())+
" tp="+DT(OrderTakeProfit())+" mn="+OrderMagicNumber());
Sleep(1000*5);
}
}
}
}
}
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, Blue, Red);
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) { PlaySound("Stops.wav"); break;
} else {
er=GetLastError();
PlaySound("timeout.wav");
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modifying order: ",error(er),", try ",it);
Message("Error("+er+") modifying order: "+error(er)+", try "+it);
Print("Ask=",DT(pa)," Bid=",DT(pb)," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",DT(pp)," sl=",DT(sl)," tp=",DT(tp));
Message("Ask="+DT(pa)+" Bid="+DT(pb)+" sy="+OrderSymbol()+
" op="+GetNameOP(OrderType())+" pp="+DT(pp)+" sl="+DT(sl)+" tp="+DT(tp));
Sleep(1000*10);
}
}
}
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
double ND(double np) {
double pp, ts=MarketInfo(Symbol(), MODE_TICKSIZE);
int di=MarketInfo(Symbol(), MODE_DIGITS);
if (ts>0) pp=NormalizeDouble(np/ts, 0)*ts;
else {if (di>0) pp=NormalizeDouble(np*di, 0)/di; else pp=np;
}
return(pp);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
void WriteLineInFile(string FileName,string Line)
{
int er;
int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," ");
if(HFile>0)
{
FileSeek(HFile,0,SEEK_END);
FileWrite(HFile,Line);
FileFlush(HFile);
FileClose(HFile);
}else{ er=GetLastError();
Print("Error: "+er+" "+error(er));
}
return;
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string error(int eer)
{
string er;
switch(eer)
{
//----
case 0:
case 1: er="Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break;
case 2: er="Îáùàÿ îøèáêà"; break;
case 3: er="Íåïðàâèëüíûå ïàðàìåòðû"; break;
case 4: er="Òîðãîâûé ñåðâåð çàíÿò"; break;
case 5: er="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
case 6: er="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
case 7: er="Íåäîñòàòî÷íî ïðàâ"; break;
case 8: er="Ñëèøêîì ÷àñòûå çàïðîñû"; break;
case 9: er="Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break;
case 64: er="Ñ÷åò çàáëîêèðîâàí"; break;
case 65: er="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
case 128: er="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break;
case 129: er="Íåïðàâèëüíàÿ öåíà"; break;
case 130: er="Íåïðàâèëüíûå ñòîïû"; break;
case 131: er="Íåïðàâèëüíûé îáúåì"; break;
case 132: er="Ðûíîê çàêðûò"; break;
case 133: er="Òîðãîâëÿ çàïðåùåíà"; break;
case 134: er="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
case 135: er="Öåíà èçìåíèëàñü"; break;
case 136: er="Íåò öåí"; break;
case 137: er="Áðîêåð çàíÿò"; break;
case 138: er="Íîâûå öåíû - Ðåêâîò"; break;
case 139: er="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
case 140: er="Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
case 141: er="Ñëèøêîì ìíîãî çàïðîñîâ"; break;
case 145: er="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
case 146: er="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
case 147: er="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
case 148: er="Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà "; break;
//----
case 4000: er="Íåò îøèáêè"; break;
case 4001: er="Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè"; break;
case 4002: er="Èíäåêñ ìàññèâà - âíå äèàïàçîíà"; break;
case 4003: er="Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé"; break;
case 4004: er="Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà"; break;
case 4005: er="Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ"; break;
case 4006: er="Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà"; break;
case 4007: er="Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè"; break;
case 4008: er="Íåèíèöèàëèçèðîâàííàÿ ñòðîêà"; break;
case 4009: er="Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå"; break;
case 4010: er="Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà"; break;
case 4011: er="Ñëèøêîì äëèííàÿ ñòðîêà"; break;
case 4012: er="Îñòàòîê îò äåëåíèÿ íà íîëü"; break;
case 4013: er="Äåëåíèå íà íîëü"; break;
case 4014: er="Íåèçâåñòíàÿ êîìàíäà"; break;
case 4015: er="Íåïðàâèëüíûé ïåðåõîä"; break;
case 4016: er="Íåèíèöèàëèçèðîâàííûé ìàññèâ"; break;
case 4017: er="Âûçîâû DLL íå ðàçðåøåíû"; break;
case 4018: er="Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó"; break;
case 4019: er="Íåâîçìîæíî âûçâàòü ôóíêöèþ"; break;
case 4020: er="eÂûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû"; break;
case 4021: er="Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè"; break;
case 4022: er="Ñèñòåìà çàíÿòà"; break;
case 4050: er="Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè"; break;
case 4051: er="Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè"; break;
case 4052: er="Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè"; break;
case 4053: er="Îøèáêà ìàññèâà"; break;
case 4054: er="Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè"; break;
case 4055: er="Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà"; break;
case 4056: er="Ìàññèâû íåñîâìåñòèìû"; break;
case 4057: er="Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ"; break;
case 4058: er="Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà"; break;
case 4059: er="Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå"; break;
case 4060: er="Ôóíêöèÿ íå ïîäòâåðæäåíà"; break;
case 4061: er="Îøèáêà îòïðàâêè ïî÷òû"; break;
case 4062: er="Îæèäàåòñÿ ïàðàìåòð òèïà string"; break;
case 4063: er="Îæèäàåòñÿ ïàðàìåòð òèïà integer"; break;
case 4064: er="Îæèäàåòñÿ ïàðàìåòð òèïà double"; break;
case 4065: er=" êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ"; break;
case 4066: er="Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ"; break;
case 4067: er="Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè"; break;
case 4099: er="Êîíåö ôàéëà"; break;
case 4100: er="Îøèáêà ïðè ðàáîòå ñ ôàéëîì"; break;
case 4101: er="Íåïðàâèëüíîå èìÿ ôàéëà"; break;
case 4102: er="Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ"; break;
case 4103: er="Íåâîçìîæíî îòêðûòü ôàéë"; break;
case 4104: er="Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó"; break;
case 4105: er="Íè îäèí îðäåð íå âûáðàí"; break;
case 4106: er="Íåèçâåñòíûé ñèìâîë"; break;
case 4107: er="Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè"; break;
case 4108: er="Íåâåðíûé íîìåð òèêåòà"; break;
case 4109: er="Òîðãîâëÿ íå ðàçðåøåíà"; break;
case 4110: er="Äëèííûå ïîçèöèè íå ðàçðåøåíû"; break;
case 4111: er="Êîðîòêèå ïîçèöèè íå ðàçðåøåíû"; break;
case 4200: er="Îáúåêò óæå ñóùåñòâóåò"; break;
case 4201: er="Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà"; break;
case 4202: er="Îáúåêò íå ñóùåñòâóåò"; break;
case 4203: er="Íåèçâåñòíûé òèï îáúåêòà"; break;
case 4204: er="Íåò èìåíè îáúåêòà"; break;
case 4205: er="Îøèáêà êîîðäèíàò îáúåêòà"; break;
case 4206: er="Íå íàéäåíî óêàçàííîå ïîäîêíî"; break;
case 4207: er="Îøèáêà ïðè ðàáîòå ñ îáúåêòîì"; break;
default: er="unknown error";
}
return(er);
}
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
string DT(double s) { return(DoubleToStr(s,Digits)); }
//+------------------------------------------------------------------------------+
//| Àâòîð : Ñåðãåé - ìîé ñàéò - "http://wsforex.ru/" |
//+------------------------------------------------------------------------------+
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
---