kikaku 发表于 2015-1-12 15:09:45

通道加KD组合的物件箭头信号

// StochasticOnChart ------ 通道加KD组合的物件箭头信号

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 Yellow
#property indicator_width2 1
#property indicator_color3 Yellow
#property indicator_width3 1
#property indicator_color4 Yellow
#property indicator_width4 1

#import"shell32.dll"         //Connect a dll (provided with Windows)            
int ShellExecuteA(int hwnd, string Operation, string File, string Parameters, string Directory, int ShowCmd);
#import "user32.dll"
int MessageBoxA(int hWnd , string lpText, string lpCaption, int uType);
//------------------------------------------------------------------------------------------------------

extern int K周期   = 5;
extern int D周期   = 3;
extern int 慢周期= 3;
extern int MA      = 50;
extern int Scale   = 100;
extern int 使用通道显示   = 1;
extern int 使用箭头显示   = 1;

double 信率Ma[];
double 黄上轨[];
double 黄下轨[];
double 黄中轨[];
double KD信组[];
//----
int 始绘处1   = 0;
int 始绘处2   = 0;

int 绘箭数   = 15;

//---------------初始化----------------+

int init()
{
   string 简称;
   
   string 箭头名;
   for(int n=0; n<绘箭数; n++){
      箭头名= "KD信号"+K周期+"_"+n;
      ObjectDelete(箭头名);
   }

   CheckDonate();

   IndicatorBuffers(4);

   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, 信率Ma);

   if(使用通道显示==1){
      SetIndexStyle(1, DRAW_LINE);
      SetIndexBuffer(1, 黄上轨);
      SetIndexStyle(2, DRAW_LINE);
      SetIndexBuffer(2, 黄中轨);
      SetIndexStyle(3, DRAW_LINE);
      SetIndexBuffer(3, 黄下轨);
   }
   else
      for(int i=1; i<=3; i++)
         SetIndexStyle(i, DRAW_NONE);
   
   for(i=4; i<=7; i++)
       SetIndexStyle(i, DRAW_NONE);
   
   //--
   简称="Sto("+K周期+", "+D周期+", "+慢周期+")";
   IndicatorShortName(简称);
   SetIndexLabel(0, 简称);
   SetIndexLabel(1, "80%");
   SetIndexLabel(2, "50%");
   SetIndexLabel(3, "20%");
   //--
   始绘处1= K周期+慢周期;
   始绘处2= 始绘处1+D周期;
   SetIndexDrawBegin(0, 始绘处1);
   SetIndexDrawBegin(1, 始绘处1);
   SetIndexDrawBegin(2, 始绘处1);
   SetIndexDrawBegin(3, 始绘处1);
   //--
   ArraySetAsSeries(KD信组, true);
   return(0);
}

//--------------反初始化--------------+

void deinit()
{
   string 箭头名;
   for(int n=0; n<绘箭数; n++){
      箭头名= "KD信号"+K周期+"_"+n;
      ObjectDelete(箭头名);
   }
}

//---------------主函数----------------+

