

ローソク足ごとに更新する必要があり、時にリペイントすることもあります。  
修正お願いします。

[code]

    #property indicator_chart_window
    #property indicator_buffers 4
    #property indicator_color1 Black
    #property indicator_color2 Black
    #property indicator_color3 Blue
    #property indicator_color4 Red
    
    #include <WinUser32.mqh>
    //---- input parameters
    extern int       FastEMA=14;
    extern int       SlowEMA=21;
    extern int       RSIPeriod=12;
    extern bool      Alerts=false;
    extern bool      PlaySound=true;
    //---- buffers
    double ExtMapBuffer1[];
    double ExtMapBuffer2[];
    double ExtMapBuffer3[];
    double ExtMapBuffer4[];
    //double rsi_sig[];
    //---- variables
    int sigCurrent=0;
    int sigPrevious=0;
    double pipdiffCurrent=0;
    double pipdiffPrevious=0;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators
       SetIndexStyle(0,DRAW_NONE);
       SetIndexBuffer(0,ExtMapBuffer1);
       SetIndexStyle(1,DRAW_NONE);
       SetIndexBuffer(1,ExtMapBuffer2);
       SetIndexStyle(2,DRAW_ARROW,1,2);
       SetIndexArrow(2,233);
       SetIndexBuffer(2,ExtMapBuffer3);
       SetIndexEmptyValue(2,0.0);
       SetIndexStyle(3,DRAW_ARROW,1,2);
       SetIndexArrow(3,234);
       SetIndexBuffer(3,ExtMapBuffer4);
       SetIndexEmptyValue(3,0.0);
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int limit;
       int counted_bars=IndicatorCounted();
       double rsi_sig=0;
       bool entry=false;
       double entry_point=0;
       
       //---- check for possible errors
       if(counted_bars<0) return(-1);
       //---- last counted bar will be recounted
       if(counted_bars>0) counted_bars--;
       limit=Bars-counted_bars;
    
       //---- main loop
       for(int i=0; i<limit; i++)
       {
         //---- ma_shift set to 0 because SetIndexShift called abowe
         ExtMapBuffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);
         ExtMapBuffer2[i]=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
         rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
         
         pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
    
         
         if (pipdiffCurrent>0 && rsi_sig>50) 
         {
           sigCurrent = 1;  //Up
         }
         else if (pipdiffCurrent<0 && rsi_sig<50)
         {
           sigCurrent = 2;  //Down
         }
    /*
         if (pipdiffCurrent>0) 
         {
           sigCurrent = 1;  //Up
         }
         else if (pipdiffCurrent<0)
         {
           sigCurrent = 2;  //Down
         }
    */     
    
         if (sigCurrent==1 && sigPrevious==2)
         {
            ExtMapBuffer4[i-1] = High[i-1]+8*Point;
            //ExtMapBuffer3[i] = Ask;
            entry=true;
            entry_point=Ask;
         } 
         else if (sigCurrent==2 && sigPrevious==1)
         {
            ExtMapBuffer3[i-1] = Low[i-1]-8*Point;
            //ExtMapBuffer4[i] = Bid;
            entry=true;
            entry_point=Bid;
         }
    
    
         sigPrevious=sigCurrent;
         pipdiffPrevious=pipdiffCurrent;
       }
    
       //----
       if(Alerts && entry)
       {
         PlaySound(StringSubstr(Symbol(),0,6)+".wav");
         if (sigPrevious==1)
         {
            MessageBox("Entry point: buy at "+entry_point+"!!", "Entry Point", MB_OK);
         }
         else if (sigPrevious==2)
         {
            MessageBox("Entry point: sell at "+entry_point+"!!", "Entry Point", MB_OK);
         }
    
         entry=false;
       }
    RefreshRates();
    
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    
[/code]


CC BY-SA 4.0
2023-03-27T01:51:13.530
94336
2023-03-27T02:05:15.157
2023-03-27T02:05:15.157
3060
57693
question
mql4
mql4サインインジケーターのコードについて