TradeChannell_v1

Author: Copyright � 2010, Korvin� Co.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Miscellaneous
It plays sound alertsIt issuies visual alerts to the screen
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---