//+------------------------------------------------------------------+ //| _auto_SELL.mq4 | //| "ÑÊÐÈÏÒÛ ÄËß ËÅÍÈÂÎÃÎ" | //| Ñêðèïò îòêðûâàåò SELL â àêòèâíîì îêíå. | //| Ïðè CreateGif=true àêòèâíîå îêíî ïîñëå | //| îòêðûòèÿ ïîçèöèè ñîõðàíÿåòñÿ êàê ðèñóíîê â | //| ...\<Òåðìèíàë>\exsperts\files\<FileName>.gif | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Bookkeeper" #property link "yuzefovich@gmail.com" #property show_inputs // Åñëè åñòü æåëàíèå ìåíÿòü ýêñòåðíû â ïðîöåññå //+------------------------------------------------------------------+ extern int Aggression = 1; // = 0 - ôèêñèðîâàííûì ëîòîì // = 1 èëè 2 àâòîâûáîð extern double FixLot = 0.1; extern int DistSLmin = 35; // StopLoss â ïóíêòàõ - íå ìåíüøå. // Åñëè àâòîìàòîì áóäåò ìåíüøå - áóäåò // óñòàíîâëåí íà DistSLmin ïóíêòîâ extern int NBarsMax = 15; // Ìàêñèìàëüíîå ÷èñëî áàðîâ, ñðåäè // êîòîðûõ èñêàòü ëîêàëüíûé ìàêñèìóì. // Åñëè íàéäåí íå áóäåò, áóäåò âçÿò // áîëüøèé èç High â ýòîì äèàïàçîíå. // èëè ïî DistSLmin extern int SlipPage = 7; // Ïðîñêàëüçûâàíèå â ïóíêòàõ extern bool StopLoss = true; // Ñòàâèòü èëè íåò StopLoss extern bool TakeProfit = true; // Ñòàâèòü èëè íåò TakeProfit=StopLoss extern bool CreateGif = false; // Ñîçäàòü èëè íåò ðèñóíîê //+------------------------------------------------------------------+ double CalcLotsAuto() // Ìÿãêî-àãðåññèâíûé ñïîñîá óïðàâëåíèÿ äåíþøêîé. { double lots; // Ìèíèìàëüíûé è ìàêñèìàëüíûé ðàçìåðû ëîòîâ double MinLot=MarketInfo(Symbol(),MODE_MINLOT); int MinLotDgts; if(MinLot<0.1) MinLotDgts=2; // ðàçìåðíîñòü ìèíëîòà else { if(MinLot<1.0) MinLotDgts=1; else MinLotDgts=0; } double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT); // íóæåí çàëîã íà ìèíëîò double MarginLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*MinLot; // èìååì ñâîáîäíûõ ñðåäñòâ double FreeMargin=AccountFreeMargin(); // åñëè èõ íå èìååì :( if(MarginLot>FreeMargin) return(-1.0); // à åñëè èìååì, òî ñêîëüêî ëîòîâ ìîæåì ñåáå ïîçâîëèòü íà ïîçó double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP); int LotStepDgts; if(LotStep<0.1) LotStepDgts=2; // ðàçìåðíîñòü else { if(LotStep<1.0) LotStepDgts=1; else LotStepDgts=0; } FixLot=NormalizeDouble(FixLot,LotStepDgts); if(Aggression==0) { if(FixLot>0) { MarginLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*FixLot; if(MarginLot>FreeMargin) lots=NormalizeDouble(MinLot,MinLotDgts); else lots=NormalizeDouble(FixLot,LotStepDgts); return(lots); } else { lots=NormalizeDouble(MinLot,MinLotDgts); return(lots); } } int n=1; int m=NormalizeDouble(MaxLot/MinLot,0); double level=MarginLot*2; while(level<=FreeMargin && n<=m) { n++; if(Aggression==1) level=level+MarginLot*n; // Ìåíåå àãðåññèâíî else level=level+MarginLot*MathSqrt(n); } n--; lots=NormalizeDouble((MinLot*n),MinLotDgts); return(lots); } //+------------------------------------------------------------------+ void start() { double SL, TP; int ticket, i; string FileName, str; //---- // Äîïóñê óðîâíåé ñòîïîâ (äîáàâëÿþ ïðîñêàëüçûâàíèå) double MinDistForStops= (MarketInfo(Symbol(),MODE_STOPLEVEL)+SlipPage)*Point; double lots=CalcLotsAuto(); if(lots<=0) { Alert("Open_BUY: My finance sing romances"); return; } int N=0, m=0; bool b=true; while(b && N<NBarsMax) { N++; if((Period()<1440 && High[N]>=High[N+1] && High[N]>=High[N-1] && High[N]>High[N+2] && High[N]>High[N-2]) || (Period()>240 && High[N]>High[N+1] && High[N]>High[N-1])) { b=false; m=N; } else m=iHighest(NULL,0,MODE_HIGH,N,0); } RefreshRates(); double DistStops=High[m]-Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point; DistStops=MathMax((DistSLmin*Point),DistStops); DistStops=MathMax(MinDistForStops,DistStops); if(StopLoss==true) SL=Ask+DistStops; else SL=0; if(TakeProfit==true) TP=Bid-DistStops; else TP=0; ticket=OrderSend(Symbol(),OP_SELL, lots, NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits), SlipPage, NormalizeDouble(SL,Digits), NormalizeDouble(TP,Digits), "",0,0,CLR_NONE); if(ticket<0) Alert("Open_SELL LastError: ",GetLastError()); else { if(CreateGif==true) { // ðèñóåì, åñëè çàêàçàíî datetime curdate=TimeCurrent(); FileName=Symbol()+"_SELL_"+TimeYear(curdate); i=TimeMonth(curdate); if(i<10) { str="0"+i; FileName=FileName+str; } else FileName=FileName+i; i=TimeSeconds(curdate)+ 100*TimeMinute(curdate)+ 10000*TimeHour(curdate)+ 1000000*TimeDay(curdate); if(TimeDay(curdate)<10) { str="0"+i; FileName=FileName+str; } else FileName=FileName+i; FileName=FileName+".gif"; WindowScreenShot(FileName,400,300); } } return; } //+------------------------------------------------------------------+
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:
Other Features:
It issuies visual alerts to the screen