int start()
{
   int    i, n;
   int    已计= IndicatorCounted();

   if(Bars<=始绘处2)
   return(0);

   if(ArraySize(KD信组)!=Bars)
      ArrayResize(KD信组, Bars);

   //--初始归0
   if(已计<1)
      for(i=1;i<=始绘处2;i++){
         信率Ma= 0;
         黄下轨= 0;
         黄上轨= 0;
         黄中轨= 0;
         KD信组= 0;
      }

   //--缓组赋值
   double kk= Point*Scale/100;
   int limit= Bars-已计;
   for(i=0; i<limit; i++){
      KD信组= iStochastic(Symbol(), 0, K周期, D周期, 慢周期, MODE_SMA, 0, MODE_SIGNAL, i);
      信率Ma= iMA(Symbol(), 0, MA, 0, MODE_EMA, PRICE_MEDIAN, i)+(KD信组-50)*kk;
      if(使用通道显示==1){
         黄上轨= iMA(Symbol(), 0, MA, 0, MODE_EMA, PRICE_MEDIAN, i)+30*kk;
         黄中轨= iMA(Symbol(), 0, MA, 0, MODE_EMA, PRICE_MEDIAN, i);
         黄下轨= iMA(Symbol(), 0, MA, 0, MODE_EMA, PRICE_MEDIAN, i)-30*kk;
      }
   }
   
   //--物件箭头
   if(使用箭头显示==1){
      int 标志;
      double 值D0, 值D1, 值D2, 值D3;
      i= 0;
      n= 0;
      while(n<绘箭数 && i<Bars/*-已计*/){
         标志= 0;
         while(i<Bars/*-已计*/ && 标志==0){
            值D0= iStochastic(Symbol(), 0, K周期, D周期, 慢周期, MODE_SMA, 0, MODE_SIGNAL, i+0);
            值D1= iStochastic(Symbol(), 0, K周期, D周期, 慢周期, MODE_SMA, 0, MODE_SIGNAL, i+1);
            值D2= iStochastic(Symbol(), 0, K周期, D周期, 慢周期, MODE_SMA, 0, MODE_SIGNAL, i+2);
            值D3= iStochastic(Symbol(), 0, K周期, D周期, 慢周期, MODE_SMA, 0, MODE_SIGNAL, i+3);

            if(值D0>值D1 && 值D2>值D1 && 值D3>值D2)
               标志= +1;
            if(值D0<值D1 && 值D2<值D1 && 值D3<值D2)
               标志= -1;
            if(标志!=0)
               break;
            i++;
         }

         string 箭头名="KD信号"+K周期+"_"+n;
         ObjectDelete(箭头名);
         if(标志==+1){
            ObjectCreate(箭头名, OBJ_ARROW, 0, Time, Low);
            ObjectSet(箭头名, OBJPROP_ARROWCODE, 108);
            ObjectSet(箭头名, OBJPROP_COLOR, Blue);
            n++;
         }
         if(标志==-1){
            ObjectCreate(箭头名, OBJ_ARROW, 0, Time, High+(WindowPriceMax()-WindowPriceMin())/10);
            ObjectSet(箭头名, OBJPROP_ARROWCODE, 108);
            ObjectSet(箭头名, OBJPROP_COLOR, Red);
            n++;
         }
         i+=1;
      }
   }
   return(0);
}

//---------------CheckDonate----------------+

void CheckDonate()
{
   int 手柄= 0;
   string pay= "0";
   datetime dt= 0;
   string 文件名= "StochOC.txt";

   手柄= FileOpen(文件名, FILE_READ|FILE_CSV, ";");
   if(手柄>=1){
      pay= FileReadString(手柄);
      if(pay!= "0" && pay!="1")
         pay= "0";
      dt= StrToTime(FileReadString(手柄));
   }
   else{
      dt= TimeCurrent();
      手柄= FileOpen(文件名, FILE_WRITE|FILE_CSV, ";");
      FileWrite(手柄, "0", TimeToStr(dt, TIME_DATE));
   }
   FileClose(手柄);
   
   if(pay=="0" && (TimeCurrent()-dt)>10*24*60*60){ // 5 ?í?é
      if(MessageBoxA(0, "???è ?àì ??í?à?è??? èí?èêàò?? On Chart Stochastic, \n ??òèò? ??ì?÷ü à?ò??ó ìàò??èà?üí??", "??????", 4)==6){
         ShellExecuteA(0, "Open", "iexplore.exe", "wmk:payto?Purse=R865705290089&Amount=100&Desc=Indicator&BringToFront=Y&ExecEvenKeeperIsOffline=Y", "", 7);
         pay= "1";
      }
      dt= TimeCurrent();
      
      手柄= FileOpen(文件名, FILE_WRITE|FILE_CSV, ";");
      FileWrite(手柄, pay, TimeToStr(dt, TIME_DATE));
      FileClose(手柄);
   }
   FileClose(手柄);
}

//--------------------------------------+

wyq 发表于 2015-1-12 16:02:30

赚钱,赚积分。顶....

我爱sqq 发表于 2015-1-12 19:28:08

围观中~~~

tavsqshq 发表于 2015-1-12 19:58:25

ddddom 发表于 2015-1-12 20:03:13

围观

ddddom 发表于 2015-1-12 20:03:16

围观

紫竹青荷 发表于 2015-1-12 20:06:03

路过。。。看看。。。

紫竹青荷 发表于 2015-1-12 20:06:13

路过。。。看看。。。

8466983 发表于 2015-1-12 20:49:18

EA真的能赚钱么?

butterfly 发表于 2015-1-12 23:42:35


继续,学习了
页: [1] 2 3
查看完整版本: 通道加KD组合的物件箭头信号