//+----------------------------------------------------------------------------+ //| Aleksandr Pak, Alma-Ata, 03.2008 | //| ekr-ap@mail.ru | //|Ñîâåòíèê GTerminal Ãðàôè÷åñêîå óïðàâëåíèå òîðãîâëåé, | //|Ïîëóàâòîìàò íà ïðîáîé/ðàçâîðîò îò ëèíèé, ïî ïàðàìåòðàì â èìåíè ëèíèè | //+----------------------------------------------------------------------------+ /* 19_04_2008ã. GTerminal V5 Ñòàðòîâàÿ ñòàòüÿ: articles.mql4.com/ru/597 ...............................................................................................  äâóõ ñëîâàõ: Âûñòàâëÿåòå ëèíèè âðó÷íóþ, äàåòå èìåíà, ñîâåòíèê òîðãóåò ïî ëèíèÿì. Îòêðûâàåò è çàêðûâàåò îðäåðà ïî ïåðåñå÷åíèþ ëèíèè ñ öåíîé íà ãëàâíîì ãðàôèêå èëè â îêíå èíäèêàòîðà. Ñîâåòíèê óñòàíâàëèâàåò òýéêïðîôèò, ñòîïëîññ èç èìåíè ëèíèè èëè ïî ïîëîæåíèåþ ëèíèé èíèöèàöèè. Íà òî è ïîëóàâòîìàò)) ............................................................................................... Ãðàôè÷åñêèå îðäåðà: ýòî ëèíèè TrendLine ó êîòîðûõ â ïîëå "èìÿ" çàïèñàíà òîðãîâàÿ îïåðàöèÿ, èñïîëíÿåìàÿ ïî öåíå îòíîñèòåëüíî ýòîé ëèíèè. ÈÑÏÎËÍßÅÌÛÅ ËÈÍÈÈ, ò.å. ëèíèè ïðè ïåðåñå÷åíèè êîòîðûõ ïðîèñõîäèò òîðãîâàÿ îïåðàöèÿ. Îòêðûòèå îðäåðà BuyStop tp=x sl=x //Öåíà (ïðîøëà) âûøå ëèíèè. BuyLimit tp=x sl=x //Öåíà (ïðîøëà) íèæå ëèíèè SellStop tp=x sl=x //tp/sl ìîãóò îòñóòñòâîâàòü, ïèøóòñÿ â ëþáîì ïîðÿäêå SellLimit tp=x sl=x Çàêðûòèå îðäåðà SLBUY TPBUY SLSELL TPSELL Çàêðûòèå âñåõ îðäåðîâ óêàçàííîãî òèïà SLALLBUY TPALLBUY ALALLSELL TPALLSELL ËÈÍÈÈ ÇÀÄÀÍÈß-ÈÍÈÖÈÀÖÈÈ ÒÝÉÊÏÐÎÔÈÒÀ/ÑÒÎÏËÎÑÑÀ â ïîëÿõ îòñûëàåìîãî îðäåðà. SLINITBUY // TPINITBUY SLINITSELL TPINITSELL ÏÐÀÂÈËÀ Âíîñèòü â ñâîéñòâà/èìÿ. Áîëüøèå /ìàëûå áóêâû íå ðàçëè÷àþòñÿ. Óäîáíî áîëüøèìè. Ëèíèÿ ïðèíÿòàÿ ñîâåòíèêîì ê èñïîëíåíèþ ìåíÿåò öâåò íà öâåò îïåðàöèè (â ñâîéñòâàõ ñîâåòíèêà). Òî ÷òî ïîíÿë ñîâåòíèê âîçâðàùàåòñÿ â îïèñàíèå ëèíèè. Áóäåò ëèáî ñ÷èòàííûå ïàðìåòðû, ëèáî O.k., ëèáî íåò èñïîëíåíèÿ. Ñìîòðåòü âûñâå÷èâàÿ óêàçàòåëåì ìûøè. Ëèíèÿ ïî óìîëÿàíèþ ñðàáàòûâàåò óñëîâèþ âûøå/íèæå CVLOSE 0-ãîáàðà. Çà êîíöîì ëèíèè íèêàêèå îïåðàöèè ÍÅ èñïîëíÿþòñÿ. Ëèíèè çàäàíèÿ àêòèâíû íåçàâèñèìî îò äëèíû. Ïðîáåë ìåæäó ïàðàìåòðàìè îáÿçàòåëåí. Ïåðåä è ïîñëå çíàêà "=" ïðîáëà íåò, ïèñàòü ñëèòíî. Ëèíèè ñðàáàòûâàþò íà îñíîâíîì ãðàôèêå è â îêíàõ èíäèêàòîðà, ïðè ïåðåñå÷åíèè ñ èíäèêàòîðîì. Ëèíèè ìîãóò îòëè÷àòüñÿ ïðîèçâîëüíûì òåêñòîì, öèôðîé. Íàïðèìåð â îêíå èíäèêàòîðà ñòàâèì TPBUY 2, à íà îñíîâíîì ãðàôèêå TPBUY. Ïåðâîé ñðàáîòàåò òà, íà êîòîðîé ïåðåñå÷åíèå. ÈÍÄÈÊÀÒÎÐÛ òîëüêî òå, êîòîðûå ìîæåò óâèäåòü ñîâåòíèê: RSI CCI WPR Momentum Force Index DeMarker ATR OBV MFI Ïåðèîä èíäèêàòîðà äîëæåí ñîâïàäàòü ñ Period_indicator â ñâîéñòâàõ ñîâåòíèêà. Âñå èñïîëíÿåìûå ëèíèè ðàáîòàþò â îêíàõ èíäèêàòîðîâ. ÄÅÌÎ/ÐÅÀË Åñëè òèêè ïðèõîäÿò ðåäêî, òî îæèäàíèå ðåàêöèè ñîâåòíèêà áóäåò âåñüìà çàìåòíî - äî ñëåäóþùåãî òèêà öåíû. Êðàñíàÿ âåðòèêàëüíàÿ ëèíèÿ â äåìî/ðåàë ýòî Ïàóçà. Êàê òîëüêî îíà íàõîäèòñÿ ëåâåå íóëåâîãî áàðà, òàê ñðàçó âñå îïåðàöèè ñîâåòíèêà çàïðåùåíû. Íà÷àâøèåñÿ íå îñòàíàâëèâàåò. Ïîñëå îòêðûòèÿ îðäåðà îñòàåòñÿ ïóíêòèð. Ýòà óæå ñðàáîòàâøàÿ ëèíèÿ ñâÿçàíà ñ óäàëåíèåì îðäåðà. Åñëè óäàëèòü ýòîò ïóíêòèð, çàêðîåòñÿ îðäåð. Åñëè óäàëèòü îðäåð - óäàëÿåòñÿ ïóíêòèð. Ñîâåòíèê ìîæåò îòñûëàòü îðäåðà â äâà ïðèåìà - áåç tp/sl, è ñðàçó ìîäèôèêàöèÿ tp/sl. Ñîâåòíèê ðàçðåøàåò òîëüêî îäèí îðäåð Buy è îäèí Sell. Âòîðîé Buy íå îòêðîåò. Îðäåðà ìîæíî óäàëÿòü âðó÷íóþ. Ìîæíî äîëèâàòü âðó÷íóþ, íî ñîâåòíèê èõ íå âèäèò. Àâòîìàòèçàöèÿ äëÿ íèõ ñëåäóþùàÿ: Îðäåðà îòêðûòûå âðó÷íóþ ìîæíî çàêðûòü ïî ëèíèÿì TP/SLALLBUY TP/SLALLSELL Íåò êîíòðîëÿ àêòèâíûõ ñðåäñòâ äåïî. Íåò êîíòðîëÿ ïîëîæåíèÿ ëèíèé çàäàíèÿ TP/SLINITBUY TP/SLINITSELL. ÒÅÑÒÅÐ Ëèíèè îòêðûòèÿ íå óäàëÿþòñÿ. Ëèíèè ÏÀÓÇÀ íåò. Ïîëüçóéòåñü êíîïêîé "||/>>" Ëèíèè ãðàôè÷åñêèõ îðäåðîâ ïðîâåðÿþòñÿ íà êàæäîì òèêå çàíîâî, ïîýòîìó ìîæíî ïåðåìåùàòü, ïåðåèìåíîâûâàòü, ìåíÿòü ïàðàìåòðû. ÑÎÂÅÒÛ: 1. Ëèíèè óøåäøèå çà êðàé ýêðàíà ìîæíî íàéòè/óäàëèòü => ïðàâàÿ ìûøè/ÑïèñîêÎáúåêòîâ 2. Äëÿ ðàáîòû íà ôüþ÷åðñàõ ïðèìåíÿéòå íàñòðîéêó äâîéíàÿ îòñûëêà îðäåðà. 3. Ãðàôè÷åñêèå îðäåðà-ëèíèè ýêâèâàëåíòû îòëîæåííûì îðäåðàì. Ñðîê äåéñòâèÿ - êîíåö ëèíèè. 4. Óñòàíàâëèâàÿ ëèíèþ îòêðûòèÿ îðäåðà îáÿçàòåëüíî ïðîêîíòðîëèðóéòå óæå èìåþùèåñÿ ëèíèè çàêðûòèÿ, ò.ê. îðäåð ìîæåò ñðàçó çàêðûòüñÿ. Óñïåõîâ!!! */ #property copyright "Aleksandr Pak, Almaty,2008-ver5" #property link "articles.mql4.com/ru/597" #property show_inputs #include <WinUser32.mqh> extern double Lot=0.1; //ðàçìåð ëîòà extern int Slipp=6; //Slippage extern int Pop=3; //ïîïûòîê îòêðûòèÿ îðäåðà. extern int cross_method=1; //ôëàã ñïîñîáà âû÷èñëåíèÿ ïåðeñå÷åíèÿ öåíà/ëèíèÿ 0=æåñòêî ïî äâóì áàðàì,1 ñðàçó æå ïî îäíîìó êàñàíèþ. extern int start=0; //íà÷àëî àíàëèçà 0=íóëåâîé áàð, 1 = 1 ïåðâûé áàð è ò.ä. extern int start_indicator=1; //áàð íà êîòîðîì ñðàâíèâàåòñÿ èíäèêàòîð extern int Period_indicator=14; //ïåðèîä âñåõ èíäèêàòîðîâ extern int Magic=0; //Èäåíòèôèêàöèîííûé íîìåð îðäåðà, ïðèìåíÿòü äëÿ ðàçëè÷åíèÿ ðàçíûõ ñîâåòíèêîâ extern bool DoubleOrderSending=False; //Îòñûëêà îðäåðà ñíà÷àëà ñ ïóñòûìè ïîëÿìè extern bool Teg_Pause = TRUE; //ôëàã îòêëþ÷åíèÿ ëèíèè Ïàóçà, è ðåàêöèè íà íåå, äåéñòâèòåëüíî â òîðãîâëå, â òåñòåðå âñåãäà îòêëþ÷åíî extern bool Teg_DeletOpen=TRUE; //Ëèêâèäàöèÿ ëèíèé îòêðûòèÿ ïðè çàêðûòèè îðäåðà extern bool Teg_DeletOrderOnLine=FALSE; //Ëèêâèäàöèÿ îðäåðà åñëè íåò ëèíèè îòêðûòèÿ ïðè çàêðûòèè îðäåðà extern color color_buy=Aqua; //öâåòà ëèíèé buy extern color color_sell=Orange; //öâåòà ëèíèé sell extern color color_init=Red; //öâåòà ëèíèé çàäàíèÿ tp/sl double price0, price1; double Last_time; int Buy_ticket,Sell_ticket; int tp, sl; double tpinitbuy,slinitbuy,tpinitsell,slinitsell; int Pause=0; double last_pause; int t_first=0; int glob_s=0, glob_b=0; color color_tp_buy=Aqua, color_sl_buy=Aqua; string BUY_global_name,SELL_global_name; string message; string last_line; string Pause_name; string s_tpinitbuy,s_slinitbuy,s_tpinitsell,s_slinitsell; int init() {double t; BUY_global_name= "GT_BUY_"+ Symbol(); SELL_global_name= "GT_SELL_"+ Symbol(); if(!IsTesting()) { Buy_ticket = GlobalVariableGet(BUY_global_name); if(Buy_ticket!=0) {if(OrderSelect(Buy_ticket,SELECT_BY_TICKET)==TRUE) { t=OrderCloseTime(); if(t!=0) { Buy_ticket=0; GlobalVariableSet(BUY_global_name,0); } } else {Buy_ticket=0; GlobalVariableSet(BUY_global_name,0);} } Sell_ticket = GlobalVariableGet(SELL_global_name); if(Sell_ticket!=0) {if(OrderSelect(Sell_ticket,SELECT_BY_TICKET)==TRUE) {t=OrderCloseTime(); if(t!=0) { Sell_ticket=0; GlobalVariableSet(SELL_global_name,0); } } else {Sell_ticket=0;GlobalVariableSet(SELL_global_name,0);} } } if(!IsTesting()) { if(Teg_Pause) { if(ObjectFind("PAUSE")<0) {ObjectCreate("PAUSE", OBJ_VLINE, 0,iTime(Symbol(),0,0)+12*60*Period(),0); ObjectSet("PAUSE",OBJPROP_WIDTH,1); ObjectSet("PAUSE",OBJPROP_COLOR,Red); } else ObjectSet("PAUSE",OBJPROP_TIME1,iTime(Symbol(),0,0)+12*60*Period()); } } Comment("ticket buy="+DoubleToStr(Buy_ticket,0)+" ticket sell="+DoubleToStr(Sell_ticket,0)); return (0); } //..................... int deinit() { ObjectDelete("PipsWork"); ObjectDelete("PAUSE"); return(0); } //************************************* //************************************* void start() { int i,j,k,Slipp,Pop,err,crach; double t; int ticket; bool t_busy=TRUE; RefreshRates(); t=iTime(Symbol(),0,0); if(t>Last_time){Last_time=t; t_first=1;} if(Buy_ticket!=0) {if(OrderSelect(Buy_ticket,SELECT_BY_TICKET)==TRUE) { t=OrderCloseTime(); if(t!=0) { Buy_ticket=0; glob_b=1;} } else {Buy_ticket=0; glob_b=1;} } if(Sell_ticket!=0) {if(OrderSelect(Sell_ticket,SELECT_BY_TICKET)==TRUE) {t=OrderCloseTime(); if(t!=0) { Sell_ticket=0; glob_s=1; } } else {Sell_ticket=0; glob_s=1;} } SearchWorkLine(); if(!search_name_pause()) { if(IsTradeContextBusy()) { while(t_busy){Comment("ÎÆÈÄÀÍÈÅ ÎÊÎÍ×ÀÍÈß ×ÓÆÎÉ ÎÏÅÐÀÖÈÈ"); Sleep(1000); RefreshRates(); t_busy=IsTradeContextBusy(); } } else { //........................................................................................................ //.................îïðåäåëåíèå òîðãîâûõ ñèãíàëîâ if(cross_up ("buystop",color_buy)) OpenBuy(); if(cross_down ("buylimit",color_buy)) OpenBuy(); if( cross_down ("slbuy",color_buy)) CloseBuy(); if(cross_up ("tpbuy",color_buy)) CloseBuy(); if(cross_down ("slallbuy",color_buy )) { close_all(OP_BUY); Buy_ticket=0; glob_b=1; } if(cross_up ("tpallbuy",color_buy )) { close_all(OP_BUY); Buy_ticket=0; glob_b=1; } //************ if (cross_down ("sellstop",color_sell)) OpenSell(); if (cross_up ("selllimit",color_sell)) OpenSell(); if (cross_up ("slsell",color_sell)) CloseSell(); if (cross_down ("tpsell",color_sell)) CloseSell(); if (cross_up ("slallsell",color_sell)) { close_all(OP_SELL); Sell_ticket=0; glob_s=1; } if( cross_down ("tpallsell",color_sell)) { close_all(OP_SELL); Sell_ticket=0; glob_s=1; } //................................................... }//IsTradeContextBusy } //pause else{/*Print("Ïàóçà");*/} if(!IsTesting()) {if(glob_b==1){glob_b=0; GlobalVariableSet(BUY_global_name, Buy_ticket);} if(glob_s==1){glob_s=0; GlobalVariableSet(SELL_global_name, Sell_ticket);} } t_first=0; Comment(StringConcatenate("ticket buy=",DoubleToStr(Buy_ticket,0)," ticket sell="+DoubleToStr(Sell_ticket,0))); ObjectDelete("PipsWork"); } //****************************************************************************************** int CloseSell() { param(last_line); if(Sell_ticket!=0) { if(close(Sell_ticket)==0) { Sell_ticket=0; glob_s=1; } } } //*************** int CloseBuy() { param(last_line); if(close(Buy_ticket)==0) { Buy_ticket=0; glob_b=1; } } //**************** int OpenBuy() {int ticket; param(last_line); if(Buy_ticket<=0) { if(!DoubleOrderSending) { //Print("tp/sl ",tpinitbuy," ",slinitbuy); Buy_ticket=send_order(0,0,ticket,Lot,tp,sl,tpinitbuy,slinitbuy); } else { Buy_ticket=send_order(0,0,ticket,Lot,0,0,0,0); if(Buy_ticket>0) { Sleep(1000); ticket=send_order(0,1,Buy_ticket,Lot,tp,sl,tpinitbuy,slinitbuy); } } if(Buy_ticket>0) { fixline(last_line,Buy_ticket,color_buy); glob_b=1; } } } //********************** int OpenSell() {int ticket; param(last_line); if(Sell_ticket<=0) { if(!DoubleOrderSending) Sell_ticket=send_order(1,0,ticket,Lot,tp,sl,tpinitsell,slinitsell); else { Sell_ticket=send_order(1,0,ticket,Lot,0,0,0,0); if(Sell_ticket>0) { Sleep(1000); ticket=send_order(1,1,Sell_ticket,Lot,tp,sl,tpinitsell,slinitsell); } } if(Sell_ticket>0) { glob_s=1; fixline(last_line,Sell_ticket,color_sell); } } } //************************** bool search_name_pause() {double p,p2,t,t2,y; int error,i; string n; if(IsTesting()) return(FALSE); if(!Teg_Pause) return (FALSE); i=search_name_obj("paus"); if (i>=0) { p= ObjectGet(Pause_name,OBJPROP_TIME1); p2=iTime(NULL,0,0); if(p-p2<0) { if(last_pause==p&&Pause==0) { y=p2+12*60*Period(); for(i=0;i<10;i++) { ObjectSet(Pause_name,OBJPROP_TIME1,y); WindowRedraw(); if(GetLastError()==0) break; Sleep(100); } last_pause= y; return(FALSE); } else { Pause=1; ObjectSet(Pause_name,OBJPROP_WIDTH,4); WindowRedraw(); last_pause=p; return(TRUE); } } else { ObjectSet(Pause_name,OBJPROP_WIDTH,1); if(t_first==1) { ObjectSet(Pause_name,OBJPROP_TIME1,ObjectGet(Pause_name,OBJPROP_TIME1)+Period()*60); } Pause=0; WindowRedraw(); last_pause=ObjectGet(Pause_name,OBJPROP_TIME1); return(FALSE); } } } //......................... int search_name_obj(string c) {int i,k; string s; k=ObjectsTotal(); for(i=k-1;i>=0;i--) { s=lowercaps(ObjectName(i)); if (StringFind(s,c,0)>=0){ Pause_name=ObjectName(i); return(i);} } return (-1); } //.................................................... int fixline(string _name, int _B, color _color) {int error; string txn=StringConcatenate("TICKET=",DoubleToStr(_B,0)," ",_name," DATE=",TimeToStr(TimeLocal(), TIME_DATE)," TIME=",TimeToStr(TimeLocal(),TIME_SECONDS)); ObjectCreate(txn,OBJ_TREND,ObjectFind(_name), ObjectGet( _name,OBJPROP_TIME1),ObjectGet( _name,OBJPROP_PRICE1), ObjectGet( _name,OBJPROP_TIME2),ObjectGet( _name,OBJPROP_PRICE2)); while(TRUE) { ObjectDelete(_name); WindowRedraw(); if(ObjectFind(_name)==-1) break; } ObjectSet(txn,OBJPROP_STYLE,STYLE_DOT); ObjectSet(txn,OBJPROP_COLOR,_color); } //.......................................... int close_all(int typs) { bool result; double price; int cmd,error,i=0,k; double t; int ticket; string tr; //---- if(typs==0) tr="CLOSE ALL BUY"; else tr="CLOSE ALL SELL"; k=OrdersTotal(); for(i=k-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); t=OrderCloseTime(); if((cmd==typs)&&Symbol()==OrderSymbol()&&t==0) { t=OrderOpenTime(); if(t!=0) { ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]); ObjectSetText("PipsWork", tr, 14,"",Red); WindowRedraw(); close_(cmd); /* Sleep(500);*/ } } } } ObjectDelete("PipsWork"); return(0); } //............................. int close_(int cmd) { bool result; double price; int error,i=0; while(true) {i+=1; RefreshRates(); if(cmd==OP_BUY) price=Bid; else price=Ask; result=OrderClose(OrderTicket(),OrderLots(),price,12,CLR_NONE); error=GetLastError(); if(result==TRUE) error=0; if(error!=0) {Sleep(3000); RefreshRates();} //çàêðûâàòü ëþáèì, äàåì 6 ïîïûòîê else break; if(i>6)break; ///6 ïîïûòîê çàêðûòü îðäåð } return (error); } //...................... int close(int ticket) { bool result; double price; int cmd,error=-1,i=0; double t; string tr=StringConcatenate("CLOSE ", DoubleToStr(ticket,0)) ; if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { cmd=OrderType(); t=OrderCloseTime(); if(Symbol()==OrderSymbol()&&t==0) { ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]); ObjectSetText("PipsWork", tr, 14,"",Red); WindowRedraw(); error=close_(cmd); } } else {/*Print("Îøèáêà â âûáîðå ïîçèöèè=",i);*/} ObjectDelete("PipsWork"); return(error); } //.............................................................. int send_order(int teg_b,int sm, int ticket, double sLot, int _tp, int _sl, double ptp, double psl) {int err=1,k=0,crach; double loss,profit,_Lot; bool result=TRUE; string tr; if(teg_b==0) tr="OPEN BUY"; else tr="OPEN SELL"; ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]); ObjectSetText("PipsWork", tr, 14,"",Red); WindowRedraw(); while(TRUE) { k+=1; RefreshRates(); double ask=NormalizeDouble(Ask,Digits),bid=NormalizeDouble(Bid,Digits); if(sLot==0) _Lot=0.1; else _Lot=sLot; if(teg_b==0) { if (_sl>0) loss =ask-_sl*Point; else loss=0; if (_tp>0) profit=ask+_tp*Point; else profit=0; if(profit==0){if(ptp!=0) profit=ptp; } if(loss==0){if(psl!=0) loss=psl;} if(sm==0) ticket=OrderSend(Symbol(),OP_BUY,_Lot,ask,Slipp,loss,profit,NULL,0,0,CLR_NONE); else result=OrderModify(ticket,0,loss,profit,0,CLR_NONE); } else { if (_sl>0) loss =bid+_sl*Point; else loss=0; if (_tp>0) profit=bid-_tp*Point; else profit=0; if(profit==0){if(ptp!=0) profit=ptp; } if(loss==0){if(psl!=0) loss=psl;} if(sm==0) ticket=OrderSend(Symbol(),OP_SELL,_Lot,bid,Slipp,loss,profit,NULL,0,0,CLR_NONE); else result=OrderModify(ticket,0,loss,profit,0,CLR_NONE); } err=ShowError(Pop,k); if(err<=1&&result==TRUE) break; else Sleep(3000); if(k>=Pop) break; if(err==4||err==6||err==128||err==135||err==137||err==138||err==146) crach=0; else crach=1; if(crach==1) break; //No new repeat is are crazy } return (ticket); } //.................................................... string search_right(string s, string c) { int i,j,k,len; string r="",p; i=StringFind(s,c,i); if(i!=-1) {i+=StringLen(c); r=""; len =StringLen(s); for(j=0;j<len;j++) { k=StringGetChar(s,i+j); if(k<=57&&k>=48||k==46||k==44) { p=StringSubstr(s,i+j,1); r=r+p; } else break;} } return(r); } //.............. string search_left(string s,string c) { int i,j,k,len; string r="",p; i=StringFind(s,c,0); if(i!=-1) { r=""; len =StringLen(s); r=StringSubstr(s,0,i); } else r=s; r=lowercaps(r); return(r); } //......................... string lowercaps(string s) {int i,k,c; string r=""; k=StringLen(s); for(i=0;i<k;i++){c=StringGetChar(s,i); if(c<91&&c>64) c+=32;r=r+CharToStr(c);} return (r); } //.......................... void param(string s) {string b,r; r=lowercaps(s); b=search_right(r,"tp="); if(StringLen(b)>0) tp =NormalizeDouble(StrToDouble(b),0); else tp=0; b=search_right(r,"sl="); if(StringLen(b)>0) sl =NormalizeDouble(StrToDouble(b),0); else sl=0; ObjectSetText(s,StringConcatenate("!O.k! tp=",DoubleToStr(tp,0)," ", "sl=",DoubleToStr(sl,0))); } //..................................................................... bool cross_down(string s, color col) { return(first_line(s, 0, col));} bool cross_up(string s, color col) { return(first_line(s, 1, col));} //****************************************** double first_line(string s,int u_d,color col) { int i,w,wi,ind; bool isfound=FALSE; string c,r,b; double rline; int k=ObjectsTotal(); for(i=k-1;i>=0;i--) { c=ObjectName(i); r=search_left(c," "); if(r==s) { w=ObjectFind(c); if(w==0) { RefreshRates(); price0=NormalizeDouble(Close[start],Digits); price1=NormalizeDouble(Close[start+1],Digits); }else { RefreshRates(); isfound=indicator(w); } if(w!=0){if(!isfound) {ObjectSetText(s,"Ëèíèÿ èñïîëíÿòüñÿ ÍÅ áóäåò"); return (FALSE);}} rline = ObjectGetValue_ByCurrent(c, start); if(rline!=0) { if(u_d==1) { if(cross_method==0) {if(rline<price0&&rline>price1) {last_line=c; return (TRUE); }} if(cross_method==1) {if(rline<price0) {last_line=c; return (TRUE); }} } else { if(cross_method==0) {if(rline>price0 && rline<price1){ last_line=c; return (TRUE); } } if(cross_method==1) {if(rline>price0 ){ last_line=c; return (TRUE);} } } } } }//for return (FALSE); } //............................................... bool indicator(int w) { int wi; bool isfound=FALSE; wi=WindowFind(StringConcatenate("RSI(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iRSI(Symbol(),0,Period_indicator,0,start_indicator); price1=iRSI(Symbol(),0,Period_indicator,0,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("CCI(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iCCI(Symbol(),0,Period_indicator,0,start_indicator); price1=iCCI(Symbol(),0,Period_indicator,0,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("%R(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iWPR(Symbol(),0,Period_indicator,start_indicator); price1=iWPR(Symbol(),0,Period_indicator,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("Momentum(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iMomentum(Symbol(),0,Period_indicator,0,start_indicator); price1=iMomentum(Symbol(),0,Period_indicator,0,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("Force(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iForce(Symbol(),0,Period_indicator,0,0,start_indicator); price1=iForce(Symbol(),0,Period_indicator,0,0,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("DeM(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iDeMarker(Symbol(),0,Period_indicator,start_indicator); price1=iDeMarker(Symbol(),0,Period_indicator,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("ATR(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iATR(Symbol(),0,Period_indicator,start_indicator); price1=iATR(Symbol(),0,Period_indicator,start_indicator+1); isfound=TRUE; } wi=WindowFind("OBV"); if(w==wi) { price0=iOBV(Symbol(),0,0,start_indicator); price1=iOBV(Symbol(),0,0,start_indicator+1); isfound=TRUE; } wi=WindowFind(StringConcatenate("MFI(",DoubleToStr(Period_indicator,0),")")); if(w==wi) { price0=iMFI(Symbol(),0,Period_indicator,start_indicator); price1=iMFI(Symbol(),0,Period_indicator,start_indicator+1); isfound=TRUE; } return(isfound); } // int SearchWorkLine() {int i,k,w,ti=0,ct,mt[1000]; string r,c; k=ObjectsTotal(); for(i=k-1;i>=0;i--) { c=ObjectName(i); w=ObjectFind(c); r=search_left(c," "); if(r== "buylimit" ) { param(c); ObjectSet(c,OBJPROP_COLOR,color_buy);} if(r== "buystop" ) { param(c); ObjectSet(c,OBJPROP_COLOR,color_buy);} if(r== "tpbuy" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy);} if(r== "slbuy" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy);} if(r== "selllimit" ) { param(c); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "sellstop" ) { param(c); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "tpsell" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "slsell" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "slallsell" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "tpallsell" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_sell);} if(r== "slallbuy" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy); } if(r== "tpallbuy" ) { ObjectSetText(c,"O.k."); ObjectSet(c,OBJPROP_COLOR,color_buy); } if(r== "tpinitbuy" ) { if(w==0){tpinitbuy=ObjectGetValueByShift(c,0); ObjectSetText(c,"O.k. tpinitbuy=", tpinitbuy);s_tpinitbuy=c; } else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");} if(r== "slinitbuy" ) { if(w==0){slinitbuy=ObjectGetValueByShift(c,0); ObjectSetText(c,"O.k. slinitbuy=", slinitbuy);s_slinitbuy=c; } else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");} if(r== "tpinitsell") { if(w==0){tpinitsell=ObjectGetValueByShift(c,0); ObjectSetText(c,"O.k. tpinitsell=", tpinitsell);s_tpinitsell=c;} else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");} if(r== "slinitsell") { if(w==0){slinitsell=ObjectGetValueByShift(c,0); ObjectSetText(c,"O.k. slinitsell=", slinitsell);s_slinitsell=c; } else ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ");} if(w!=0) { if(!indicator(w))ObjectSetText(c,"Not execute ÍÅÒ èñïîëíåíèÿ"); } r=search_left(c,"="); if(r== "ticket" ) { ti=StrToDouble(search_right(c,"TICKET=")); if(qwest_order(ti)>0) { if(!IsTesting()) {if(Teg_DeletOpen) ObjectDelete(c);} } mt[ct]=ti; ct+=1; } } int t_w; if(Buy_ticket!=0) {t_w=0; for(i=0;i<ct;i++) {if(Buy_ticket==mt[i]) t_w=1; } if(t_w==0){if(close(Buy_ticket)==0){Buy_ticket=0; glob_b=1;}} } if(Sell_ticket!=0) {t_w=0; for(i=0;i<ct;i++) {if(Sell_ticket==mt[i]) t_w=1; } if(t_w==0){if(close(Sell_ticket)==0){Sell_ticket=0; glob_s=1;}} } return (0); } //............................... int qwest_order(int ticket) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { double t=OrderCloseTime(); if(t==0) return (0); else return(1); } else return (0); } //............................................... double ObjectGetValue_ByCurrent(string c, int shift) //Value of { double r=ObjectGetValueByShift (c,shift); if(r!=0) return(r+ObjectGetDelta_ByCurrent(c)); else return(0); } //.................................... double ObjectGetDelta_PerBar(string c) //Increment of Y-ordinate per Bar { double p= ObjectGet(c,OBJPROP_PRICE1); double p2= ObjectGet(c,OBJPROP_PRICE2); int b = ObjectGetShiftByValue(c,p); int b2= ObjectGetShiftByValue(c,p2); double z=b-b2; if(z!=0) { double delta=(p2-p)/z; } return(delta); } //*************************************** double ObjectGetDelta_ByCurrent(string c) { double t=TimeCurrent()-iTime(Symbol(),0,0); double tf=60*Period(); double delta=ObjectGetDelta_PerBar(c); double r=delta*(t/tf); return(r); } //**************************************************************************** //þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ int ShowError(int Pop, int k) { string d_error; int err=GetLastError(),crach; //3 129 130 131 134 139 140 switch (err) //ïîâòîð òîëüêî ïðè 4, 6, 135, 136 137 138 146 { case 0: return; case 1: d_error="Ðåçóëüòàò íåèçâåñòåí"; break; case 2: d_error="Îáùàÿ îøèáêà"; break; case 3: d_error="Íåïðàâèëüíûå ïàðàìåòðû"; break; case 4: d_error="Òîðãîâûé ñåðâåð çàíÿò"; break; case 5: d_error="Íå îáñëóæèâàåìàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break; case 6: d_error="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break; case 7: d_error="Íåäîñòàòî÷íî ïðàâ"; break; case 8: d_error="Ñëèøêîì ÷àñòûå çàïðîñû"; break; case 9: d_error="Íåäîïóñòèìàÿ îïåðàöèÿ âðåäÿùàÿ ñåðâåðó"; break; case 64: d_error="Ñ÷åò çàáëîêèðîâàí"; break; case 65: d_error="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break; case 128: d_error="Èñòåê ñðîê îæèäàíèÿ âûïîëíåíèÿ îðäåðà"; break; case 129: d_error="Íåïðàâèëüíàÿ öåíà"; break; case 130: d_error="Íåïðàâèëüíûå ñòîïû"; break; case 131: d_error="Íåïðàâèëüíûé îáúåì"; break; case 132: d_error="Ðûíîê çàêðûò"; break; case 133: d_error="Òîðãîâëÿ çàïðåùåíà"; break; case 134: d_error="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break; case 135: d_error="Öåíà èçìåíèëàñü"; break; case 136: d_error="Íåò öåí"; break; case 137: d_error="Áðîêåð çàíÿò"; break; case 138: d_error="Íîâûå öåíû"; break; case 139: d_error="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break; case 140: d_error="Ðàçðåøåíà òîëüêî ïîêóïêà"; break; case 141: d_error="Ñëèøêîì ìíîãî çàïðîñîâ"; break; case 145: d_error="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break; case 146: d_error="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break; case 147: d_error="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break; default : d_error="Íåèçâåñòíàÿ îøèáêà"; break; } if(err==4||err==6||err==128||err==135||err==137||err==138||err==146) crach=0; else crach=1; string field=" "; string msg="Îøèáêà #"+err+" "+d_error+field+ "Ïîïûòîê="+DoubleToStr(k,0)+" "+DoubleToStr(Pop,0); string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title; ObjectSetText("PipsWork", msg, 14,"",Red); if(Pop-1==k) ObjectSetText("PipsWork", msg, 14,"",Red); message = msg; return (err); } //O.k.
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Relative strength index
Commodity channel index
Larry William percent range indicator
Momentum indicator
Force index
DeMarker indicator
Indicator of the average true range
On Balance Volume indicator
Money flow index
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features: