Open Forex4you Account

Server Ãѹ EA 1000 / »Õ

ÊÑ觪×éͤÙèÁ×Í¡ÒÃâ»ÃááÁ MQL4

Author Topic: ú¡Ç¹´Ùindi  (Read 9248 times)

win_dream

  • Jr. Member
  • **
  • Posts: 64
ú¡Ç¹´Ùindi
« on: ¡ØÁÀҾѹ¸ì 03, 2012, 05:10:13 pm »
áÍ´ÁÔ¹¤èÐú¡Ç¹´Ù indi ãËé˹èͤèÐ ÍÂÒ¡ãËéÁѹÁÕàÊÕ§àµ×͹µÃ§ÅÙ¡ÈâÖ鹤èÐ

#property indicator_separate_window
#property indicator_minimum 20
#property indicator_maximum 80
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Blue

#property indicator_color4 Red
#property indicator_color5 Blue
//---- input parameters
double      PeriodRSI=14;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,242);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexEmptyValue(2,0.0);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(3,159);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexEmptyValue(3,0.0);
   SetIndexStyle(4,DRAW_ARROW);
   SetIndexArrow(4,159);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexEmptyValue(4,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
      ObjectsDeleteAll(1, OBJ_TREND);
      ObjectsRedraw();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    k,limit,pos1,pos2,pos3,pos4;
   int    counted_bars=IndicatorCounted();
   double rsi1,rsi2,rsi3,vol1,vol2,vol3,vol4;
//----
if (counted_bars<0) return(-1);
    
   if (counted_bars>0) counted_bars--;
    
   limit=Bars-counted_bars;
    
   for (int i=0; i<limit; i++)
      {
         ExtMapBuffer1=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,i);
  
         rsi1=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,i+1);
         rsi2=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,i+2);
         rsi3=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,i+3);
  
         if  (rsi1<rsi2 && rsi2>rsi3) ExtMapBuffer5[i+2]=rsi2; //Âåðõóøêà. RSI ïîâîðà÷èâàåò âíèç
         if  (rsi1>rsi2 && rsi2<rsi3) ExtMapBuffer4[i+2]=rsi2; //Äîíûøêî. RSI ïîâîðà÷èâàåò ââåðõ
      }
      //------ Ïîèñê âåðõóøåê ------
   k=0;
   for (i=0; i<500; i++)
      {
         if (ExtMapBuffer5>40 && k==0) { vol1=ExtMapBuffer5; pos1=i; k++;}
         if (ExtMapBuffer5>60 && ExtMapBuffer5>vol1 && k!=0) { vol2=ExtMapBuffer5; pos2=i; k++;}
         if (k>1) break;
      }
   // Åñëè åñòü ìèíèìóì íèæå 40, òî ëèíèþ òðåíäà íå ñòðîèì, ò.ê. ñ÷èòàåì ÷òî íàïðàâëåíèå òðåíäà èçìåíèëîñü
   for (i=0; i<pos2; i++)
   {
   if ( ExtMapBuffer4!=0 && ExtMapBuffer4<40) {vol1=0; vol2=0;}
   }  
      //----- Ïîèñê äîíûøåê ------
    k=0;
   for (i=0; i<500; i++)
      {
         if (ExtMapBuffer4<60 && ExtMapBuffer4!=0 && k==0) { vol3=ExtMapBuffer4; pos3=i; k++;}
         if (ExtMapBuffer4!=0 && ExtMapBuffer4<40 && ExtMapBuffer4<vol3 && k!=0) { vol4=ExtMapBuffer4; pos4=i; k++;}
         if (k>1) break;
      }
   // Åñëè åñòü ìàêñèìóì áîëüøå 60, òîãäà ëèíèþ òðåíäà íå ñòðîèì, ò.ê. ñ÷èòàåì ÷òî íàïðàâëåíèå òðåíäà èçìåíèëîñü
   for (i=0; i<pos4; i++)
   {
   if ( ExtMapBuffer5!=0 && ExtMapBuffer5>60) {vol3=0; vol4=0;}
   }
      
    // ---- Ñèãíàëû äëÿ âõîäîâ Buy è Sell
         rsi1=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,1);
         rsi2=iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,2);
        
      //------------
      double volDW,volDW1,volDW2,volUP,volUP1,volUP2;
      if (vol3!=0 && vol4!=0)
      {
      volDW=vol3+((pos3)*(vol3-vol4)/(pos4-pos3));
      volDW1=vol3+((pos3-1)*(vol3-vol4)/(pos4-pos3));
      volDW2=vol3+((pos3-2)*(vol3-vol4)/(pos4-pos3));
      }      
      if (volDW!=0 && rsi2>50 && rsi1<volDW1 && rsi2>volDW2 ) ExtMapBuffer2[0]=volDW; // Ñèãíàë Sell
      //-}-----------
      //------------
    
      
    
      if (vol1!=0 && vol2!=0)
      {
      volUP=vol1+(pos1*(vol1-vol2)/(pos2-pos1));
      volUP1=vol1+((pos1-1)*(vol1-vol2)/(pos2-pos1));
      volUP2=vol1+((pos1-2)*(vol1-vol2)/(pos2-pos1));
      }
      if (volUP!=0 && rsi2<50 && rsi2>40 && rsi1>volUP1 && rsi2<volUP2 ) ExtMapBuffer3[0]=volUP; // Ñèãíàë Buy
      //---}---------
   
     
   /*
    Comment(" vol1 = ",vol1, "  pos1 = ",pos1,"\n",
           " vol2 = ",vol2, "  pos2 = ",pos2,"\n",
           " vol3 = ",vol3, "  pos3 = ",pos3,"\n",
           " vol4 = ",vol4, "  pos4 = ",pos4,"\n",
           "   VOLDW = ", volDW,"\n",
           "   VOLUP = ", volUP, "\n") ;
    */    
      ObjectsDeleteAll(1, OBJ_TREND);
      ObjectsRedraw();
      if (vol3!=0 && vol4!=0 )
      {
      ObjectCreate("Sell",OBJ_TREND,1,Time[pos4],vol4,Time[pos3],vol3);
      
      ObjectSet("Sell",OBJPROP_COLOR,Red);
      ObjectSet("Sell",OBJPROP_WIDTH,2);
      ObjectSet("Sell",OBJPROP_STYLE,STYLE_SOLID);
   
   
      }
      if (vol1!=0 && vol2!=0 )
      {
      ObjectCreate("Buy",OBJ_TREND,1,Time[pos2],vol2,Time[pos1],vol1);
   
      ObjectSet("Buy",OBJPROP_COLOR,Blue);
      ObjectSet("Buy",OBJPROP_WIDTH,2);
      ObjectSet("Buy",OBJPROP_STYLE,STYLE_SOLID);
   
      }




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


ãËéÁѹÁÕàÊÕ§àµ×͹µÍ¹ÊÑ­­Ò³ÅÙ¡ÈâÖé¹
 
 µéͧàÍÒ¤ÓÊÑè§ Alert  ä»ÇÒ§äÇéµÃ§ä˹¤èÐ
¢Íº¤Ø³¤èÐ