MT5入門到精通之十一指標(biāo)高級(jí)用法

2017/4/29
MT5入門到精通之十一指標(biāo)高級(jí)用法
一.跨時(shí)間周期指標(biāo)(注意是小周期的指標(biāo)顯示出大周期的指標(biāo)萝勤,也就是說tf參數(shù)要比當(dāng)前時(shí)間周期大)
1.效果

image.png

2.設(shè)置


image.png
image.png

3.實(shí)現(xiàn)

//+------------------------------------------------------------------+
//|                                            spanTimeIndicator.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot fastLine
#property indicator_label1  "fastLine"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot slowLine
#property indicator_label2  "slowLine"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int      fastMa=5;
input int      slowMa=10;
input ENUM_TIMEFRAMES tf=PERIOD_H2;
//不同周期k線數(shù)基本不同,很容易數(shù)組越界
input int showKlineNum=50; //顯示k線個(gè)數(shù)(設(shè)置太多,有時(shí)候會(huì)加載比較慢)
//--- indicator buffers
double         fastLineBuffer[];
double         slowLineBuffer[];

//1.1句柄
int fastMa_h;
int slowMa_h;

//int custom_h;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,fastLineBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,slowLineBuffer,INDICATOR_DATA);

//1.2.句柄初始化
   fastMa_h=iMA(NULL,tf,fastMa,0,0,0);
   slowMa_h=iMA(NULL,tf,slowMa,0,0,0);
   //1.2.1自定義指標(biāo)
   //custom_h=iCustom(NULL,tf,"Examples\\custom");
//---
//1.6 數(shù)組序列號(hào)
   ArraySetAsSeries(fastLineBuffer,true);
   ArraySetAsSeries(slowLineBuffer,true);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//1.3創(chuàng)建賦值數(shù)組
   double fast[];
   double slow[];
   datetime tf_time[];
//1.6.1數(shù)組序列號(hào)
   ArraySetAsSeries(fast,true);
   ArraySetAsSeries(slow,true);
   ArraySetAsSeries(tf_time,true);
   setSystemReturnArrayAsSeries(time,open,high,low,close,tick_volume,volume,spread);

   CopyBuffer(fastMa_h,0,0,rates_total,fast);
   CopyBuffer(slowMa_h,0,0,rates_total,slow);
   CopyTime(NULL,tf,0,rates_total,tf_time);

//1.4 賦值緩存數(shù)組
   int limit=(prev_calculated>0) ?(rates_total-prev_calculated+1) : rates_total;
