Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
TradeChannell_v1
//+------------------------------------------------------------------+
//| TradeChannell.mq4 |
//| Copyright © 2010, Korvin ® Co. |
//| http://alecask.narod.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Korvin® Co."
#property link "http://alecask.narod.ru/"
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|--------------- Ñîâåòíèê "Òîðãîâëÿ â êàíàëå" ---------------------|
//| Òîðãîâëÿ ïðîèñõîäèò â êàíàëå, êîòîðîìó ïðè ñîçäàíèè íóæíî |
//| ïðèñâîèòü èìÿ: "TradeCannel". |
//| Îñíîâíàÿ ëèíèÿ íèñõîäÿùåãî êàíàëà ïðîâîäèòñÿ ïî íèñõîäÿùèì |
//| ìàêñèìóìàì è îïðåäåëÿåò óðîâåíü îòêðûòèÿ êîðîòêèõ ïîçèöèé. |
//| Âñïîìîãàòåëüíàÿ ëèíèÿ íèñõîäÿùåãî êàíàëà ïðîâîäèòñÿ íèæå ëèíèè |
//| îòêðûòèÿ îðäåðîâ è îïðåäåëÿåò óðîâåíü çàêðûòèÿ êîðîòêèõ ïîçèöèé. |
//| Îñíîâíàÿ ëèíèÿ âîñõîäÿùåãî êàíàëà ïðîâîäèòñÿ ïî âîñõîäÿùèì |
//| ìèíèìóìàì è îïðåäåëÿåò óðîâåíü îòêðûòèÿ äëèíûõ ïîçèöèé. |
//| Âñïîìîãàòåëüíàÿ ëèíèÿ âîñõîäÿùåãî êàíàëà ïðîâîäèòñÿ âûøå ëèíèè |
//| îòêðûòèÿ îðäåðîâ è îïðåäåëÿåò óðîâåíü çàêðûòèÿ äëèíûõ ïîçèöèé. |
//| Êàêèå èìåííî îðäåðà îòêðûâàòü ñîâåòíèê îïðåäåëÿåò ïî íàêëîíó |
//| êàíàëà. Îäíîâðåìåííî îòêðûâàåòñÿ ÒÎËÜÊÎ ÎÄÈÍ îðäåð. |
//| Ïàðàìåòð Delta îïðåäåëÿåò ðàññòîÿíèå â ïóíêòàõ äî ëèíèè îòêðûòèÿ |
//| è ëèíèè çàêðûòèÿ îðäåðîâ èçíóòðè êàíàëà. Ïðè îòêðûòèè îðäåðà |
//| öåíà Bid äîëæíà íàõîäèòüñÿ â ïðåäåëàõ [opr±Delta ; opr]; ïðè |
//| çàêðûòèè îðäåðà öåíà Bid äîëæíà áûòü áîëüøå èëè ìåíüøå |
//| [cpr±Delta] â çàâèñèìîñòè îò òèïà îðäåðà è íàïðàâëåíèÿ òîðãîâîãî |
//| êàíàëà, ãäå: |
//| opr - ðàññ÷èòàííîå çíà÷åíèå ëèíèè îòêðûòèÿ îðäåðà íà òåêóùåì |
//| áàðå; |
//| cpr - ðàññ÷èòàííîå çíà÷åíèå ëèíèè çàêðûòèÿ îðäåðà íà òåêóùåì |
//| áàðå; |
//| Ïàðàìåòð StopLoss âûñòàâëÿåòñÿ íà ñëó÷àé ïðîáîÿ êàíàëà âðó÷íóþ. |
//| Ïàðàìåòð TakeProfit âûñòàâëÿåòñÿ â 50 ïóíêòàõ îò ëèíèè çàêðûòèÿ. |
//| àâòîìàòè÷åñêè. |
//| Ïàðàìåòð Risk îïðåäåëÿåò ìàêñèìàëüíûé ðèñê ïðè îòêðûâàåìîé |
//| ñäåëêå è ñëóæèò äëÿ ðàññ÷¸òà ìàêñèìàëüíîãî ëîòà. Äëÿ îòîáðàæåíèÿ |
//| ðåàëüíîãî ðàññ÷èòàííîãî ðèñêà ñäåëêè çàäàéòå çíà÷åíèå true |
//| ïàðàìåòðó ShowRisk. |
//| Ïàðàìåòð PoTrendu îïðåäåëÿåò íàïðàâëåíèå òîðãîâëè ÏÎ èëè ÏÐÎÒÈÂ |
//| íàïðàâëåíèÿ òðåíäà, îïðåäåëÿåìîãî ýêñïåðòîì ñàìîñòîÿòåëüíî ïî |
//| íàêëîíó êàíàëà è ïî âçàèìíîìó ðàñïîëîæåíèþ ëèíèé îòêðûòèÿ è |
//| çàêðûòèÿ òîðãîâûõ îðäåðîâ. |
//| Îòêðûòèå è çàêðûòèå îðäåðîâ ìîæåò ñîïðîâîæäàòüñÿ çâóêîâûì |
//| ñèãíàëîì, åñëè Âû çàäàäèòå çíà÷åíèå true ïàðàìåòðó SoundOn è |
//| çàãðóçèòå çâóêîâûå ôàéëû OrderSellOpen.wav , OrderBuyOpen.wav , |
//| è OrderClose.wav â ïàïêó: ÊÀÒÀËÎÃ ÒÅÐÌÈÍÀËÀ/sounds/.... |
//| Çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ ïî óìîë÷àíèþ ïðåäíàçíà÷åíû äëÿ ïàðû |
//| òèïà EURUSD; äëÿ òàêèõ ïàð, êàê XAUUSD èëè USDJPY ïðîùå èçìåíèòü |
//| çíà÷åíèÿ ïàðàìåòðîâ â êîäå è ïåðåêîìïèëèðîâàòü ñîâåòíèêà. |
//|--------------------- Ïîïóòíîãî Âàì òðåíäà -----------------------|
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Channell.mq4 |
//| Copyright © 2010, Korvin ® Co. |
//| http://alecask.narod.ru/ |
//+------------------------------------------------------------------+
extern int MaxRisk=2; // Çàäàâàåìûé ìàêñèìàëüíûé ðèñê
extern bool ShowRisk=true; // Ïîêàçàòü ðåàëüíûé ðèñê
extern bool PoTrendu=true; // Òîðãîâàòü ïî òðåíäó?
extern int StopLoss=50; // Óñòàíîâèòü StopLoss
extern int Delta=5; // Øèðèíà çîíû ñðàáàòûâàíèÿ
extern int DeltaFactor=2; // Ðàñøèðåíèå çîíû çàêðûòèÿ îðäåðîâ
extern bool SoundOn=true; // Âêëþ÷èòü çâóê?
int tic = 0; // Íîìåð îòêðûòîãî îðäåðà
int TakeProfit;
//+------------------------------------------------------------------+
//| ############### Áëîê èíèöèàëèçàöèè ïåðåìåííûõ ################## |
//+------------------------------------------------------------------+
int init() {Comment("");return(0);}
//+------------------------------------------------------------------+
//| ############### Áëîê äåèíèöèàëèçàöèè ïåðåìåííûõ ################ |
//+------------------------------------------------------------------+
int deinit() {Comment("");return(0);} // Î÷èñòêà òåðìèíàëà
//+------------------------------------------------------------------+
//| ############# Îñíîâíàÿ ôóíêöèÿ îáðàáîòêè ñîáûòèé ############### |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//| Ðóòèííûå ïðîâåðêè |
//+------------------------------------------------------------------+
if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // â âûõîäíûå
// íå ðàáîòàåì
if(!IsTradeAllowed()) return(0); // ïðîïóñòèì òèê åñëè
// òåðìèíàë çàíÿò
//+------------------------------------------------------------------+
//| Áëîê ñáîðà è îðàáîòêè äàííûõ |
//+------------------------------------------------------------------+
string tRend=""; string Spaces="\n ";
string name="TradeChannel"; string str1; string str2; string str3;
RefreshRates();
//ïðîâåðèì ÷òî òîðãîâûé êàíàë íàðèñîâàí ïðàâèëüíî (ïî äâèæåíèþ öåíû)
datetime t1=ObjectGet(name,OBJPROP_TIME1);
datetime t2=ObjectGet(name,OBJPROP_TIME2);
datetime t3=ObjectGet(name,OBJPROP_TIME3);
int err=GetLastError();
if (err==4202) {Comment(err," Íàðèñóéòå òîðãîâûé êàíàë è äàéòå åìó èìÿ \"TradeChannel\"."); return;}
if(t1>t2)
{Comment("Íåïðàâèëüíî íàðèñîâàí òîðãîâûé êàíàë!");
return(0);}
//ïðîäîëæèì ëèíèè êàíàëà (ñâîéñòâî ëó÷)
ObjectSet(name,OBJPROP_RAY,true);
//îïðåäåëèì òðåíä (ââåðõ èëè âíèç)
bool trend=false;
double p1=ObjectGet(name,OBJPROP_PRICE1);
double p2=ObjectGet(name,OBJPROP_PRICE2);
double p3=ObjectGet(name,OBJPROP_PRICE3);
if(p1<p2) trend=true;
if(trend) tRend=" Âîñõîäÿùèé ";
else tRend=" Íèñõîäÿùèé ";
Comment(p1," ",p2," ",tRend);
double opr=ObjectGetValueByShift(name,0);// îïðåäåëèì òåêóùåå çíà÷åíèå
// ëèíèè îòêðûòèÿ îðäåðîâ opr,
// íàéä¸ì òåêóùåå çíà÷åíèå ëèíèè çàêðûòèÿ îðäåðîâ cpr,
int control=0; // êîíòðîëüíàÿ öèôðà
int s1 = iBarShift( NULL, 0, t1, control); // ñìåùåíèå áàðà öåíû p1
int s2 = iBarShift( NULL, 0, t2, control); // ñìåùåíèå áàðà öåíû p2
int s3 = iBarShift( NULL, 0, t3, control); // ñìåùåíèå áàðà öåíû p3
// ðàññ÷¸ò êîýôôèöèåíòîâ óðàâíåíèÿ ëèíèè îòêðûòèÿ îðäåðîâ
double A=p2-p1; double B=s1-s2; double C=s2*p1-s1*p2;
// ðàññ÷¸ò ðàññòîÿíèÿ ìåæäó ëèíèÿìè ïîêóïêè è ïðîäàæè
double d=(A*s3+B*p3+C)/MathSqrt(MathPow(A,2.0)+MathPow(B,2.0))/MathCos(MathArctan(A/B));
double cpr=opr+d; // òåêóùåå çíà÷åíèå öåíû ïðîäàæè
int TakeProfit=d/Point+50;
//---------------------------------- áëîê ðàññ÷¸òà ðåàëüíîãî ðèñêà ---
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
double MyRisk = MathFloor(Lot*10000*One_Lot/Free)/100;
//------------------------- áëîê ôîðìèðîâàíèÿ ñëóæåáíîé èíôîðìàöèè ---
if (tic>0) str1="\n\x95 Îòêðûò îðäåð ¹ "+tic;
else str1="";
if (ShowRisk) str2="\n\x95 Ìàêñèìàëüíûé ðèñê: "+DoubleToStr(MyRisk,2)+" %";
else str2="";
if (PoTrendu) str3="\n\x95 Ðåæèì ðàáîòû: ïî òðåíäó";
else str3="\n\x95 Ðåæèì ðàáîòû: ïðîòèâ òðåíäà";
if (MathAbs(d/Point)<=15) Comment("Name=",name," Ñëèøêîì óçêèé êàíàë äëÿ òîðãîâëè, âñåãî ",
DoubleToStr(d/Point,0)," ïóíêòîâ.");
Comment("\n\x97 ",tRend,"\"",name,"\" \x97",str1,str2,
" \n\x95 Øèðèíà êàíàëà ",MathRound(d/Point)," ïóíêòîâ,\n\x97 Òåêóùèå: \x97\n\x95 Öåíà îòêðûòèÿ îðäåðîâ: ",
DoubleToStr(opr,5),"\n\x95 Öåíà çàêðûòèÿ îðäåðîâ: ",DoubleToStr(cpr,5),
"\n\x97 Áóäóùèå: \x97\n\x95 Stop Loss: ",DoubleToStr((opr-StopLoss*Point),5),
"\n\x95 Take Profit: ",DoubleToStr((opr+TakeProfit*Point),5));
//+------------------------------------------------------------------+
//ïîäñ÷èòàåì êîë-âî îðäåðîâ
int oBuy=0,oSell=0;
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol())
{if(OrderType()==OP_BUY) oBuy++;
if(OrderType()==OP_SELL) oSell++;}
if(oBuy+oSell==0) tic=0;
//+------------------------------------------------------------------+
//| Áëîê çàêðûòèÿ îðäåðîâ |
//+------------------------------------------------------------------+
//åñëè åñòü îðäåðà è öåíà ïîäîøëà ê ëèíèè çàêðûòèÿ - çàêðîåì îðäåð
double tp=0,sl=0;
Lot=GetLot(MaxRisk);
if(tic>0 && Lot!=0 && Bid<=cpr && Bid>=cpr-DeltaFactor*Delta*Point) {
CloseOrder(tic); tic=0; PlaySound("OrderClose.wav"); Sleep(5000);}
//+------------------------------------------------------------------+
//| Áëîê îòêðûòèÿ îðäåðîâ |
//+------------------------------------------------------------------+
//åñëè íåò îðäåðîâ è öåíà ïîäîøëà ê ëèíèè îòêðûòèÿ - îòêðîåì îðäåð
tp=0;
sl=0;
Lot=GetLot(MaxRisk);
if(Lot==0.0) {Alert("Íåäîñòàòî÷íî ñðåäñòâ!");return(0);}
//+----------------------------------------------------- ÏÎÊÓÏÊÀ ---+
if((oBuy+oSell==0 && trend && PoTrendu && Bid>=opr && Bid<=opr+Delta*Point)||
(oBuy+oSell==0 && !trend && !PoTrendu && Bid>=opr && Bid<=opr+Delta*Point))
{if(TakeProfit>0) tp=Ask+TakeProfit*Point;
if(StopLoss>0) sl=Ask-StopLoss*Point;
tic=NewOrder(OP_BUY,Lot,Ask,tp,sl);
if (SoundOn&&tic>0) PlaySound("OrderBuyOpen.wav"); Sleep(5000);
}
//+----------------------------------------------------- ÏÐÎÄÀÆÀ ---+
if((oBuy+oSell==0 && !trend && PoTrendu && Ask<=opr && Ask>=opr-Delta*Point)||
(oBuy+oSell==0 && trend && !PoTrendu && Ask<=opr && Ask>=opr-Delta*Point))
{if(TakeProfit>0) tp=Bid-TakeProfit*Point;
if(StopLoss>0) sl=Bid+StopLoss*Point;
tic=NewOrder(OP_SELL,Lot,Bid,tp,sl);
if (SoundOn&&tic>0) PlaySound("OrderSellOpen.wav"); Sleep(5000);
}
//==================================================== êîíåö áëîêà ==
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| ################# Áëîê ïîäïðîãðàìì ïîëüçîâàòåëÿ ################ |
//+------------------------------------------------------------------+
double GetLot(int Risk)
{double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);
return(Lot);}
//+------------------------------------------------------------------+
int NewOrder(int Cmd,double Lot,double PR=0,double TP=0,double SL=0)
{while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=NormalizeDouble(Ask,Digits);
if(TP==0 && TakeProfit>0) TP=PR+TakeProfit*Point;
if(SL==0 && StopLoss>0) SL=PR-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=NormalizeDouble(Bid,Digits);
if(TP==0 && TakeProfit>0) TP=PR-TakeProfit*Point;
if(SL==0 && StopLoss>0) SL=PR+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
if(tic<0) Print("Îøèáêà îòêðûòèÿ îðäåðà: ",GetLastError());
return(tic);}
//+------------------------------------------------------------------+
void CloseOrder(int tic)
{double PR=0;
while(!IsTradeAllowed()) Sleep(100);
if(OrderType()==OP_BUY) PR=NormalizeDouble(Bid,Digits);
if(OrderType()==OP_SELL) PR=NormalizeDouble(Ask,Digits);
if(OrderSelect(tic,SELECT_BY_TICKET))
if(!OrderClose(OrderTicket(),OrderLots(),PR,3,CLR_NONE))
Print("Îøèáêà çàêðûòèÿ îðäåðà: ",GetLastError());
return;}
//+------------------------------------------------------------------+
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
---