prostoi_sovetnik_1

Author: Copyright � 2009, ������� ��������
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicatorMACD Histogram
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
prostoi_sovetnik_1
//+------------------------------------------------------------------+
//|                                           ñåðèÿ ïðîñòîé ñîâåòíèê |
//|                               Copyright © 2009, Õëûñòîâ Âëàäèìèð |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Õëûñòîâ Âëàäèìèð"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
/*Ïðîäàæà: -Öåíà íèæå MA (æåëàòåëüíî âîçìîæíîñòü íàñòðîèòü ïàðàìåòðû)
-MACD ïåðåñåêàåòíóëåâóþ ëèíèþ ñâåðõó âíèç (ïîñëå çàêðûòèÿ áàðà, îí ñòàíîâèòüñÿ ñèãíàëüíûì)(æåëàòåëüíû íàñòðîéêè ïàðàìåòðîâ MACD)
-Ïðîäàæà îñóùåñòâëÿåòñÿ ïîñëå ïðîáèòèÿ ìèíèìóìà ñôîðìèðîâàâøåãîñÿ ñèãíàëüíîãî áàðà
-ÑòîïËîññ ñòàâèòüñÿ çà ìàêñèìóìîì ñèãíàëüíîãî áàðà (íî íå áîëüøå 60ï)
-Òåéê +100 ïï(íàñòðîéêè íå ïîìåøàþò)
-Òðåéëèíã ñòîï. Ïðè äîñòèæåíèè ïðîôèòà +50(æåëàòåëüíî íàñòðîéêè), ñòîï â áåçóáûòîê è äàëåå îáû÷íûé ñëåäÿùèé ñòîï (ñ âîçìîæíîñòüþ â íàñòðîéêàõ îòêëþ÷èòü åãî)
-Çàêðûòèå ïîçèöèè. Åñëè MACD ïåðåñåêàåò íóëåâóþ ëèíèþ îáðàòíî*/
//--------------------------------------------------------------------
extern string  ïàðàìåòðû.ÌÀ         = "";
extern int     period_MA            = 100,         //Ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñêîëüçÿùåãî ñðåäíåãî.
               ma_method            = MODE_SMA,    //Ìåòîä óñðåäíåíèÿ. Ìîæåò áûòü ëþáûì èç çíà÷åíèé ìåòîäîâ ñêîëüçÿùåãî ñðåäíåãî (Moving Average). 
               applied_price_ÌÀ     = PRICE_CLOSE; //Èñïîëüçóåìàÿ öåíà. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò. 

extern string  ïàðàìåòðû.ÌÀCD       = "";
extern int     fast_ema_period      = 12,          //Ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ áûñòðîé ñêîëüçÿùåé ñðåäíåé. 
               slow_ema_period      = 26,          //Ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ìåäëåííîé ñêîëüçÿùåé ñðåäíåé. 
               signal_period        = 9,           //Ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñèãíàëüíîé ëèíèè. 
               applied_price_ÌÀCD   = PRICE_CLOSE; //Èñïîëüçóåìàÿ öåíà. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò. 

extern string  ïàðàìåòðû.ñîâåòíèêà  = "";
extern int     MAXstoploss          = 60,
               takeprofit           = 100,
               TrailingStop         = 50,
               Magic                = 123,         //óíèêàëüíûé íîìåð îðäåðîâ ýòîãî ñîâåòíèêà, åñëè 0 òî âåäåò âñå îðäåðà, â òîì ÷èñëå âûñòàâëåííûå âðó÷íóþ
               slippage             = 3;           //Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ
extern double  Lot                  = 0.1;
extern string  comment              = "cmillion@narod.ru";
//--------------------------------------------------------------------
int start()
{
   bool b,s;
   int tip;
   for (int j=0; j<OrdersTotal(); j++)
   {  if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true)
      {  if (Magic==OrderMagicNumber() && OrderSymbol()==Symbol())
         {
            tip = OrderType();
            if (tip==OP_BUY ) b=1;
            if (tip==OP_SELL) s=1;
         }  
      }  
   }
   int STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if ((b>0||s>0)&&TrailingStop>=STOPLEVEL) TrailingStop(TrailingStop);
   double MA    = iMA(NULL,0,period_MA,ma_method,ma_method,applied_price_ÌÀ,0);
   double MACD0 = iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price_ÌÀCD,MODE_MAIN,1);
   double MACD1 = iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price_ÌÀCD,MODE_MAIN,2);
   double SL,TP;

   if (MACD1<0&&MACD0>0) CLOSEORDER(-1);
   if (MACD1>0&&MACD0<0) CLOSEORDER(1);
   if (MA<Bid&&MACD1<0&&MACD0>0&&!b&&Bid>High[1])
   {
      if (takeprofit>=STOPLEVEL) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP  = 0;
      if (MAXstoploss  >=STOPLEVEL) 
      {
         if (NormalizeDouble((Bid-Low[1])/Point,Digits)>MAXstoploss) SL  = NormalizeDouble(Bid - MAXstoploss*Point,Digits);   
         else if (NormalizeDouble((Bid-Low[1])/Point,Digits)>=STOPLEVEL) SL = NormalizeDouble(Low[1],Digits);  
      }
      OPENORDER (1,SL,TP);
   }
   if (MA>Ask&&MACD1>0&&MACD0<0&&!s&&Ask<Low[1])
   {
      if (takeprofit>=STOPLEVEL) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP  = 0;
      if (MAXstoploss>=STOPLEVEL)
      {
         if (NormalizeDouble((High[1]-Ask)/Point,Digits)>MAXstoploss) SL = NormalizeDouble(Ask + MAXstoploss*Point,Digits);   
         else if (NormalizeDouble((High[1]-Ask)/Point,Digits)>=STOPLEVEL) SL = NormalizeDouble(High[1],Digits);  
      }
      OPENORDER (-1,SL,TP);
   }
return(0);
}
//--------------------------------------------------------------------
bool OPENORDER(int ord,double SL,double TP)
{
   int error,err;
   while (true)
   {  error=true;
      if (ord== 1) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,comment,Magic,0,Blue);
      if (ord==-1) error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,comment,Magic,0,Red);
      if (error==-1)
      {  
         Print("===> OPENORDER Error ",GetLastError());
         err++;Sleep(2000);RefreshRates();
      }
      else return(1);
      
      if (err >10) return(0);
   }
return;
}                  
//--------------------------------------------------------------------
bool CLOSEORDER(int ord)
{
   bool error;
   int err;
   double profit;
   while (true)
   {  error=true;
      for (int i=OrdersTotal()-1; i>=0; i--)
      {                                               
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
               profit = OrderProfit()+OrderSwap()+OrderCommission();
               if (OrderType()==OP_BUY && ord>-1)
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
                  if (!error) {Print("===> CLOSEORDER Error ",GetLastError()," ",OrderTicket());continue;}
                  else         Alert("===> CLOSEORDER ",OrderTicket()," ïðèáûëü ",profit);
               }
               if (OrderType()==OP_SELL && ord<1)
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
                  if (!error) {Print("===> CLOSEORDER Error ",GetLastError()," ",OrderTicket());continue;}
                  else         Alert("===> CLOSEORDER ",OrderTicket()," ïðèáûëü ",profit);
               }
            }
         }   
      }
      if (!error) {err++;Sleep(2000);RefreshRates();}
      if (error || err >= 10) return(error);
   }
}
//--------------------------------------------------------------------
void TrailingStop(int tral)
{
   int tip,Ticket;
   double StLo,OSL,OOP;
   for (int i=0; i<OrdersTotal(); i++) 
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               StLo = NormalizeDouble(Bid - tral*Point,Digits);
               if (StLo > OSL && StLo > OOP)
                  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White)) Print("===> TrailingStop Error ",GetLastError()," Order buy ",Ticket," Price ",OOP,"  SL ",OSL,"->",StLo);
                  else Print("===> TrailingStop   Order sell ",Ticket," Price ",OOP,"  SL ",OSL,"->",StLo);
            }                                         
            if (tip==OP_SELL)        
            {
               StLo = NormalizeDouble(Ask + tral*Point,Digits);
               if (StLo <= OOP && (StLo < OSL || OSL==0)) 
                  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White)) Print("===> TrailingStop Error ",GetLastError()," Order sell ",Ticket," Price ",OOP,"  SL ",OSL,"->",StLo);
                  else Print("===> TrailingStop   Order sell ",Ticket," Price ",OOP,"  SL ",OSL,"->",StLo);
            } 
         }
      }
   }
}
//--------------------------------------------------------------------

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