//+---------------------------------------------------------------------------+ //| Èñïîëüçîâàí Sell Percent.mq4 èç CodeBase MQL-4.com | //| Ñêðèïò îòêðûâàåò ïîçèöèþ SELL ðàçìåðîì â ïðîöåíò îò ìàêñèìàëüíî âîçìîæíîé | //| Aleksandr Pak, Alma-Ata, 03.2008 | //+---------------------------------------------------------------------------+ /*Òðè ñêðèïòà áûñòðîé ïîäãîòîâêè è ïîñûëêè òîðãîâûõ îðäåðîâ. Ôàéëû çàãðóçèòüòü â ïàïêó experts/scripts, îòêîìïèëèðîâàòü. Äëÿ çàïóñêà îòêðûòü íàâèãàòîð, íàéòè íóæíûé ñêðèïò, çàïóñòèòü äâîéíûì ùåë÷êîì ãðàôè÷åñêîãî ìàíèïóëÿòîðà ìûøü. Èíà÷å ìîæíî íàçíà÷èòü ãîðÿ÷èå êëàâèøè (Âíèìàíèå! Ã.ê. ïî÷åìó -òî ðàáîòàþò òîëüêî â òîì îêíå, êîòîðîå áûëî îòêðûòî ïðè íàçíà÷åíèè)))) Ñêðèïò PipsingV1_Buy_ îòêðûâàåò êîíòðàêò Buy c çàäàííûìè ïàðàìåòðàìè: Ëîò, ñëèïïàæ, ÷èñëî ïîïûòîê, òýóêïðîôèò, ñòîïëîññ. Ñêðèïò PipsingV1_Sell, àíàëîãè÷íî, ïðè÷åì ëîò è ñëèïàæ îäèíàêîâû ñ Buy. Åñëè ñêðèïò ñòàðòîâàë è ôîðìèðóåò îðäåð, òî íà ýêðàíå ïîÿâëÿþòñÿ òðè áîëüøèõ âîñêëèöàòåëüíûõ çíàêà, êîòîðûå îñòàþòñÿ äî îêîí÷àíèÿ ðàáîòû. Ìîæåò áûòü äîñòàòî÷íî äîëãî. Îòêðûòûé îðäåð ïîÿâëÿåòñÿ â ñòðîêå òåðìèíàëà, èíà÷å âûâîäèòñÿ îêíî ñîîáùåíèÿ îá îøèáêå. Èñõîäíûå äàííûå îðäåðîâ çàäàþòñÿ è èçìåíÿþòñÿ ñêðèïòîì Pipsing_Setup_V1, è õðàíÿòñÿ â ãëîáàëüíûõ ïåðåìåííûõ òåðìèíàëà. Åñëè íå áûëî ðàáîòû â òå÷åíèå 4-õ äíåé, òî ãëîáàëüíûå ïåðåìåííûå òåðÿþòñÿ,, áóäåò ñîîáùåíèå "Parametrs??", ýòî îçíà÷àåò ÷òî íóæíî ïîâòîðèòü ñêðèïò PipsingV1_Setup. Òàêæå èçìåíèòü ïàðàìåòðû.  êà÷åñòâå ïàðàìåòðîâ èñïîëüçóþòñÿ: Ðàçìåð ëîòà, ïðîñêàëüçûâàíèå, ÷èñëî ïîïûòîê ïåðåäàòü îðäåð ïðè íåóäà÷å, òýéêïðîôèò áàé, ñòîïëîññ ñåëë, òýéêïðîôèò ñåëë, ñòîïëîññ ñåëë,áëàíê áàé, áëàíê ñåëë - åñëè áëàíê íåðàâåí íóëþ - çàïðåò îðäåðîâ. Ñèãíàëû áëàíê áàé, è áëàíê ñåëë ìîæíî èñïîëüçîâàòü äëÿ íàðàùèâàíèÿ ôóíêöèé. Íàïðèìåð, äàâàòü îò èíäèêàòîðà çàïðåò/ðàçðåøåíèå íà ïîñûëêó îðäåðà. Äëÿ ýòîãî â îäèí èç ïðåäïî÷èòàåìûõ èíäèêàòîðîâ íóæíî âñòàâèòü êîä îïðåäåëÿþùèé òîðãîâûé ñèãíàë. È çàïèñàòü ýòîò ñèãíàë â ãëîáàëüíóþ ïåðåìåííóþ òàê: GlobalVariableSet("Blank_sell_P", signal); GlobalVariableSet("Blank_buy_P", signal2); Åñëè áëàíê ðàâåí íóëþ òî îðäåð ðàçðåøåí, îòëè÷åíîò íóëÿ - çàïðåùåí. Ïðî÷èòàííûå ñêðèïòîì ïàðàìåòðû òîðãîâëè âûâîäÿòñÿ äëÿ îïåðàòèâíîãî êîíòðîëÿ â òåêñòîâûé îáúåêò PiPsing. Çàêðûâàòü îðäåðà ìîæíî òàêæå ñêðèïòîì Close èç ñòàíäàðòíîé ïîñòàâêè MT-4 */ #property copyright "mandorr@gmail.com" //ññûëêà íà èñõîäíûé Sell Percent.mq4 #property copyright "ekr-ap@mail.ru" //#property show_inputs //---- #include <WinUser32.mqh> int deinit() { ObjectDelete("PipsWork"); } void start() { int i,j,k,Slipp,Pop,Buy_tp,Buy_sl,Sell_tp,Sell_sl,Blank_buy,Blank_sell,err; double Lot,loss,profit; string s,r="Parametrs??",p,x,ex; if (!IsCondition()) return; i=WindowBarsPerChart()-100; //place for text ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]); ObjectSetText("PipsWork", "!!!", 60,"",Red); WindowRedraw(); if(GlobalVariableCheck("Lot_P")==FALSE) r=r+"1"; if(GlobalVariableCheck("Slippage_P")==FALSE) r=r+"2"; if(GlobalVariableCheck("Repetitions_P")==FALSE) r=r+"3"; if(GlobalVariableCheck("Buy_tp_P")==FALSE) r=r+"4"; if(GlobalVariableCheck("Buy_sl_P")==FALSE) r=r+"5"; if(GlobalVariableCheck("Sell_tp_P")==FALSE) r=r+"6"; if(GlobalVariableCheck("Sell_sl_P")==FALSE) r=r+"7"; if(GlobalVariableCheck("Blank_buy_P")==FALSE) r=r+"8"; if(GlobalVariableCheck("Blank_sell_P")==FALSE) r=r+"9"; if(StringLen(r)>11) {MessageBox(r,"",MB_OK|MB_ICONERROR); return;} Lot =GlobalVariableGet("Lot_P"); Slipp =GlobalVariableGet("Slippage_P"); Pop =GlobalVariableGet("Repetitions_P"); Buy_tp =GlobalVariableGet("Buy_tp_P"); Buy_sl =GlobalVariableGet("Buy_sl_P"); Sell_tp =GlobalVariableGet("Sell_tp_P"); Sell_sl =GlobalVariableGet("Sell_sl_P"); Blank_buy =GlobalVariableGet("Blank_buy_P"); Blank_sell=GlobalVariableGet("Blank_sell_P"); ex="PiPsing= "+DoubleToStr(Lot,1)+" "+DoubleToStr(Slipp,0)+" "+DoubleToStr(Pop,0)+ " "+DoubleToStr(Buy_tp,0)+" "+DoubleToStr(Buy_sl,0)+ " "+DoubleToStr(Sell_tp,0)+" "+DoubleToStr(Sell_sl,0)+ " "+DoubleToStr(Blank_buy,0)+" "+DoubleToStr(Blank_sell,0); if(ObjectFind("PipsOwn")==-1) {ObjectCreate("PipsOwn",OBJ_TEXT,0,iTime(NULL,0,i),High[i]+40*Point); ObjectSetText("PipsOwn", ex , 9,"",White); } else {ObjectSetText("PipsOwn", ex , 9,"",White); if ( iBarShift ( NULL,0,ObjectGet ( "PipsOwn",OBJPROP_TIME1),FALSE )>WindowBarsPerChart()) ObjectSet("PipsOwn",OBJPROP_TIME1,iTime(NULL,0,i)); //åñëè çà êðàé ýêðàíà } if (AccountLots(Lot)<=0) { string title="Îøèáêà"; string msg="Íåò ñâîáîäíûõ ñðåäñòâ "; MessageBox(msg,title,MB_OK|MB_ICONERROR); return; } if(Blank_buy==0) {err=1; k=0; while(err!=0||k>=Pop) { k+=1; if (Sell_sl>0) loss =Ask-Buy_sl *Point; if (Sell_tp>0) profit=Ask+Buy_tp*Point; OrderSend(Symbol(),OP_BUY,Lot,Ask,Slipp,loss,profit,NULL,0,0,CLR_NONE); err=ShowError(); if(err==0) break; else { Sleep(1000); RefreshRates(); } if(k>=Pop) break; } } ObjectDelete("PipsWork"); } //.................................................... double AccountLots(double Lot) { double freemargin=AccountFreeMargin(); if (freemargin<=0) return (0); double lotmargin=0; string symbol=Symbol(); string market=MarketType(symbol); if (market=="Forex" ) lotmargin=LotMarginForex (symbol); if (market=="Metalls") lotmargin=LotMarginCFD (symbol); if (market=="CFD" ) lotmargin=LotMarginCFD (symbol); if (market=="Futures") lotmargin=LotMarginFutures(symbol); if (market=="") return (0); if(Lot*lotmargin>freemargin) return (-1); else return (1); } string MarketType (string symbol) { int len=StringLen(symbol); string base; if (StringSubstr(symbol,0,1)=="_") return ("Indexes"); if (StringSubstr(symbol,0,1)=="#") { base=StringSubstr(symbol,len-1,1); if (base=="0") return ("Futures"); if (base=="1") return ("Futures"); if (base=="2") return ("Futures"); if (base=="3") return ("Futures"); if (base=="4") return ("Futures"); if (base=="5") return ("Futures"); if (base=="6") return ("Futures"); if (base=="7") return ("Futures"); if (base=="8") return ("Futures"); if (base=="9") return ("Futures"); return ("CFD"); } else { if (symbol=="GOLD" ) return ("Metalls"); if (symbol=="SILVER") return ("Metalls"); if (len==6) { base=StringSubstr(symbol,0,3); if (base=="AUD") return ("Forex"); if (base=="CAD") return ("Forex"); if (base=="CHF") return ("Forex"); if (base=="EUR") return ("Forex"); if (base=="GBP") return ("Forex"); if (base=="LFX") return ("Forex"); if (base=="NZD") return ("Forex"); if (base=="SGD") return ("Forex"); if (base=="USD") return ("Forex"); } } return (""); } double LotMarginForex (string symbol) { double lotsize=MarketInfo(symbol,MODE_LOTSIZE); double leverage=AccountLeverage(); double result=0; if (leverage>0) result=lotsize/leverage; string base=StringSubstr(symbol,0,3); string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (base!=ñurrency) rate_ñurrency=MarketInfo(base+ñurrency,MODE_BID); result=rate_ñurrency*result; return (result); } double LotMarginCFD (string symbol) { double bid_symbol=MarketInfo(symbol,MODE_BID); double lotsize=MarketInfo(symbol,MODE_LOTSIZE); double leverage=10; double result=0; if (leverage>0) result=lotsize*bid_symbol/leverage; string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID); result=rate_ñurrency*result; return (result); } double LotMarginFutures (string symbol) { int len=StringLen(symbol); double result=0; string base=StringSubstr(symbol,0,len-2); if (base=="#ENQ" ) result=3750; if (base=="#EP" ) result=3938; if (base=="#SLV" ) result=5063; if (base=="#GOLD") result=2363; if (base=="#CL" ) result=4725; if (base=="#NG" ) result=8100; if (base=="#W" ) result= 608; if (base=="#S" ) result=1148; if (base=="#C" ) result= 473; string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID); result=rate_ñurrency*result; return (result); } bool IsCondition() { bool result=true; string field=" "; string msg; string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title; if (!IsConnected()) { msg=msg+"Ñâÿçü ñ ñåðâåðîì îòñóòñòâóåò"+field; result=false; } if (!IsTradeAllowed()) { if (!result) msg=msg+"\n"; msg=msg+"Òîðãîâëÿ çàïðåùåíà"+field; result=false; } if (!result) MessageBox(msg,title,MB_OK|MB_ICONERROR); return (result); } int ShowError() { string description; int err=GetLastError(); switch (err) { case 0: return; case 1: description="Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break; case 2: description="Îáùàÿ îøèáêà"; break; case 3: description="Íåïðàâèëüíûå ïàðàìåòðû"; break; case 4: description="Òîðãîâûé ñåðâåð çàíÿò"; break; case 5: description="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break; case 6: description="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break; case 7: description="Íåäîñòàòî÷íî ïðàâ"; break; case 8: description="Ñëèøêîì ÷àñòûå çàïðîñû"; break; case 9: description="Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break; case 64: description="Ñ÷åò çàáëîêèðîâàí"; break; case 65: description="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break; case 128: description="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break; case 129: description="Íåïðàâèëüíàÿ öåíà"; break; case 130: description="Íåïðàâèëüíûå ñòîïû"; break; case 131: description="Íåïðàâèëüíûé îáúåì"; break; case 132: description="Ðûíîê çàêðûò"; break; case 133: description="Òîðãîâëÿ çàïðåùåíà"; break; case 134: description="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break; case 135: description="Öåíà èçìåíèëàñü"; break; case 136: description="Íåò öåí"; break; case 137: description="Áðîêåð çàíÿò"; break; case 138: description="Íîâûå öåíû"; break; case 139: description="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break; case 140: description="Ðàçðåøåíà òîëüêî ïîêóïêà"; break; case 141: description="Ñëèøêîì ìíîãî çàïðîñîâ"; break; case 145: description="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break; case 146: description="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break; case 147: description="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break; default : description="Íåèçâåñòíàÿ îøèáêà"; break; } string field=" "; string msg="Îøèáêà #"+err+" "+description+field; string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title; MessageBox(msg,title,MB_OK|MB_ICONERROR); return (err); } // End
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
It automatically opens orders when conditions are reached
Other Features:
It opens Message Boxes to the user