Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
Trall_Rabbit_SL_MM3Tp
//+----------------------------------------------------------------------------------------+
//| Trall_Rabbit_SL_MM+Tp.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
//îòñ÷åò áåðåòñÿ îò õàÿ åñëè òðàëèì ñåëë îðäåðà, è îò ëîó åñëè òðàëèì áàé îðäåðà
//Òðàë òàêæå çàêðûâàåò ïî ðûíêó îòêðûòûå îðäåðà ñèìâîëà ïî âðåìåíè,
//â ïÿòíèöó çàêðûâàåò íà ÷àñ ðàíüøå
//Äîáàâëåí ÌÌ ðàñ÷åòà ëîòà îò ïðîöåíòà äåïîçèòà çàâèñèìûé îò ïëå÷à, è ñòîïëîñà
//Íóæíî óñòàíîâèòü ïëå÷î Áðîêåðà âàøåãî, ìîåãî îíî ðàâíî Pleho = 200; - äëÿ ÷åãî ýòî íóæíî
//êîãäà áðîêåð àâòîìàòîì ïîíèçèò ïëå÷î òî âàøè ðèñêè ñðàçó áóäóò óìåíüøàòüñÿ ïðîïîðöèàíàëüíî
//ïëå÷ó ïðîöåíò îñòàíåòñÿ òàêèì æå è ïîòåðè ïðè ñòîïå áóäóò îäèíàêîâûìè êàê ïðè íà÷àëüíîì ïëå÷å
//Äàëåå ïðîöåíò îò äåïîçèòà Percent = 5; ñ êîòîðûì âû ìîæåòå ñåáå ïîçâîëèòü ðàñòàòüñÿ â ñëó÷àå ñòîïà
//StopLoss ïî óìîë÷àíèþ ðàâåí íóëþ, ñòîï áåðåòñÿ îò øàãà Rabbit åñëè øàã ìåíüøå 35 ïóíêòîâ(4-õ çíàê)
//òî øàã áóäåò ðàâåí 35 ïóíêòàì. Òàêæå ìîæíî ïðîñòî óñòàíîâèòü ñâîé ñòîï òîãäà ðàñ÷åò áóäåò
//ïî âàøåìó ñòîïó, åñëè ïîñòàâèòå StopLoss = 0; òî ðàñ÷åò ïî øàãó Rabbit
//Ñòîï Ëîññ óñòàíàâëèâàåòñÿ àâòîìàòè÷åñêè ïîñëå óñòàíîâêè âàìè îðäåðà.
//Òåéêïðîôèò óñòàíàëèâàåòñÿ òîæå àâòîìàòè÷åñêè = øàã Rabbit*5, èëè ìîæíî óñòàíîâèòü ñâîé òåéêïðîôèò
//åñëè TakeProfit = 0; òî òåéê óñòàíàâëèâàåòñÿ àâòîìàòè÷åñêè øàã Rabbit*5
//------------------------------------------------------------------------------------------
extern int Pleho = 200; //íà÷àëüíîå ïëå÷î, !!! ÓÑÒÀÍÎÂÈÒÜ ÏËÅ×Î ÍÀ×ÀËÜÍÎÅ !!!
extern int Percent = 5; //ïðîöåíò îò ñâîáîäíûõ ñðåäñòâ
extern int StopLoss = 0; //àäàïòèðîâàí ïîä 5-è çíàê, âûñòàâëÿòü çíà÷åíèå ñòîïà êàê äëÿ 4-õ çíàêà
extern int TakeProfit = 0; //àäàïòèðîâàí ïîä 5-è çíàê, âûñòàâëÿòü çíà÷åíèå òåéêà êàê äëÿ 4-õ çíàêà
extern int CloseHour = 22; //âðåìÿ (÷àñû)ïîñëå êîòîðîãî çàêðîåì âñå îòêðûòûå îðäåðà ñèìâîëà
extern int CloseMinute = 0; //âðåìÿ çàêðûòèÿ, ìèíóòû
extern bool clTime = false; //åñëè true - èñïîëüçîâàòü çàêðûòèå âñåõ îðäåðîâ ïî âðåìåíè
extern bool comment = true; //åñëè true - âêë. åñëè false - âûêë. êîìåíòàðèè íà ãðàôèêå
extern bool profit = false; //åñëè 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 st = 35;
bool init = false;//ïðè ñìåíå ñ÷¸òà, âêëþ÷åíèè/âûêëþ÷åíèè, ôóíêöèÿ init() íå âûçûâàåòñÿ ïîâòîðíî...
//-----------------------------------------------------------------------------------------
int init(){
TakeProfit = TakeProfit * q;
StopLoss = StopLoss * q;
if(init) return(0);
if(Digits==3 || Digits==5) q=10;
slip = slip * q;
st = st * q;
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
init = true;
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<50; cnt++){
if(Lo+Step*cnt+Step > Bid && Lo+Step*cnt <= Bid){BuysL = (Lo+Step*cnt)-Step; break;}}
for(cnt=1; cnt<50; cnt++){
if(Hi-Step*cnt-Step < Ask && Hi-Step*cnt >= Ask){SeLLsL = (Hi-Step*cnt)+Step; break;}}
if(TakeProfit==0)TakeProfit = (Step/Tick)*5;
if(StopLoss==0 && Step/Tick >= st)StopLoss = Step/Tick;
if(StopLoss==0 && Step/Tick <= st)StopLoss = st;
if(comment){
Comment("\n"," Today = " + TimeToStr(TimeCurrent()),"÷."," Step = ",Step/Tick
,"\n"," BuysL = ",DoubleToStr(BuysL,Digits)," SeLLsL = ",DoubleToStr(SeLLsL,Digits)
,"\n"," Ïëå÷î = ",Pleho,"\n"," Ïëå÷î Áðîêåðà = ",AccountLeverage()
,"\n"," Percent = ",Percent,"\n"," PercentLot = ",DoubleToStr(PercStopLots(StopLoss),2)
,"\n"," StopLoss = ",StopLoss
,"\n"," TakeProfit = ",TakeProfit);}
for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()==Symbol()){
TrailingStop(StopLoss,TakeProfit);}}}
return(0);
}
//----------------------------------------------------------------------------------------
void TrailingStop(int StLoss, int TkPofit) {
int Stlev;
double Up,Dn,Sl,B_,A_,Take,Loss;
Stlev = MarketInfo(Symbol(),MODE_STOPLEVEL); Sl = NormalizeDouble(Stlev*Tick,Digits);
Up = NormalizeDouble(BuysL,Digits); Dn = NormalizeDouble(SeLLsL,Digits);
RefreshRates();
B_ = NormalizeDouble(Bid,Digits); A_ = NormalizeDouble(Ask,Digits);
if (OrderStopLoss()!=0) {
if(OrderType()==OP_BUY) {
if ((!profit || OrderOpenPrice()<Up)&&(OrderStopLoss()<Up && B_-Sl>Up)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Up,OrderTakeProfit(),0,Violet);}}
if(OrderType()==OP_SELL){
if ((!profit || OrderOpenPrice()>Dn)&&(OrderStopLoss()>Dn && A_+Sl<Dn)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Dn,OrderTakeProfit(),0,Violet);}}
}
if (OrderStopLoss()==0||OrderTakeProfit()==0) {
if(OrderType()==OP_BUY||OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP) {
Loss = NormalizeDouble(OrderOpenPrice()-StLoss*Tick,Digits);
Take = NormalizeDouble(OrderOpenPrice()+TkPofit*Tick,Digits);
OrderModify(OrderTicket(),OrderOpenPrice(),Loss,Take,0,Violet);}
if(OrderType()==OP_SELL||OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP) {
Loss = NormalizeDouble(OrderOpenPrice()+StLoss*Tick,Digits);
Take = NormalizeDouble(OrderOpenPrice()-TkPofit*Tick,Digits);
OrderModify(OrderTicket(),OrderOpenPrice(),Loss,Take,0,Violet);}
}
}
//----------------------------------------------------------------------------------------
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--;}
}
}
//----------------------------------------------------------------------------------------
double PercStopLots(int SL)
{
double Lots =MarketInfo(Symbol(),MODE_MINLOT);
string Symb =Symbol(); // Ôèíàíñîâûé èíñòðóì.
double min_lot =MarketInfo(Symbol(),MODE_MINLOT); // Ìèí. ðàçìåð. ëîòîâ
double max_lot =MarketInfo(Symbol(),MODE_MAXLOT); // Ìàêñ. ðàçì. ëîòîâ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);// Øàã èçìåíåí ðàçìåðà
double Free =AccountFreeMargin(); // Ñâîáîäíûå ñðåäñòâà
int Leve =AccountLeverage(); // Ïëå÷î Áðîêåðà
if(Percent!=0)
{
double lot = MathFloor(Free*Leve*Percent/100.0/Pleho/SL/Step)*Step;
if(lot < min_lot) lot = min_lot;
if(lot > max_lot) lot = max_lot;
}else lot=Lots; return(lot);}
//----------------------------------------------------------------------------------------
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---