prostoi_sovetnik_1

Author: Copyright � 2009, ������� ��������
Profit factor:
0.00
10 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