Orders Execution
0
Views
0
Downloads
0
Favorites
Teni_svechi_v1
//+------------------------------------------------------------------+
// 05.09.2011
#property copyright "Vladislav Semenov"
//ðàçðàáîòàíî ïîä 5-çíà÷íóþ ñèñòåìó (äëÿ 4-õ çíà÷íîé ïîäåëèòü íà 10:TakeProfit,StopLoss,TrailingStop,shum,dopusk
//ïðîòåñòèðîâàíî íà eurusd H1 è M30 çà 2011ã., çà 2010ã. - ñëèâàåò
//Ñòîÿò ïàðàìåòðû íà Í1, äëÿ Ì30: shum=180, TrailingStop=150,min=5, îñòàëüíîå êàê äëÿ Í1
//-------------------------------------------------Âíåøíèå ïåðåìåííûå-------------------------------------------------
extern double Prots = 0.4; // Óðîâåíü ðèñêà
extern double TakeProfit = 2000; // Óðîâåíü ôèêñàöèè ïðèáûëè â ïèïñàõ,íå äîëæåí ñðàáàòûâàòü, ïðèáûëü ïî òðàëó
extern double StopLoss = 2000; // Óðîâåíü ôèêñàöèè óáûòêîâ â ïèïñàõ, íå äîëæåí ñðàáàòûâàòü, âûõîä ïî òðàëó
extern double TrailingStop = 30; //Ñêîëüçÿùèé òåéê-ïðîôèò, íîëü ÷òîáû îòêëþ÷èòü åãî
extern int bar_kol = 2; // Ñòîëüêî áàðîâ æèâåò ïîçèöèÿ
extern bool autoStopLoss = true;//íà ñëåä.áàðå TakeProfit áóäåò ðàâåí öåíå îòêðûòèÿ ñäåëêè (áåçóáûòîê)
extern bool MaxHistoryCheck=false;//Åñëè âêë.-èñïîëüçóåò âñþ èñòîðèþ, èíà÷å-òîëüêî ïîñëåäíèé îðäåð (âêëþ÷èòü,åñëè òîðãóåòå íå òîëüêî ïî ýòîìó ñîâåòíèêó)
extern int min = 7; // ïîçèöèÿ îòêðûâàåòñÿ â ïåðâûå õ ìèíóò,çà îñòàâøååñÿ âðåìÿ ïðåäïîëîãàåì, ÷òî áóäåò îòêàò
extern double shum = 150;// íà ýòó âåëè÷èíó â ïèïñàõ äîëæíà óéòè öåíà îò öåíû îòêðûòèÿ áàðà
extern double dopusk = 0; // äëèíà ïðîòèâîïîëîæíîé òåíè íå äîëæíà ïðåâûøàòü ýòî çíà÷åíèå
extern int open_hour = 0; //Ñ ýòîãî ÷àñà ðàçðåøåíî îòêðûâàòü ñäåëêè
extern int stop_hour = 24; //Ïîñëå ýòîãî ÷àñà çàïðåùàåòñÿ îòêðûâàòü ñäåëêè
extern int magic = 56565;
extern int Slip = 10;// Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ (îðäåðîâ íà ïîêóïêó èëè ïðîäàæó)
//--------------------------------------------------------------------------------------------------------------------
int start()
//
{
int cnt, total,i;
total = OrdersTotal();
//Âêëþ÷åíèå/îòêëþ÷åíèå ïðîâåðêè âñåé èñòîðèè------------------------
if (MaxHistoryCheck==true) //Âêëþ÷åíà ïðîâåðêà âñåé èñòîðèè
{ int k_history=0; } //ïðîâåðÿþòñÿ âñå ñäåëêè ñ ñàìîé ïåðâîé
else k_history=(OrdersHistoryTotal());//ïðîâåðÿåòñÿ òîëüêî ïîñëåäíÿÿ ñäåëêà (óñêîðÿåò ïðîöåññ îïòèìèçàöèè è ðàáîòû ñîâåòíèêà)
// íàðàñòàþùèé ëîò
double Lots, Lotik;
Lotik=MathFloor(AccountFreeMargin()*Prots/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);// Ëîòû
if (Lotik >= 5) Lots=5;
if (Lotik < 5) Lots = Lotik;
//-----------------------------------------------------------------------------------------
// Çàïðåò íà òîðãîâëþ,åñëè íà ýòîì áàðå áûëà îòêðûòà ñäåëêà
int op = 0; // ââîäèì ïåðåìåííóþ, îíà ðàâíà 1, åñëè áûëà îòêðûòà èëè çàêðûòà ïîçèöèÿ íà áàðå, èíà÷å 0
for(i = k_history; i <= OrdersHistoryTotal(); i++)
{ OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if( iBarShift(NULL,NULL, OrderOpenTime() ) ==0 ) //
op=1;
}
//--------------------------------------------------1)Îòêðûòèå ïîçèöèè íà ïîêóïêó-------------------------------------
if(total<1 && Hour()>=open_hour && Hour()<=stop_hour && (TimeCurrent()-Time[0])<=min*60 ) // Íåò îòêðûòûõ îðäåðîâ+îãðàíè÷åíèå ïî âðåìåíè
{
if ( op==0
&& High[0]<=(Open[0]+dopusk*Point)
&& (Open[0]-NormalizeDouble(Ask,Digits))>=shum*Point
)
{ OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask,Digits), Slip, NormalizeDouble((Bid - StopLoss*Point),Digits), NormalizeDouble((Ask + TakeProfit*Point),Digits), "buy", magic, 0, Green);
}
//1á)Ïðîâåðêà íà âîçìîæíîñòü îòêðûòü êîðîòêóþ ïîçèöèþ
if ( op==0
&& Low[0]>=(Open[0]-dopusk*Point)
&& (NormalizeDouble(Bid,Digits)-Open[0])>=shum*Point
)
{ OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid,Digits), Slip, NormalizeDouble((Ask + StopLoss*Point),Digits), NormalizeDouble((Bid - TakeProfit*Point),Digits), "sell", magic, 0, Red); }
return(0);
}
//----------------------------------------------2)Çàêðûòèå ïîçèöèé ÷åðåç áàð íà áåçóáûòîê-----------------------------------------------
for(cnt = 0; cnt < total; cnt++)
{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol()==Symbol()) // ïðîâåðêà îòêðûòûõ ïîçèöèé
{
//2à)Çàêðûòèå íà áåçóáûòîê äëèííîé ïîçèöèè
if(OrderType() == OP_BUY) // îòêðûòà äëèííàÿ ïîçèöèÿ
{
if ( autoStopLoss == true
&& iBarShift(NULL,NULL, OrderOpenTime() ) ==1
&& NormalizeDouble(Bid,Digits) >=OrderOpenPrice()
)
{ OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slip, Violet); // çàêðûòèå ïîçèöèè
return(0); }
}
else
//2â)Çàêðûòèå íà áåçóáûòîê êîðîòêîé ïîçèöèè
{
if ( autoStopLoss == true
&& iBarShift(NULL,NULL, OrderOpenTime() ) ==1
&& NormalizeDouble(Ask,Digits) <=OrderOpenPrice()
)
{ OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slip, Violet); // çàêðûòèå ïîçèöèè
return(0); }
} } }
//---------------------------------------------------3)Çàêðûòèå ïîçèöèé -----------------------------------------------
for(cnt = 0; cnt < total; cnt++)
{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol()==Symbol()) // ïðîâåðêà îòêðûòûõ ïîçèöèé
{
//3à)Çàêðûòèå äëèííîé ïîçèöèè
if(OrderType() == OP_BUY) // îòêðûòà äëèííàÿ ïîçèöèÿ
{ if
(
iBarShift(NULL,NULL, OrderOpenTime() ) >=bar_kol //óñëîâèå çàêðûòèÿ ïî âðåìåíè
)
{ OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slip, Violet); // çàêðûòèå ïîçèöèè
return(0); }
//3á)Òðåéëèíã-ñòîï íà äëèííîé ïîçèöèè
if(TrailingStop > 0)
{ if(NormalizeDouble((Bid - OrderOpenPrice()),Digits) > NormalizeDouble(Point*TrailingStop,Digits))
{ if(NormalizeDouble(OrderStopLoss(),Digits) < (NormalizeDouble((Bid - Point*TrailingStop ),Digits)) || (OrderStopLoss() == 0))
{ OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble((Bid-Point*TrailingStop),Digits), OrderTakeProfit(), 0, Green);
return(0); } } }
}
else
//3â)Çàêðûòèå êîðîòêîé ïîçèöèè
{ if
(
iBarShift(NULL,NULL, OrderOpenTime() ) >=bar_kol //óñëîâèå çàêðûòèÿ ïî âðåìåíè
)
{ OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slip, Violet); // çàêðûòèå ïîçèöèè
return(0); }
//3ã)Òðåéëèíã-ñòîï íà êîðîòêîé ïîçèöèè
if(TrailingStop > 0)
{ if((NormalizeDouble(OrderOpenPrice(),Digits) - NormalizeDouble(Ask,Digits)) > NormalizeDouble(Point*TrailingStop,Digits))
{ if((NormalizeDouble(OrderStopLoss(),Digits) > (NormalizeDouble(Ask,Digits) + NormalizeDouble(Point*TrailingStop,Digits))) || (OrderStopLoss() == 0))
{ OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble((Ask + Point*TrailingStop),Digits), OrderTakeProfit(), 0,Red);
return(0); } } }
//----------------------------------------------------------------------------------------------------------------------
} } } 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
---