//+----------------------------------------------------------------------------------------+
//| Trall_Rabbit.mq4 |
//| Martingeil© 2011, |
//| fx.09@mail.ru |
//+----------------------------------------------------------------------------------------+
#property copyright "Martingeil© 2011,"
#property link "fx.09@mail.ru"
//Òðàë îñíîâàí ïî ìîòèâàì "Rabbit" àâòîðà "JonKatana" ñ ñàéòå ÌÊË http://codebase.mql4.com/ru/6231
//÷òî òî ñâÿçàíîå ñ çîëîòûì ñå÷åíèåì, íà ñêîëüêî ÿ ïîíÿë, ÿ âçÿë êàê áû îñíîâó øàãà ñå÷åíèÿ
//îòñ÷åò áåðåòñÿ îò õàÿ åñëè òðàëèì ñåëë îðäåðà, è îò ëîó åñëè òðàëèì áàé îðäåðà
//Òðàë òàêæå çàêðûâàåò ïî ðûíêó îòêðûòå îðäåðà ñèìâîëà ïî âðåìåíè,
//â ïÿòíèöó çàêðûâàåò íà ÷àñ ðàíüøå, è ìèíóòû â ïÿòíèöó íå ó÷èòûâàþòñÿ
//------------------------------------------------------------------------------------------
extern int CloseHour = 22; //âðåìÿ (÷àñû)ïîñëå êîòîðîãî çàêðîåì âñå îòêðûòûå îðäåðà ñèìâîëà
extern int CloseMinute = 0; //âðåìÿ çàêðûòèÿ, ìèíóòû
extern bool clTime = false; //åñëè true - èñïîëüçîâàòü çàêðûòèå âñåõ îðäåðîâ ïî âðåìåíè
extern bool comment = true; //åñëè true - âêë. åñëè false - âûêë. êîìåíòàðèè íà ãðàôèêå
extern bool profit = true; //åñëè true - òðàëèò òîëüêî ïðè ïðîôèòå, åñëè false - òî ñðàçó òðàëèò
//------------------------------------------------------------------------------------------
double high,low,Hi,Lo,range,Step,Tick;
double SeLLsL,BuysL;
int i_,cn=0,Day_=0;
int slip = 3,q = 1;
//-----------------------------------------------------------------------------------------
int init(){
if(Digits==3 || Digits==5) q=10;
slip = slip * q;
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
return(0);}
//-----------------------------------------------------------------------------------------
int start()
{
if(clTime){
if (DayOfWeek()==5 && Hour()==CloseHour-1 && Minute()>=CloseMinute)
{CloseAllPos(); Print("Çàêðûò ïî âðåìåíè ðàíüøå, ñåãîäíÿ Ïÿòíèöà!!!");}
if (Hour()==CloseHour && Minute()>=CloseMinute){CloseAllPos(); Print("Çàêðûò ïî âðåìåíè");}
}
high = iHigh(Symbol(),PERIOD_D1,1); low = iLow(Symbol(),PERIOD_D1,1);
range = high - low;
Step = range*0.236;
Day_ = DayOfYear();
for (cn=0; Day_==TimeDayOfYear(Time[cn]); cn++){}
i_ = iHighest(Symbol(),0,MODE_HIGH,cn,0); Hi = iHigh(Symbol(),0,i_);
i_ = iLowest(Symbol(),0,MODE_LOW,cn,0); Lo = iLow(Symbol(),0,i_);
for(int cnt=1; cnt<30; cnt++){
if(Lo+Step*cnt+Step > Bid && Lo+Step*cnt <= Bid){BuysL = (Lo+Step*cnt)-Step; break;}}
for(cnt=1; cnt<30; cnt++){
if(Hi-Step*cnt-Step < Ask && Hi-Step*cnt >= Ask){SeLLsL = (Hi-Step*cnt)+Step; break;}}
if(comment){
Comment("\n"," Today = " + TimeToStr(TimeCurrent()),"÷."," Step = ",DoubleToStr(Step,Digits)
,"\n"," BuysL = ",DoubleToStr(BuysL,Digits)," SeLLsL = ",DoubleToStr(SeLLsL,Digits));}
for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()==Symbol()){
TrailingStop();}}}
return(0);
}
//----------------------------------------------------------------------------------------
void TrailingStop() {
int Stlev;
double Up,Dn,Sl,B_,A_;
Stlev = MarketInfo(Symbol(),MODE_STOPLEVEL);
Up = NormalizeDouble(BuysL,Digits); Dn = NormalizeDouble(SeLLsL,Digits);
Sl = NormalizeDouble(Stlev*Tick,Digits);
if(OrderType()==OP_BUY) {
RefreshRates();
B_ = NormalizeDouble(Bid,Digits);
if (!profit || OrderOpenPrice()<Up) {
if (OrderStopLoss()<Up && B_-Sl>Up) {
OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,Violet);
return;
}}}
if(OrderType()==OP_SELL) {
RefreshRates();
A_ = NormalizeDouble(Ask,Digits);
if (!profit || OrderOpenPrice()>Dn) {
if (OrderStopLoss()>Dn && A_+Sl<Dn) {
OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,Violet);
return;
}}}
}
//----------------------------------------------------------------------------------------
void CloseAllPos()
{
for(int i=0;i<OrdersTotal();i++){
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
RefreshRates();
if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slip,Yellow); i--;}
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slip,Yellow); i--;}
}
}
//----------------------------------------------------------------------------------------
Comments