Author: Aleksey Fomichev, Copyright 2014,
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicatorDeMarker indicator
0 Views
0 Downloads
0 Favorites
Bulls_v2
//+------------------------------------------------------------------+
//|                                                        Bulls.mq4 |
//|                                Aleksey Fomichev, Copyright 2014, |
//|                                                 http://afblog.ru |
//+------------------------------------------------------------------+
#property copyright "Aleksey Fomichev, Copyright 2014,"
#property link      "http://afblog.ru"

extern string Ðèñê_â_ïðîöåíòàõ;
extern double MaxRisk=0.5;               // Ñòàðòîâûé ëîò â ïîöåíòàõ îò äåïîçèòà
extern string Ïðîôèò_è_ÑòîïËîññ;
extern int TP=200;                     // Ïðèáûëü â ïóíêòàõ
extern int SL=50;                      // Ñòîïëîñ â ïóíêòàõ
extern string Äèñòàíöèÿ_Òðåéëèíãà;
extern int Tral_dist=30;               // Äèñòàíöèÿ òðåéëèíãà
extern int Shag=20;
extern string Áëîã_àíàëèçà_òðåíäà;     // Îïðåäåëåíèå òðåíäà
extern string Ñêîëüçÿùàÿ_ñðåäíÿÿ;
extern int MA_Period=70;
extern int MA_Period2=14;
extern string iDeMarker_òåêóùèé;
extern int DeM_Period=5;
bool Use_shag=true;
bool Use_bezubitok=false;
extern int MagicNumber=305032014;
extern string SovName="Bulls";

int start()
  {
//----

// Ðàñ÷åò ëîòà, êàê % îò äèïîçèòà
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*MaxRisk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;

  int ord[8];
    double tp,sl;
    if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
    else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}  
    
    double MA=iMA(Symbol(),0,MA_Period,0,MODE_SMA,PRICE_CLOSE,1); 
    double MA2=iMA(Symbol(),0,MA_Period2,0,MODE_SMA,PRICE_CLOSE,1); 
    double DeM=iDeMarker(Symbol(),0,DeM_Period,1);
 
   Uchet_orderov(MagicNumber,Symbol(),ord);            // Ïîäêëþ÷àåì ôóíêöèþ ó÷åòà îðäåðîâ
   if (ord[0]==0&&ord[1]==0&&ord[6]==0&&ord[7]==0)     // Ïðîâåðÿåì óñëîâèå îòêðûòèå îðäåðîâ äëÿ ýòîãî ñîâåòíèêà
    {
    if (High[1]<=High[2] && Low[1]>=Low[2] && Volume[0]<2)  // Ïðîâåðÿåì óñëîâèå ïàòåðíà âíóòðåííåãî áàðà
     {
     if (MA2>MA && Close[1]>MA && DeM<0.3)                            // Ïðîâåðÿåì âõîäà íà BUY
     OrderSend(Symbol(),OP_BUY,Lot,Ask,20,Ask-sl,Ask+tp,SovName+"_"+MagicNumber,MagicNumber,0,Blue);
     }
    }
        if (OrdersTotal()>0)
        Trailing_stop(MagicNumber,Symbol(),Tral_dist,Shag,Use_shag,Use_bezubitok);
//----
//---- Ïóáëèêóåì êîììåíòàðèé íà ýêðàí     
      Comment("ÁÀËÀÍÑ: ",DoubleToStr(AccountBalance(),2),"\nÑÐÅÄÑÒÂÀ: ",DoubleToStr(AccountEquity(),2),
      "\nÏÐÈÁÛËÜ: ",DoubleToStr(AccountProfit(),2));
   

   return(0);
  }
//+------------------------------------------------------------------+

//-------------------------------------------------------------------+
//|                          Ó÷åò îðäåðîâ                            |
//+------------------------------------------------------------------+
void Uchet_orderov(int Mag, string Symb, int &mas[8])
{
ArrayInitialize(mas,0);                                               
//mas[0] - ïîêóïêà; 
//mas[1] - ïðîäàæà; 
//mas[2] - buylimit
//mas[3] - selllimit; 
//mas[4] - buystop; 
//mas[5] - sellstop
//mas[6] - ñäåëêè; 
//mas[7] - îòëîæêè

int tip;
int tiket=-1;
for (int pos=OrdersTotal()-1; pos>=0; pos--)
    {
    if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)&&OrderMagicNumber()==Mag&&OrderSymbol()==Symb&&OrderTicket()!=tiket)
       {
       tiket=OrderTicket();
       tip=OrderType();
       switch(tip)
             {
             case 0: {mas[0]++;mas[6]++;break;}
             case 1: {mas[1]++;mas[6]++;break;}
             case 2: {mas[2]++;mas[7]++;break;}
             case 3: {mas[3]++;mas[7]++;break;}
             case 4: {mas[4]++;mas[7]++;break;}
             case 5: {mas[5]++;mas[7]++;break;}          
             }
        }
        continue; 
    }

}
//+------------------------END Ó÷åò îðäåðîâ -------------------------+

//-------------------------------------------------------------------+
//|                          Òðåéëèíã ñòîï                           |
//+------------------------------------------------------------------+
void Trailing_stop(int Magic, string Symb, int Dist, int Shag, bool Isp_shag, bool Bezubitok)
{
    double dist,shag;
    if (Digits==3||Digits==5) {dist=Dist*10*Point; shag=Shag*10*Point;}
    else if (Digits==2||Digits==4) {dist=Dist*Point; shag=Shag*Point;}
    
    for (int pos=0; pos<OrdersTotal(); pos++)
        {
         OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
         if (OrderMagicNumber()==Magic&&OrderSymbol()==Symb)
            {
            if (OrderType()==OP_BUY)
               {
               if (!Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
               if (Isp_shag&&!Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
               NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
               if (!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
               NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
               if (Isp_shag&&Bezubitok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&&
               NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
               NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
               }
            else if (OrderType()==OP_SELL)
               {
               if (!Isp_shag&&!Bezubitok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
               if (Isp_shag&&!Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
               NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
               if (!Isp_shag&&Bezubitok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
               NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);
               if (Isp_shag&&Bezubitok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&&
               NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&&
                NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits))
               OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE);                  
               }
            }
        }
}
//+------------------------END Òðåéëèíã ñòîï ------------------------+

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 ---