//+-----------------------------------------------------------------+ //| JS-Chaos-V2.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; extern int OpenHour = 7; extern int CloseHour = 18; extern double Lots = 0.1; extern int Otstup = 0; extern double Fibo.1 = 1.618; extern double Fibo.2 = 4.618; extern int MagicNumber = 321232123; //+-----------------------------------------------------------------+ extern bool ClosePos = True; extern bool Trailing = True; extern bool Besubitok = True; extern int BesubUr = 1; //+-----------------------------------------------------------------+ bool EaDisabled=False; string com, Sy; int dg, st, sp; double MA, pa, pb, pt; #include // Стандартная библиотека //+-----------------------------------------------------------------+ //| Автор : Сергей - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ int init() { //---- if (!IsTesting()) { if (IsExpertEnabled()) Message("\nСоветник установлен и будет запущен следующим тиком"); else Message("\nВнимание! отжата кнопка на вкладке советники"); } Sy = Symbol(); //---- return(0); } //+-----------------------------------------------------------------+ //| Автор : Сергей - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ void start(){ // ----- com="JS-Chaos"; // ----- pb = MarketInfo(Sy,MODE_BID); pa = MarketInfo(Sy,MODE_ASK); dg = MarketInfo(Sy,MODE_DIGITS); pt = MarketInfo(Sy,MODE_POINT); sp = MarketInfo(Sy,MODE_SPREAD); st = MarketInfo(Sy,MODE_STOPLEVEL); // ----- Comment("\n\n\nСоветник JS-Chaos весь в работе: - ",IIcm(Tradetime()==1 && EaDisabled==False), "\nДень: - ",Dayof(), "\nТорговый счёт: - ",shet(), "\nВремя по GMT: - " + TimeToStr(TimeCurrent()-3600, TIME_MINUTES|TIME_SECONDS), "\nSpread: - ",sp, "\nStopLevel: - ",st, "\nПлечо: - ",AccountLeverage() ); // ----- st=st+sp; MA=iMA(NULL,0,5,3,MODE_SMMA,PRICE_MEDIAN,0); if(Trailing)Trailing.MA(); if(Besubitok)ModifBesubitok(); // ----- double Fractals.Up=FractalsUp(10); double Fractals.Dw=FractalsDw(10); if(Tradetime()==1 && EaDisabled==False){ double tp, lots; // ---- У С Т А Н О В К А -1- О Р Д Е Р А --------------------------------------------------------+ if(Signals()==1 && Fractals.Up>MA && OrdersCount(OP_BUYSTOP, MagicNumber)==0 && OrdersCount(OP_BUY, MagicNumber)==0) { if(OrdersCount(OP_BUYSTOP, MagicNumber)==0) { tp = MA+(Fractals.Up-MA)*Fibo.1; lots=Lots*2; } if(tp>0 && (tp-Fractals.Up)/pt>st && (Fractals.Up-MA)/pt>st && ND(pa+st*pt)<=Fractals.Up){ int tik.1=SetOrder(Sy, OP_BUYSTOP, lots, Fractals.Up, MA, tp, MagicNumber, com, 0); if(tik.1>0) { GlobalVariableSet("Ticket.buy.1 "+Sy, tik.1); } } } // ----- if(Signals()==2 && Fractals.Dw0 && (Fractals.Dw-tp)/pt>st && (MA-Fractals.Dw)/pt>st && ND(pb-st*pt)>Fractals.Dw){ int tik.2=SetOrder(Sy, OP_SELLSTOP, lots, Fractals.Dw, MA, tp, MagicNumber, com, 0); if(tik.2>0) { GlobalVariableSet("Ticket.sell.1 "+Sy, tik.2); } } } // ---- У С Т А Н О В К А -2- О Р Д Е Р А --------------------------------------------------------+ if(Signals()==1 && Fractals.Up>MA && OrdersCount(OP_BUY, MagicNumber)==0 && GetIndexTicket(GlobalVariableGet("Ticket.buy.1 "+Sy))==True && OrdersCount(OP_BUYSTOP,MagicNumber)==1) { if(OrdersCount(OP_BUYSTOP, MagicNumber)==1) { tp = MA+(Fractals.Up-MA)*Fibo.2; lots=Lots*1; } if(tp>0 && (tp-Fractals.Up)/pt>st && (Fractals.Up-MA)/pt>st && ND(pa+st*pt)<=Fractals.Up){ int tik.3=SetOrder(Sy, OP_BUYSTOP, lots, Fractals.Up, MA, tp, MagicNumber, com, 0); if(tik.3>0) { GlobalVariableSet("Ticket.buy.2 "+Sy, tik.3); } } } // ----- if(Signals()==2 && Fractals.Dw0 && (Fractals.Dw-tp)/pt>st && (MA-Fractals.Dw)/pt>st && ND(pb-st*pt)>Fractals.Dw){ int tik.4=SetOrder(Sy, OP_SELLSTOP, lots, Fractals.Dw, MA, tp, MagicNumber, com, 0); if(tik.4>0) { GlobalVariableSet("Ticket.sell.2 "+Sy, tik.4); } } } // ---------------------------------------------------------------------------------------------+ if(Signals()==2) { DeleteOrders(OP_BUYSTOP, MagicNumber); } if(Signals()==1) { DeleteOrders(OP_SELLSTOP, MagicNumber); } // ----- if(ClosePos) { double MA=iMA(NULL,0,34,0,MODE_SMMA,PRICE_CLOSE,1); if(MA>Open[1]) { ClosePosBuy(MagicNumber); } if(MAOrderOpenPrice() && (OrderOpenPrice()-st*Point)>=Ask){ ModifyOrder(OrderOpenPrice(), OrderOpenPrice()-BesubUr*Point,OrderTakeProfit(),OrderExpiration()); } } } return(0); } //+-----------------------------------------------------------------+ //| Автор : Сергей - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ void Trailing.MA(){ //+---- double AC.0=iAC(NULL,0,0); double AC.1=iAC(NULL,0,1); double AO.0=iAO(NULL,0,0); double AO.1=iAO(NULL,0,1); double ma=ND(iMA(NULL,0,21,0,MODE_SMMA,PRICE_CLOSE,0)); double StdDev.0=iStdDev(Symbol(),0,10,0,0,PRICE_CLOSE,0); double StdDev.1=iStdDev(Symbol(),0,10,0,0,PRICE_CLOSE,1); //+---- int cnt=OrdersTotal(); for (int i=0; iStdDev.1 && AO.0>AO.1 && AC.0>AC.1)){ if(ND(OrderStopLoss())!=ma && ma+st*pt<=Bid){ ModifyOrder(OrderOpenPrice(),ma,OrderTakeProfit(),OrderExpiration()); } } } //+---- if(OrderType()==OP_SELL){ if((OrderStopLoss()<=0)||(OrderStopLoss()>ma && StdDev.0>StdDev.1 && AO.0=Ask){ ModifyOrder(OrderOpenPrice(),ma,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 Signals(){ // ----- double AC.1=iAC(Symbol(),0,1); double AC.2=iAC(Symbol(),0,2); double AO.0=iAO(Symbol(),0,0); double AO.1=iAO(Symbol(),0,1); double AO.2=iAO(Symbol(),0,2); double AL.1=iMA(Symbol(),0, 5,3,MODE_SMMA,PRICE_MEDIAN,-3); // зелёная линия double AL.2=iMA(Symbol(),0, 8,5,MODE_SMMA,PRICE_MEDIAN,-5); // красная линия double AL.3=iMA(Symbol(),0,13,8,MODE_SMMA,PRICE_MEDIAN,-8); // синия линия // ----- if(AO.0>AO.1 && AO.1>0.0 && AL.1>AL.2 && AL.2>AL.3) { return(1); } if(AO.0=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; i1 && 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) { Comment(m); if (StringLen(m)>0) Print(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 && ex0) { 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: ",ErrorDescription(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: ",ErrorDescription(err),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op), " pp=",pp," sl=",sl," tp=",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(){ // --- int TradingTime=0; if(OpenHour>CloseHour){ if (Hour()<=CloseHour || Hour()>=OpenHour)TradingTime=1; } if(OpenHour=OpenHour && Hour()<=CloseHour)TradingTime=1; } if(OpenHour==CloseHour){ if(Hour()==OpenHour)TradingTime=1; } if (DayOfWeek()==1 && Hour()<3)TradingTime=0; if (DayOfWeek()>=5 && Hour()>18)TradingTime=0; if (Month()==1 && Day()<10)TradingTime=0; if (Month()==12 && Day()>20)TradingTime=0; if (ExpertTime==false)TradingTime=1; // --- return(TradingTime); } //+------------------------------------------------------------------------------+ //| Автор : Сергей - мой сайт - "http://wsforex.ru/" | //+------------------------------------------------------------------------------+ bool GetIndexTicket(int ti) { int i, k=OrdersTotal(); for (i=0; i=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != mn) continue; if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, sp); } } void ClosePosSell(int mn) { int cnt = OrdersTotal(); int sp=MarketInfo(Symbol(), MODE_SPREAD); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != mn) continue; if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, sp); } } //+------------------------------------------------------------------------------+ //| Автор : Сергей - мой сайт - "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: ",ErrorDescription(er),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(), " op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",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/" | //+------------------------------------------------------------------------------+