Price Data Components
Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
4_PLC_fractals
#property copyright "Vyacheslav Barbakov | 4_PLC | 28 ôåâðàëÿ 2012 ãîäà"
#property link "barbakov@bk.ru"
//+-----------------------------------------------------------------------------------------------------------+
//| Âíåøíèå ïåðåìåííûå, ââîäèìûå ïåðåä çàïóñêîì ñîâåòíèêà |
//+-----------------------------------------------------------------------------------------------------------+
extern int MagicNumber = 0;
extern int spred_razmer = 15;
extern int filtr_razmer = 23;
extern double profit_close = 7;
extern double filtr_otstup_no_orders = 43;
extern double razmer_order_buy = 0.01;
extern double razmer_order_sell = 0.01;
extern int x5min = 2;
extern int x60min = 4;
//+-----------------------------------------------------------------------------------------------------------+
double spread;
bool close_all = false;
//+-----------------------------------------------------------------------------------------------------------+
int init()
{ // íà÷àëî ïðîöåäóðû init()
return(0);
} // êîíåö ïðîöåäóðû init()
//+-----------------------------------------------------------------------------------------------------------+
//| Òåëî ïðîãðàììû îáðàáîòêè êàæäîãî òèêà start() |
//+-----------------------------------------------------------------------------------------------------------+
int start()
{ // íà÷àëî ïðîöåäóðû start()
//+-----------------------------------------------------------------------------------------------------------+
//| Èíèöèàëèçàöèÿ ïåðåìåííûõ
//+-----------------------------------------------------------------------------------------------------------+
double buy_orders_price [];
double sell_orders_price [];
if (OrdersTotal()!=0)
{
ArrayInitialize (buy_orders_price, 0);
ArrayInitialize (sell_orders_price, 0);
}
//+-----------------------------------------------------------------------------------------------------------+
//| Èùåì áëèæàéøèå ôðàêòàëû íà 5 ìèíóòíîì ãðàôèêå
//+-----------------------------------------------------------------------------------------------------------+
double fractal_5min_hi, fractal_5min_low;
int f_5min_hi =0;
while(fractal_5min_hi == 0)
{
fractal_5min_hi = iFractals(NULL,5, 1, f_5min_hi);
f_5min_hi++;
}
int f_5min_low =0;
while(fractal_5min_low == 0)
{
fractal_5min_low = iFractals(NULL, 5, 2, f_5min_low);
f_5min_low++;
}
//+-----------------------------------------------------------------------------------------------------------+
//| Èùåì áëèæàéøèå ôðàêòàëû íà 15 ìèíóòíîì òàéìôðýéìå
//+-----------------------------------------------------------------------------------------------------------+
double fractal_15min_hi, fractal_15min_low;
int f_15min_hi =0;
while(fractal_15min_hi == 0)
{
fractal_15min_hi = iFractals(NULL,15, 1, f_15min_hi);
f_15min_hi++;
}
int f_15min_low =0;
while(fractal_15min_low == 0)
{
fractal_15min_low = iFractals(NULL, 15, 2, f_15min_low);
f_15min_low++;
}
//+-----------------------------------------------------------------------------------------------------------+
//| Èùåì áëèæàéøèå ôðàêòàëû íà 30 ìèíóòíîì òàéìôðýéìå
//+-----------------------------------------------------------------------------------------------------------+
double fractal_30min_hi, fractal_30min_low;
int f_30min_hi =0;
while(fractal_30min_hi == 0)
{
fractal_30min_hi = iFractals(NULL,30, 1, f_30min_hi);
f_30min_hi++;
}
int f_30min_low =0;
while(fractal_30min_low == 0)
{
fractal_30min_low = iFractals(NULL, 30, 2, f_30min_low);
f_30min_low++;
}
//+-----------------------------------------------------------------------------------------------------------+
//| Èùåì áëèæàéøèå ôðàêòàëû íà 60 ìèíóòíîì òàéìôðýéìå
//+-----------------------------------------------------------------------------------------------------------+
double fractal_60min_hi, fractal_60min_low;
int f_60min_hi =0;
while(fractal_60min_hi == 0)
{
fractal_60min_hi = iFractals(NULL, 60, 1, f_60min_hi);
f_60min_hi++;
}
int f_60min_low =0;
while(fractal_60min_low == 0)
{
fractal_60min_low = iFractals(NULL, 60, 2, f_60min_low);
f_60min_low++;
}
//+-----------------------------------------------------------------------------------------------------------+
//| Èùåì áëèæàéøèå ôðàêòàëû íà 60 ìèíóòíîì òàéìôðýéìå
//+-----------------------------------------------------------------------------------------------------------+
double fractal_240min_hi, fractal_240min_low;
int f_240min_hi =0;
while(fractal_240min_hi == 0)
{
fractal_240min_hi = iFractals(NULL, 240, 1, f_240min_hi);
f_240min_hi++;
}
int f_240min_low =0;
while(fractal_240min_low == 0)
{
fractal_240min_low = iFractals(NULL, 240, 2, f_240min_low);
f_240min_low++;
}
//+-----------------------------------------------------------------------------------------------------------+
//| Îïðåäåëÿåì óñëîâèå âû÷èñëåíèÿ ðàçìåðà ñïðåäà
//| åñëè íå óñòàíîâëåí â ðó÷íóþ (spred_ramer == 0) òî âû÷èñëÿåì èñõîäÿ èç ðûíî÷íûõ óñëîâèé
//+-----------------------------------------------------------------------------------------------------------+
if (spred_razmer == 0)
{
spread = NormalizeDouble(MarketInfo(Symbol(), MODE_SPREAD) * Point, Digits);
}
else
{
spread = NormalizeDouble(spred_razmer * Point, Digits);
}
double filtr = NormalizeDouble(filtr_razmer * Point, Digits);
//+-----------------------------------------------------------------------------------------------------------+
//+-----------------------------------------------------------------------------------------------------------+
//| Ïåðåáèðàåì îòêðûòûå ðûíî÷íûå îðäåðà è ôîðìèðóåì ìàññèâû: buy_orders_price [], sell_orders_price [] |
//+-----------------------------------------------------------------------------------------------------------+
int num_buy_orders_price = 0;
int num_sell_orders_price = 0;
bool est_sellstop = false;
bool est_buystop = false;
for (int ord = 0; ord < OrdersTotal(); ord ++)
if(OrderSelect(ord, SELECT_BY_POS))
{ // íà÷àëî ïåðåáîðà îòêðûòûõ îðäåðîâ
if ((OrderType() == 0) && OrderMagicNumber() == MagicNumber)
{ // BUY
buy_orders_price [num_buy_orders_price] = OrderOpenPrice();
num_buy_orders_price++;
}
if ((OrderType() == 4) && OrderMagicNumber() == MagicNumber)
{ // BUYSTOP
buy_orders_price [num_buy_orders_price] = OrderOpenPrice();
num_buy_orders_price++;
est_buystop = true;
}
if ((OrderType() == 1) && OrderMagicNumber() == MagicNumber)
{ // SELL
sell_orders_price [num_sell_orders_price] = OrderOpenPrice();
num_sell_orders_price++;
}
if ((OrderType() == 5) && OrderMagicNumber() == MagicNumber)
{ // SELLSTOP
sell_orders_price [num_sell_orders_price] = OrderOpenPrice();
num_sell_orders_price++;
est_sellstop = true;
}
} // êîíåö ïåðåáîðà îòêðûòûõ îðäåðîâ
//+-----------------------------------------------------------------------------------------------------------+
if (num_buy_orders_price !=0)
{
ArrayResize(buy_orders_price, num_buy_orders_price);
int num_max_level = ArrayMaximum(buy_orders_price, num_buy_orders_price, 0);
double level_max_buy = buy_orders_price[num_max_level];
}
if (num_sell_orders_price != 0)
{
ArrayResize(sell_orders_price, num_sell_orders_price);
int num_min_level = ArrayMinimum(sell_orders_price, num_sell_orders_price, 0);
double level_min_sell = sell_orders_price[num_min_level];
}
Comment("\n Ìàêñèìàëüíûé óðîâåíü BUY :" + level_max_buy + " èç " + ArrayRange(buy_orders_price, 0) +
"\n Ìèíèìàëüíûé óðîâåíü SELL :" + level_min_sell + " èç " + ArrayRange(sell_orders_price, 0));
//+-----------------------------------------------------------------------------------------------------------+
//| âûñòàâëÿåì îðäåðà
//+-----------------------------------------------------------------------------------------------------------+
if (candle_begin())
{ // íà÷àëî âûñòàâëÿåì îðäåðà
double hi_pred_svechi = NormalizeDouble((iHigh(NULL, 0, 1) + filtr + spread), Digits);
double low_pred_svechi = NormalizeDouble((iLow (NULL, 0, 1) - filtr), Digits);
if ((NormalizeDouble((iHigh(NULL, 0, 1) + spread), Digits) - level_max_buy > filtr_otstup_no_orders*Point && level_max_buy != 0 )
|| (level_max_buy == 0 && !est_buystop ))
{
double order_buy = razmer_order_buy;
int case_hi = 0;
if(hi_pred_svechi - fractal_5min_hi > 0)
{
case_hi = 1;
}
if(hi_pred_svechi - fractal_60min_hi > 0)
{
case_hi = 2;
}
switch (case_hi)
{
case 0 : order_buy = razmer_order_buy;
break;
case 1 : order_buy = x5min * razmer_order_buy;
break;
case 2 : order_buy = x60min * razmer_order_buy;
break;
}
int res_buystop = OrderSend(Symbol(),
OP_BUYSTOP,
order_buy,
hi_pred_svechi,
5,
0,
0,
"B",
MagicNumber,
0,
Green);
}
if ((level_min_sell - NormalizeDouble(iLow (NULL, 0, 1), Digits) > filtr_otstup_no_orders*Point)
|| (level_min_sell == 0 && !est_sellstop))
{
double order_sell = razmer_order_sell;
int case_low = 0;
if(low_pred_svechi < fractal_5min_low)
{
case_low = 1;
}
if(hi_pred_svechi < fractal_60min_low)
{
case_low = 2;
}
switch (case_low)
{
case 0 : order_sell = razmer_order_sell;
break;
case 1 : order_sell = x5min * razmer_order_sell;
break;
case 2 : order_sell = x60min * razmer_order_sell;
break;
}
int res_sellstop = OrderSend(Symbol(),
OP_SELLSTOP,
order_sell,
low_pred_svechi,
5,
0,
0,
"S",
MagicNumber,
0,
Red);
}
} // êîíåö âûñòàâëÿåì îðäåðà
//+-----------------------------------------------------------------------------------------------------------+
//| Çàêðûâàåì îðäåðà ïðè ïîÿâëåíèè ïðèáûëè çàäààíîé ïðè çàïóñêå ñîâåòíèêà
//+-----------------------------------------------------------------------------------------------------------+
if (AccountProfit() >= profit_close)
{
close_all = true;
}
if (close_all)
{ //íà÷àëî close_all
Print("Çàêðûâàåì âñå îðäåðà. Äîñòèãíóò óðîâåíü ïðèáûëè " + profit_close + " USD.");
for (int ord_close = 0; ord_close < OrdersTotal(); ord_close ++)
if(OrderSelect(ord_close, SELECT_BY_POS))
{ // íà÷àëî ïåðåáîðà îòêðûòûõ îðäåðîâ
if ((OrderType() == 0) && OrderMagicNumber() == MagicNumber)
{ // BUY
OrderClose(OrderTicket(), OrderLots(), Bid, 5, Green);
}
if ((OrderType() == 4) && OrderMagicNumber() == MagicNumber)
{ // BUYSTOP
OrderDelete(OrderTicket());
}
if ((OrderType() == 1) && OrderMagicNumber() == MagicNumber)
{ // SELL
OrderClose(OrderTicket(), OrderLots(), Ask, 5, Red);
}
if ((OrderType() == 5) && OrderMagicNumber() == MagicNumber)
{ // SELLSTOP
OrderDelete(OrderTicket());
}
} // êîíåö ïåðåáîðà îòêðûòûõ îðäåðîâ
} //êîíåö close_all
if (OrdersTotal() == 0)
{
close_all = false;
}
//+-----------------------------------------------------------------------------------------------------------+
return(0);
} // êîíåö ïðîöåäóðû start()
//+-----------------------------------------------------------------------------------------------------------+
//+-----------------------------------------------------------------------------------------------------------+
//| 1. Ïðîöåäóðà - Îïðåäåëÿåì ìîìåíò íàñòóïëåíèÿ íîâîé ñâå÷è |
//+-----------------------------------------------------------------------------------------------------------+
bool candle_begin()
{
static int diff_prev = 0;
bool rc = false;
int diff = TimeCurrent() - iTime(NULL, NULL, 0);
if(diff < diff_prev)
{
rc = true;
diff_prev = 0;
Print("Íà÷àëî íîâîé ñâå÷è");
Print("Ñïðýä: ", NormalizeDouble((Ask-Bid)/Point,0));
}
else
{
diff_prev = diff;
rc = false;
}
return(rc);
}
//+-----------------------------------------------------------------------------------------------------------+
//| Êîíåö |
//+-----------------------------------------------------------------------------------------------------------+
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
---