//1.5數(shù)組越界保護(hù)
   limit=(limit>showKlineNum)? showKlineNum : limit;

   int tf_i=0;
   for(int i=0;i<limit;i++)
     {
      //默認(rèn)小周期的時(shí)間比大周期的時(shí)間大循狰,不需要特殊處理,如果不是tf_i++;
      if(time[i]<tf_time[tf_i])
        {
         tf_i++;
        }
      fastLineBuffer[i]=fast[tf_i];
      slowLineBuffer[i]=slow[tf_i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void setSystemReturnArrayAsSeries(
                                  const datetime &time[],
                                  const double &open[],
                                  const double &high[],
                                  const double &low[],
                                  const double &close[],
                                  const long &tick_volume[],
                                  const long &volume[],
                                  const int &spread[])
  {
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(tick_volume,true);
   ArraySetAsSeries(volume,true);
   ArraySetAsSeries(spread,true);

  }
//+------------------------------------------------------------------+

二將任意價(jià)格的數(shù)據(jù)做出均線指標(biāo)顯示
eg:(CLOSE-LLV(LOW,10))/(HHV(HIGH,10)-LLV(LOW,10))值的SMA 的8日均線
1.效果

image.png

2.實(shí)現(xiàn)

//+------------------------------------------------------------------+
//|                                      baseAnyPriceMaIndicator.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
//1.7一定要設(shè)置成2,不然就無法使用計(jì)算數(shù)據(jù)的數(shù)組anyPriceBuffer
#property indicator_buffers 2
#property indicator_plots   1
//--- plot maLine
#property indicator_label1  "maLine"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//不同周期k線數(shù)基本不同,很容易數(shù)組越界
input int showKlineNum=1000; //顯示k線個(gè)數(shù)(設(shè)置太多阳柔,有時(shí)候會(huì)加載比較慢)

//--- indicator buffers
//1.要畫的線
double         maLineBuffer[];
//1.1不需要畫線
double anyPriceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,maLineBuffer,INDICATOR_DATA);
//1.2 設(shè)置對(duì)應(yīng)的類型(計(jì)算用)
   SetIndexBuffer(1,anyPriceBuffer,INDICATOR_CALCULATIONS);
//1.3 序列化
   ArraySetAsSeries(maLineBuffer,true);
   ArraySetAsSeries(anyPriceBuffer,true);
//1.4 指標(biāo)的名稱
   IndicatorSetString(INDICATOR_SHORTNAME,"(CLOSE-LLV(LOW,10))/(HHV(HIGH,10)-LLV(LOW,10))值的SMA均線");

//1.5 設(shè)置指標(biāo)默認(rèn)值
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   setSystemReturnArrayAsSeries(time,open,high,low,close,tick_volume,volume,spread);

//1.6 賦值緩存數(shù)組
   int limit=(prev_calculated>0) ?(rates_total-prev_calculated+1) : rates_total;
//1.7數(shù)組越界保護(hù)
   limit=(limit>showKlineNum)? showKlineNum : limit;
//1.8
   int ragneNum=10;
   if(limit < ragneNum) return (0);

   for(int i=0;i<limit;i++)
     {
      double temp=HHV(Symbol(),0,ragneNum,i)-LLV(Symbol(),0,ragneNum,i);
      if(temp!=0)
        {
         anyPriceBuffer[i]=(close[i]-LLV(Symbol(),0,ragneNum,i))/temp;
        }
     }

   for(int i=0;i<limit;i++)
     {
      maLineBuffer[i]=iMAOnArrayMql4(anyPriceBuffer,showKlineNum,8,0,MODE_SMA,i);
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
void setSystemReturnArrayAsSeries(
                                  const datetime &time[],
                                  const double &open[],
                                  const double &high[],
                                  const double &low[],
                                  const double &close[],
                                  const long &tick_volume[],
                                  const long &volume[],
                                  const int &spread[])
  {
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(tick_volume,true);
   ArraySetAsSeries(volume,true);
   ArraySetAsSeries(spread,true);

  }
//+------------------------------------------------------------------+
//2.start_pos 到count+start_pos 之間最低價(jià)
double LLV(string symbol,ENUM_TIMEFRAMES tf,int count,int start_pos)
  {
   double low[];
   ArraySetAsSeries(low,true);
   CopyLow(symbol,tf,start_pos,count,low);
//2.1 設(shè)置一個(gè)比較大的默認(rèn)值
   double min=9999999;
   for(int i=0;i<ArraySize(low);i++)
     {
      if(low[i]<min)
        {
         min=low[i];
        }
     }
   return(min);
  }
//3.start_pos 到count+start_pos 之間最高價(jià)
double HHV(string symbol,ENUM_TIMEFRAMES tf,int count,int start_pos)
  {
   double high[];
   ArraySetAsSeries(high,true);
   CopyHigh(symbol,tf,start_pos,count,high);
//3.1 設(shè)置一個(gè)比較小的默認(rèn)值
   double max=0;
   for(int i=0;i<ArraySize(high);i++)
     {
      if(high[i]>max)
        {
         max=high[i];
        }
     }
   return(max);
  }
//+------------------------------------------------------------------+
double iMAOnArrayMql4(double &sourceArray[],int total,int iMAPeriod,int ma_shift,ENUM_MA_METHOD ma_method,int Shift)
  {
   double buf[];
   if(total>0 && total<=iMAPeriod) return(0);
   if(total==0) total=ArraySize(sourceArray);
   if(ArrayResize(buf,total)<0) return(0);
   switch(ma_method)
     {
      case MODE_SMA :
        {
         double sum=0;
         int    i,pos=total-1;
         for(i=1;i<iMAPeriod;i++,pos--)
            sum+=sourceArray[pos];
         while(pos>=0)
           {
            sum+=sourceArray[pos];
            buf[pos]=sum/iMAPeriod;
            sum-=sourceArray[pos+iMAPeriod-1];
            pos--;

           }
         return(buf[Shift+ma_shift]);

        }
      case MODE_EMA :
        {
         double pr=2.0/(iMAPeriod+1);
         int    pos=total-2;
         while(pos>=0)
           {
            if(pos==total-2) buf[pos+1]=sourceArray[pos+1];
            buf[pos]=sourceArray[pos]*pr+buf[pos+1]*(1-pr);
            pos--;

           }
         return(buf[Shift+ma_shift]);

        }
      case MODE_SMMA :
        {
         double sum=0;
         int    i,k,pos;
         pos=total-iMAPeriod;
         while(pos>=0)
           {
            if(pos==total-iMAPeriod)
              {
               for(i=0,k=pos;i<iMAPeriod;i++,k++)
                 {
                  sum+=sourceArray[k];
                  buf[k]=0;

                 }

              }
            else sum=buf[pos+1]*(iMAPeriod-1)+sourceArray[pos];
            buf[pos]=sum/iMAPeriod;
            pos--;

           }
         return(buf[Shift+ma_shift]);

        }
      case MODE_LWMA :
        {
         double sum=0.0,lsum=0.0;
         double price;
         int    i,weight=0,pos=total-1;
         for(i=1;i<=iMAPeriod;i++,pos--)
           {
            price=sourceArray[pos];
            sum+=price*i;
            lsum+=price;
            weight+=i;

           }
         pos++;
         i=pos+iMAPeriod;
         while(pos>=0)
           {
            buf[pos]=sum/weight;
            if(pos==0) break;
            pos--;
            i--;
            price=sourceArray[pos];
            sum=sum-lsum+price*iMAPeriod;
            lsum-=sourceArray[i];
            lsum+=price;

           }
         return(buf[Shift+ma_shift]);

        }
      default: return(0);

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

三.含未來函數(shù)的指標(biāo)(一般有未來函數(shù)的指標(biāo)都要注意,它們是改寫歷史蚓峦,不是很好的指標(biāo)
1.如果判定 用系統(tǒng)自帶的測(cè)試功能舌剂,歷史重演,看指標(biāo)箭頭是否會(huì)消失

image.png

2.zigzag指標(biāo)改寫暑椰,添加上下箭頭霍转,效果圖如下

image.png

3.實(shí)現(xiàn)(先復(fù)制系統(tǒng)zigzag源碼,在進(jìn)行如下修改即可)

//+------------------------------------------------------------------+
//|                                                       ZigZag.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//2.重新設(shè)置緩存數(shù)組大小一汽,和畫圖對(duì)象個(gè)數(shù)
#property indicator_buffers 5
#property indicator_plots   3
//---- plot Zigzag
#property indicator_label1  "Zigzag"
#property indicator_type1   DRAW_SECTION
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//1.新增箭頭線
#property indicator_label2  "ZigzagHigh"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  White
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_label3  "ZigzagLow"
#property indicator_type3   DRAW_ARROW
#property indicator_color3  Yellow
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- input parameters
input int      ExtDepth=12;
input int      ExtDeviation=5;
input int      ExtBackstep=3;
//--- indicator buffers
double         ZigzagBuffer[];      // main buffer
double         HighMapBuffer[];     // highs
double         LowMapBuffer[];      // lows
//3.添加緩存數(shù)組
double         ZigzagHighBuffer[];      //
double         ZigzagLowBuffer[];      //

int            level=3;             // recounting depth
double         deviation;           // deviation in points
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ZigzagBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,HighMapBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,LowMapBuffer,INDICATOR_CALCULATIONS);
   //3.1 設(shè)置緩存數(shù)組(注意下標(biāo)是1-2避消,不是上面的3-4)
   SetIndexBuffer(1,ZigzagHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ZigzagLowBuffer,INDICATOR_DATA);

//--- set short name and digits   
   PlotIndexSetString(0,PLOT_LABEL,"ZigZag("+(string)ExtDepth+","+(string)ExtDeviation+","+(string)ExtBackstep+")");
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- set empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   //3.2
   PlotIndexSetInteger(1,PLOT_ARROW,226);
   PlotIndexSetInteger(2,PLOT_ARROW,225);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
//--- to use in cycle
   deviation=ExtDeviation*_Point;
//---
   return(0);
  }
//+------------------------------------------------------------------+
//|  searching index of the highest bar                              |
//+------------------------------------------------------------------+
int iHighest(const double &array[],
             int depth,
             int startPos)
  {
   int index=startPos;
//--- start index validation
   if(startPos<0)
     {
      Print("Invalid parameter in the function iHighest, startPos =",startPos);
      return 0;
     }
   int size=ArraySize(array);
//--- depth correction if need
   if(startPos-depth<0) depth=startPos;
   double max=array[startPos];
//--- start searching
   for(int i=startPos;i>startPos-depth;i--)
     {
      if(array[i]>max)
        {
         index=i;
         max=array[i];
        }
     }
//--- return index of the highest bar
   return(index);
  }
//+------------------------------------------------------------------+
//|  searching index of the lowest bar                               |
//+------------------------------------------------------------------+
int iLowest(const double &array[],
            int depth,
            int startPos)
  {
   int index=startPos;
//--- start index validation
   if(startPos<0)
     {
      Print("Invalid parameter in the function iLowest, startPos =",startPos);
      return 0;
     }
   int size=ArraySize(array);
//--- depth correction if need
   if(startPos-depth<0) depth=startPos;
   double min=array[startPos];
//--- start searching
   for(int i=startPos;i>startPos-depth;i--)
     {
      if(array[i]<min)
        {
         index=i;
         min=array[i];
        }
     }
//--- return index of the lowest bar
   return(index);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   int limit=0,counterZ=0,whatlookfor=0;
   int shift=0,back=0,lasthighpos=0,lastlowpos=0;
   double val=0,res=0;
   double curlow=0,curhigh=0,lasthigh=0,lastlow=0;
//--- auxiliary enumeration
   enum looling_for
     {
      Pike=1,  // searching for next high
      Sill=-1  // searching for next low
     };
//--- initializing
   if(prev_calculated==0)
     {
      ArrayInitialize(ZigzagBuffer,0.0);
      ArrayInitialize(HighMapBuffer,0.0);
      ArrayInitialize(LowMapBuffer,0.0);
      //4.1 類推
      ArrayInitialize(ZigzagHighBuffer,0.0);
      ArrayInitialize(ZigzagLowBuffer,0.0);
     }
//---
   if(rates_total<100) return(0);
//--- set start position for calculations
   if(prev_calculated==0) limit=ExtDepth;

//--- ZigZag was already counted before
   if(prev_calculated>0)
     {
      i=rates_total-1;
      //--- searching third extremum from the last uncompleted bar
      while(counterZ<level && i>rates_total-100)
        {
         res=ZigzagBuffer[i];
         if(res!=0) counterZ++;
         i--;
        }
      i++;
      limit=i;

      //--- what type of exremum we are going to find
      if(LowMapBuffer[i]!=0)
        {
         curlow=LowMapBuffer[i];
         whatlookfor=Pike;
        }
      else
        {
         curhigh=HighMapBuffer[i];
         whatlookfor=Sill;
        }
      //--- chipping
      for(i=limit+1;i<rates_total && !IsStopped();i++)
        {
         ZigzagBuffer[i]=0.0;
         LowMapBuffer[i]=0.0;
         HighMapBuffer[i]=0.0;
         //4.2類推
         ZigzagHighBuffer[i]=0.0;
         ZigzagLowBuffer[i]=0.0;
        }
     }

//--- searching High and Low
   for(shift=limit;shift<rates_total && !IsStopped();shift++)
     {
      val=low[iLowest(low,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((low[shift]-val)>deviation) val=0.0;
         else
           {
            for(back=1;back<=ExtBackstep;back++)
              {
               res=LowMapBuffer[shift-back];
               if((res!=0) && (res>val)) LowMapBuffer[shift-back]=0.0;
              }
           }
        }
      if(low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;
      //--- high
      val=high[iHighest(high,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-high[shift])>deviation) val=0.0;
         else
           {
            for(back=1;back<=ExtBackstep;back++)
              {
               res=HighMapBuffer[shift-back];
               if((res!=0) && (res<val)) HighMapBuffer[shift-back]=0.0;
              }
           }
        }
      if(high[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;
     }

//--- last preparation
   if(whatlookfor==0)// uncertain quantity
     {
      lastlow=0;
      lasthigh=0;
     }
   else
     {
      lastlow=curlow;
      lasthigh=curhigh;
     }

//--- final rejection
   for(shift=limit;shift<rates_total && !IsStopped();shift++)
     {
      res=0.0;
      switch(whatlookfor)
        {
         case 0: // search for peak or lawn
            if(lastlow==0 && lasthigh==0)
              {
               if(HighMapBuffer[shift]!=0)
                 {
                  lasthigh=high[shift];
                  lasthighpos=shift;
                  whatlookfor=Sill;
                  ZigzagBuffer[shift]=lasthigh;
                  res=1;
                 }
               if(LowMapBuffer[shift]!=0)
                 {
                  lastlow=low[shift];
                  lastlowpos=shift;
                  whatlookfor=Pike;
                  ZigzagBuffer[shift]=lastlow;
                  res=1;
                 }
              }
            break;
         case Pike: // search for peak
            if(LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lastlowpos]=0.0;
               lastlowpos=shift;
               lastlow=LowMapBuffer[shift];
               ZigzagBuffer[shift]=lastlow;
               res=1;
              }
            if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               lasthigh=HighMapBuffer[shift];
               lasthighpos=shift;
               ZigzagBuffer[shift]=lasthigh;
               whatlookfor=Sill;
               res=1;
              }
            break;
         case Sill: // search for lawn
            if(HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lasthighpos]=0.0;
               lasthighpos=shift;
               lasthigh=HighMapBuffer[shift];
               ZigzagBuffer[shift]=lasthigh;
              }
            if(LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
              {
               lastlow=LowMapBuffer[shift];
               lastlowpos=shift;
               ZigzagBuffer[shift]=lastlow;
               whatlookfor=Pike;
              }
            break;
         default: return(rates_total);
        }
     }
     //5.畫箭頭的主要代碼
     for(shift=limit;shift<rates_total && !IsStopped();shift++)
     {
       if(ZigzagBuffer[shift]>0)
        {
          if(NormalizeDouble(ZigzagBuffer[shift],Digits())>=NormalizeDouble(high[shift],Digits()))
           {
             ZigzagHighBuffer[shift]=ZigzagBuffer[shift];
           }
          if(NormalizeDouble(ZigzagBuffer[shift],Digits())<=NormalizeDouble(low[shift],Digits()))
           {
             ZigzagLowBuffer[shift]=ZigzagBuffer[shift];
           }
        }
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

如果您發(fā)現(xiàn)本文對(duì)你有所幫助,如果您認(rèn)為其他人也可能受益召夹,請(qǐng)把它分享出去岩喷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市戳鹅,隨后出現(xiàn)的幾起案子均驶,更是在濱河造成了極大的恐慌,老刑警劉巖枫虏,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異爬虱,居然都是意外死亡隶债,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門跑筝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來死讹,“玉大人,你說我怎么就攤上這事曲梗≡蘧” “怎么了妓忍?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)愧旦。 經(jīng)常有香客問我世剖,道長(zhǎng),這世上最難降的妖魔是什么笤虫? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任旁瘫,我火速辦了婚禮,結(jié)果婚禮上琼蚯,老公的妹妹穿的比我還像新娘酬凳。我一直安慰自己,他們只是感情好遭庶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布宁仔。 她就那樣靜靜地躺著,像睡著了一般峦睡。 火紅的嫁衣襯著肌膚如雪台诗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天赐俗,我揣著相機(jī)與錄音拉队,去河邊找鬼。 笑死阻逮,一個(gè)胖子當(dāng)著我的面吹牛粱快,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叔扼,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼事哭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了瓜富?” 一聲冷哼從身側(cè)響起鳍咱,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎与柑,沒想到半個(gè)月后谤辜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡价捧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年丑念,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片结蟋。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脯倚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嵌屎,到底是詐尸還是另有隱情推正,我是刑警寧澤恍涂,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站植榕,受9級(jí)特大地震影響再沧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜内贮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一产园、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夜郁,春花似錦什燕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至事富,卻和暖如春技俐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背统台。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工雕擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱勃。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓井赌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贵扰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仇穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容