Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
macd_v3
//+-------------------------------------------------------------------------+
//| ÐÑÑÑаÑ.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| 2SI-08 Rudenko |
//| http://www.metaquotes.net |
//+-------------------------------------------------------------------------+
#property strict
#property copyright "2SI-08 Rudenko"
#property link "http://www.metaquotes.net"
/*
1 GBPUSD, 4h ÐиконÑÑ ÐºÑпÑÐ²Ð»Ñ Ð¿Ñи пеÑеÑÐ¸Ð½Ñ Ð¾ÑÑилÑÑоÑа СÑоÑ
аÑÑики(17, 9) Ð·Ð½Ð¸Ð·Ñ Ð´Ð¾Ð³Ð¾Ñи в 25% зонÑ.
- Ð´ÐµÐ¿Ð¾Ð·Ð¸Ñ 1000$;
- 0.1 лоÑ;
- комÑÑÑÑ 0 за лоÑ;
- ÑпÑед вÑдповÑдно до ÑнÑÑÑÑменÑа;
- Ð¼Ð¾Ð´ÐµÐ»Ñ ÑеÑÑÑÐ²Ð°Ð½Ð½Ñ OHLC points (fast).
double iStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field, int mode, int shift)
РаÑÑÐµÑ Stochastic Oscillator.
ÐаÑамеÑÑÑ:
symbol - СимволÑное Ð¸Ð¼Ñ Ð¸Ð½ÑÑÑÑменÑа, на даннÑÑ
коÑоÑого бÑÐ´ÐµÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑоÑ. NULL ознаÑÐ°ÐµÑ ÑекÑÑий Ñимвол.
timeframe - ÐеÑиод. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из пеÑиодов гÑаÑика. 0 ознаÑÐ°ÐµÑ Ð¿ÐµÑиод ÑекÑÑего гÑаÑика.
%Kperiod - ÐеÑиод(колиÑеÑÑво баÑов) Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¸ %K.
%Dperiod - ÐеÑиод ÑÑÑÐµÐ´Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¸ %D.
slowing - ÐнаÑение замедлениÑ.
method - ÐеÑод ÑÑÑеднениÑ. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»ÑбÑм из знаÑений меÑодов ÑколÑзÑÑего ÑÑеднего (Moving Average).
price_field - ÐаÑамеÑÑ Ð²ÑбоÑа Ñен Ð´Ð»Ñ ÑаÑÑеÑа. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ из ÑледÑÑÑиÑ
велиÑин: 0 - Low/High или 1 - Close/Close.
mode - ÐÐ½Ð´ÐµÐºÑ Ð»Ð¸Ð½Ð¸Ð¸ индикаÑоÑа. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»ÑбÑм из знаÑений иденÑиÑикаÑоÑов линий индикаÑоÑов.
shift - ÐÐ½Ð´ÐµÐºÑ Ð¿Ð¾Ð»ÑÑаемого знаÑÐµÐ½Ð¸Ñ Ð¸Ð· индикаÑоÑного бÑÑеÑа (Ñдвиг оÑноÑиÑелÑно ÑекÑÑего баÑа на Ñказанное колиÑеÑÑво пеÑиодов назад).
*/
extern double Distance= 0.0001;
extern double SL=50,TP=50,Level=50,TRAILING=10;
//extern double LOTS=0.1;
int profitOrders = 0, ordersTotal = 0;
double percents;
extern double startLot=0.01;
extern int Sl_Tp_level=50;
double Lot;
double account;
bool isOp=false;
int ticket;
void Size(bool isProfit)
{
double minLot=MarketInfo(Symbol(),MODE_MINLOT);
double minPrice=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Lot=startLot;
if(isProfit)
{
if(Lot*2*minPrice>AccountFreeMargin())
{
Lot*=2;
Comment("Profit. Cannot double lot because of lack of money. Current Lot ",Lot);//Comment("The current volume of operations is ",Lot);
}
else
{
if(Lot<=MarketInfo(Symbol(),MODE_MAXLOT)&&GetLastError()!=131)
Lot=minLot;
Comment("Profit. Lot doubled. Current Lot ",Lot);
}
}
else
{
Lot=startLot;
if(Lot*minPrice>AccountFreeMargin())
{
if(minLot*minPrice>AccountFreeMargin())
{
Lot=0;
Comment("Loss. There is no money for minimal lot. Current Lot ",Lot);
}
else
{
Lot=minLot;
Comment("Loss. Lot returned to its minimal size. Current Lot ",Lot);
}
}
else
{
Comment("Loss. Lot returned to its starting size. Current Lot ",Lot);
}
}
}
//--------------------------------------------------------
void ParabolStop()
{
double StopCurrent=0;
double StopRequired=0;
double StopAllowed=0;
double Spread=0;
double Minimum_Distance=0;
Spread=MarketInfo(Symbol(), MODE_SPREAD)*Point;
Minimum_Distance=MarketInfo(Symbol(), MODE_STOPLEVEL)*Point;
for(int i=0;i<OrdersTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==FALSE) break;
if (OrderSymbol()==Symbol())
{
StopCurrent=OrderStopLoss();
if ((OrderType()==OP_BUY) && (Close[0]>iSAR(NULL,0,0.02,0.2,0)))
{
StopRequired=iSAR(NULL,0,0.02,0.2,0)-Distance;
StopAllowed=Close[0]-Minimum_Distance;
if (StopAllowed < StopRequired) StopRequired=StopAllowed;
if ((StopRequired > StopCurrent) && (StopRequired >= OrderOpenPrice()))
OrderModify(OrderTicket(),OrderOpenPrice(),StopRequired,OrderTakeProfit(),0);
}
if ((OrderType()==OP_SELL) && (Close[0]<iSAR(NULL,0,0.02,0.2,0)))
{
StopRequired=iSAR(NULL,0,0.02,0.2,0)+Spread+Distance;
StopAllowed=Close[0]+Spread+Minimum_Distance;
if (StopAllowed > StopRequired) StopRequired=StopAllowed;
if (((StopRequired < StopCurrent) || (StopCurrent == 0)) && (StopRequired <= OrderOpenPrice()))
OrderModify(OrderTicket(),OrderOpenPrice(),StopRequired,OrderTakeProfit(),0);
}
}
}
}
int init()
{
Lot=startLot;
Comment("The starting volume of operations is ",Lot);
return(0);
return(0);
}
int deinit()
{
return(0);
}
bool ok()
{
if(OrdersTotal()>0){return (false);}
if(iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_MAIN, 0)>iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 0)
&& iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_MAIN, 1)<=iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 1)
&& iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 0)<25)
{
Alert("Good market situation for open position");
Alert("Level=",Level, " SL=",SL," TP=",TP);
return(true);
}
return(false);
}
bool obr()
{
if(iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_MAIN, 0)<=iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 0)
&& iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_MAIN, 1)>iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 1)
&& iStochastic(Symbol(), 0, 17, 9, 3, MODE_SMA, 0, MODE_SIGNAL, 0)>75)
{
Alert("Good market situation for closing position");
Alert("Level=",Level, "\tSL=",SL,"\tTP=",TP);
return(true);
}
return(false);
}
int start()
{
if (Symbol() != "GBPUSD")
{
Alert("This expert works only with GBPUSD");
return(0);
}
if (Period()!=PERIOD_H4)
{
Alert("This expert for h4 period only!");
return(0);
}
if (AccountFreeMargin()<120)
{
Alert("You must have more then 120 FreeMargin!");
return(0);
}
if (Bars < 100)
{
Alert("Must be more then 100 bars!!!");
return(0);
}
GlobalVariableSet( "vGrafEquity" , AccountEquity());
GlobalVariableSet( "vGrafBalance" , AccountBalance());
Level=MarketInfo("GBPUSD",MODE_STOPLEVEL);
double SLB=Ask-(3.0*Level)*Point;
double TPB=Bid+(22.0*Level)*Point;
double SLS=Bid-(3.0*Level)*Point;
double TPS=Ask+(22.0*Level)*Point;
if (OrdersTotal()>0)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if (OrderType()== OP_BUY)
{
if (OrderOpenPrice()-Ask <= TRAILING*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),SL+TRAILING*Point,OrderTakeProfit(),0,Yellow);
Alert("СÑопÐоÑÑ Ð±Ñл пеÑемеÑÑн ТÑейлингСÑопом");
return(0);
}
}
if (OrderType()== OP_BUY)
{
if (Bid-OrderOpenPrice() <= TRAILING*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP+TRAILING*Point,0,Red);
Alert("СÑопÐоÑÑ Ð±Ñл пеÑемеÑÑн ТÑейлингСÑопом");
return(0);
}
}
if (obr())
{
if(OrdersTotal()>0)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
Alert("ÐолÑÑен обÑаÑнÑй Ñигнал Ð¾Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ индикаÑоÑа.");
}
else
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,TPS,SLS,"Expert order",0,0,Green);
ordersTotal ++;
account=AccountBalance();
isOp=true;
Alert("Ðо показаниÑм Ñказанного индикаÑоÑа оÑкÑÑÑа Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑиÑ");
}
}
}
if (ok())
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,SLB,TPB,"Expert order",0,0,Green);
ordersTotal ++;
account=AccountBalance();
isOp=true;
Alert("Ðо показаниÑм Ñказанного индикаÑоÑа оÑкÑÑÑа Ð½Ð¾Ð²Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑиÑ");
}
ParabolStop();
if(isOp)
{ if(AccountBalance()>account)
Size(true);
if(AccountBalance()<account)
Size(false);
if(AccountBalance()!=account)
isOp=false;
}
return (0);}
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
---