加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

德马克序列 Demark Sequential

(2013-03-30 14:29:37)
标签:

可能性

爆仓

第二个

高价

期货市场

分类: 2.交易规则思维
德马克指标由Tom Demark创建,已经有30年的历史。这一指标较少的为一般投资者所知,但在一些专业的交易员中却口口相传。Tom Demark曾任索罗斯集团、摩根大通、花旗和高盛的投资顾问。和一般技术交易指标多为跟随趋势不同,这一指标在确认趋势反转和反转点方面非常有帮助。
Demark Sequential包含两个主要部分:Set up 和 Count down,下面以买入信号为例进行说明,卖出信号则相反。 
    Set up: 要求有九个连续交易日的收盘价,每一个都低于其相对应的四个交易日前的收盘价。一个完美的Set up

    最好是第8或第9个交易日的最低价高于第6和第7个交易日的最低价。
    Count Down: Set up完成后开始计数,每当某日收盘价低于其两天前的最低价时计数增加1 (可以不连续),直到计数增加到13。一个完美的count down最好是第十三个计数日的最低价不低于第8个计数日的收盘价。
    买入点:较为激进的买入点是计数一完成就进入市场。第13个计数日常常是趋势的反转点。较为保守的买入点是等待count down完成后出现反转的信号,即某日的最低价不低于其4个交易日之前的收盘价。(完美的Count Down在第13个计数日就满足了这一反转信号)
    取消计数:如果在Count Down尚未完成之前出现以下情况就应取消计数:1)有一个收盘价超过Set up阶段各日中的最高价;2)出现一个相反的Set up,如在买入的Count down过程中出现一个卖出的Set up; 3)出现新的一个同方向的Set up,在这种情况下新的买入Set up优先,一旦完成则重新开始计数。
    止损点:一个成功的Set up和Count down完成后仍然有10%到30%的概率出现反转失败,止损点的设立很重要。首先找到Count Down阶段位置最低的一个price bar,以此price bar的最低价减去该日最高价(或前日收盘价,取其中较高一个)和最低价的差价,则此价格为止损点价格。 


TD指标的优势
    TD 指标是大型投资基金Tudor 的执行副总裁(Thomas R DeMark) 于80 年代中期为了发现走势欲转折区域而设计的。由于其原理简单且预测精度高等特点而在近几十年内得到了广泛的应用。
    TD指标基本原理
    TD 指标通常可分为TD 序列和TD 组合。TD 序列由启动、交叉和计数三个阶段组成,而TD 组合则仅包括启动和计数两个阶段,两者的主要区别在于计数规则的不同,但其基本原理都是一致的,即:市场走势由买方和卖方共同作用形成,当买方的力量大于卖方时走势表现为上涨,反之为下跌,但买卖双方力量强弱的表象是动态的,当走势上涨一段时间后,买方力量必然面临衰竭,从而市场转为下跌,TD 指标正是为发现走势欲转折区域而设计的。
    量化指标参数条件的调整
    本报告对传统 TD 指标参数在A 股市场进行实证,发现效果并不理想。我们尝试通过修正TD 指标,找到最适合中国股市特征的指标参数和条件,进而对中国股市进行更有效的预测。最后,我们确定TD 序列的启动阶段长度为6,计数为12;TD 组合的启动阶段长度为6,计数为8。指标的修正主要包括以下三个方面:1改变计数起点;2改变TD 指标参数;3改变计数规则。
    TD交叉
    计数的程序起始于结构的第9天或者随后的某一天;换言之,如果结构第8天或第9天符合交叉的条件,计数将由结构第9天开始,否则由交叉完成的第一天开始计数。交叉的条件是防范在狂跌或彪涨的行情中过早进场建仓。说的极端一些就是为了防止股票暂停交易,资不抵债以至申请破产而退市(中国资不抵债的上市公司有,但有哪支股票退市么?好像还没听说过。虽然也有长期停牌的,但基本上都是换了马甲再来,反而更牛叉!)。所以德马克设定了交叉的条件:买进结构第8天、第9天或结构完成之后的某一天,其最高价必须高于先前第三个交易日至结构第1天的某个高价;卖出结构第8天、第9天或结构完成之后的某一天,其最低价必须低于先前第三个交易日至结构第1天的某个低价。如果交叉发生于结构的第8天或者第9天,计数由结构的第9天算起;如果交叉发生于结构完成之后,则必须延后到交叉发生的当天开始计数。同时德马克还提出个股需要引用交叉的条件,但其类似金融期货、指数或商品交易等市场,显然不会发生并购或破产的事件,所以不需要考虑这方面的问题。(按照德马克的意思,中国股市成为了类比高风险的期货市场了,没有退市!)注:TD组合不考虑交叉问题

   TD计数
    买进结构计数条件是规定每当今天的收盘价低于或等于先前第二个交易日的低价,计数就增加1。
    卖出结构计数条件是规定每当今天的收盘价高于或等于先前第二个交易日的高价,计数就增加1。
    对于交投冷清或交易时段很短(例如一分钟走势),价格关系或许较适合“大于”或“小于”,不需要考虑“等于”。
     为了保持计数的弹性,德马克偶尔也会引进TD终结计数(TD Termination Count),他仅适用于计数的最后一天(一般是第13天),规定买进计数最后一天的收盘价、开盘价或盘中低价低于先前第二个交易日的低价;卖出计数最后一天的收盘价、开盘价或盘中高价高于先前第二个交易日的高价。TD终结计数中的变数也可以被取代。

     计数滤网(Countdown Qualifier),为了防范、避免不利价格形态与关系影响TD序列计数的理想进场点,至少必须引进一种TD序列计数滤网,借以筛选低风险的买进与卖出计数。德马克建议的标准计数滤网是:买进计数第13天的收盘价必须低于或等于计数第8天的收盘价;卖出计数第13天的收盘价必须高于或等于计数第8天的收盘价。同时德马克为了提高计数完成的可能性,认为至少应该将前述的标准滤网取代为(宽松条件):买进计数第13天的低价必须低于或等于计数第8天的收盘价;卖出计数第13天的高价必须高于或等于计数第8天的收盘价。其他可能采用的滤网关系还包括:买进计数第8天的收盘价必须低于或等于计数第5天的收盘价;买进计数第5天的收盘价必须低于或等于计数第3天的收盘价(卖出计数的情况则相反)。
    但是计数滤网的条件越严格,信号发生的频率就会越低,再循环的可能性越高;更重要的是,如此可能造成过度的最佳化,导致不切实际的市场条件与预期。当然,可以引进许多其他的组合和指标来提升技术的效率,以降低计数13处的交易风险。但是,德马克建议这类认为的滤网应该尽可能保持单纯,不要因此污染技术程序与TD序列,好像某些人希望透过药物减肥,却不愿意节食与运动。所以,过度玩弄指标,经常被称为---最佳化模型技巧---将造成不切实际的预期,导致严重的后果(德马克的意思是别玩过火了,小心爆仓!)。
http://s7/mw690/4bb42ab9gd91e8f599cf6&690Demark Sequential" TITLE="德马克序列 Demark Sequential" />

http://s11/mw690/4bb42ab9gd91e907eb8da&690Demark Sequential" TITLE="德马克序列 Demark Sequential" /> http://s2/mw690/4bb42ab9gd91e918188e1&690Demark Sequential" TITLE="德马克序列 Demark Sequential" />

★ TD序列源码:

int start()
  {
   int counted_bars=IndicatorCounted();
   int bSetup, sSetup, bCountdown, sCountdown;
   int x;
   double tfm=Space*Point;
   double CountTest;
   bool bSetupInd, sSetupInd, bPerfect, sPerfect;
//----
   for(int i=NumBars; i>=0; i--)
      {
      ObjectDelete(""+i);
      ObjectDelete("cd"+i);
//+------------------------------------------------------------------+
//| Buy Setup                                                        |
//+------------------------------------------------------------------+
      if(Close[i]<=Close[i+4] && Close[i+1]>=Close[i+5] && bSetup==0)//start setup
        
         bSetup++;
         ObjectCreate(""+i,OBJ_TEXT,0,Time[i],Low[i]-tfm);
         ObjectSetText(""+i,""+bSetup,8,"Arial",Setup);
         }
      if(Close[i]<Close[i+4] && bSetup!=0 && ObjectFind(""+i)==-1)
         {
         bSetup++;
         if(bSetup==9)
            {
            ObjectCreate(""+i,OBJ_TEXT,0,Time[i],Low[i]-tfm);
            ObjectSetText(""+i,""+bSetup,10,"Arial Black",Setup);
            bSetup=0;
            bSetupInd=true;
            sSetupInd=false;
            sCountdown=0;
            }
         else
            {
            ObjectCreate(""+i,OBJ_TEXT,0,Time[i],Low[i]-tfm);
            ObjectSetText(""+i,""+bSetup,8,"Arial",Setup);
            }
         }
      //if setup is completed look for criteria for perfect setup
      if(bSetupInd==true)
         {
         if(Low[i+1]<=Low[i+3] || Low[i]<=Low[i+2])
            {
            bSetupInd=false;
            bPerfect=true;
            bPerfected[i]=Low[i]-tfm*2;
            bCountdown=1;
            }
          if(Alerts==True && last_alert!=Time[0])
            {
            last_alert = Time[0];
            Alert("TD Sequential - ", Symbol(), " Buy Signal Perfected");
           
                
      //Deletes numbers that were created if there is a break in sequence before 9 is reached
      else if(Close[i]>=Close[i+4] && bSetup!=0)
         {
         for(x=i+1; x<=i+bSetup+1; x++) ObjectDelete(""+x);
         bSetup=0;
         }
//+------------------------------------------------------------------+
//| Buy Countdown Setup                                              |
//+------------------------------------------------------------------+
      if(bCountdown==13 && Close[i]<=Close[i+1] && Close[i]>CountTest)
         {
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],Low[i]-tfm*2.5);
         ObjectSetText("cd"+i,"+",8,"Arial",Countdown);
         }
      if(bCountdown==13 && Close[i]<=Close[i+1] && Close[i]<=CountTest)
         {
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],Low[i]-tfm*2.5);
         ObjectSetText("cd"+i,""+bCountdown,8,"Arial",Countdown);
         bCountdown=0;
         if(Alerts==True && last_alert!=Time[0])
            {
            last_alert = Time[0];
            Alert("TD Sequential - ", Symbol(), " Buy Countdown Completed");
            }
         Buy[i]=Low[i]-tfm*4;
         }
      if(bCountdown>=1 && bCountdown<13 && Close[i]<=Close[i+2])
         {
         if(bCountdown==8)CountTest=Close[i];
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],Low[i]-tfm*2.5);
         ObjectSetText("cd"+i,""+bCountdown,8,"Arial",Countdown);
         bCountdown++;
        
//+------------------------------------------------------------------+
//| Sell Setup                                                       |
//+------------------------------------------------------------------+
      if(Close[i]>=Close[i+4] && Close[i+1]<=Close[i+5] && bSetup==0)//start setup
        
         sSetup++;
         ObjectCreate(""+i,OBJ_TEXT,0,Time[i],High[i]+tfm);
         ObjectSetText(""+i,""+sSetup,8,"Arial",Setup);
         }
      if(Close[i]>=Close[i+4] && sSetup!=0 && ObjectFind(""+i)==-1)
         {
         sSetup++;
         if(sSetup==9)
            {
            ObjectCreate(""+i,OBJ_TEXT,0,Time[i],High[i]+tfm);
            ObjectSetText(""+i,""+sSetup,10,"Arial Black",Setup);
            sSetup=0;
            sSetupInd=true;
            bSetupInd=false;
            bCountdown=0;
            }
         else
            {
            ObjectCreate(""+i,OBJ_TEXT,0,Time[i],High[i]+tfm);
            ObjectSetText(""+i,""+sSetup,8,"Arial",Setup);
            }
         }
      //Perfected Setup
      if(sSetupInd==true)
         {
         if(Low[i+1]>=Low[i+3] || Low[i]>=Low[i+2])
            {
            sSetupInd=false;
            sPerfect=true;
            sPerfected[i]=High[i]+tfm*2;
            sCountdown=1;
            }
         if(Alerts==True && last_alert!=Time[0])
            {
            last_alert = Time[0];
            Alert("TD Sequential - ", Symbol(), " Sell Signal Perfected");
            }
          }
      //Deletes numbers that were created if there is a break in sequence before 9 is reached
      else if(Close[i]<=Close[i+4] && sSetup!=0)
         {
         for(x=i+1; x<=i+sSetup; x++) ObjectDelete(""+x);
         sSetup=0;
         }
//+------------------------------------------------------------------+
//| Sell Countdown Setup                                             |
//+------------------------------------------------------------------+
      if(sCountdown==13 && Close[i]>=Close[i+2] && Close[i]>=CountTest)
         {
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],High[i]+tfm*2.5);
         ObjectSetText("cd"+i,""+sCountdown,8,"Arial",Countdown);
         sCountdown=0;
         Sell[i]=High[i]+tfm*4;
         if(Alerts==True && last_alert!=Time[0])
            {
            last_alert = Time[0];
            Alert("TD Sequential - ", Symbol(), " Sell Countdown Completed");
            }
         }
      if(sCountdown==13 && Close[i]>=Close[i+2] && Close[i]<CountTest)
         {
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],High[i]+tfm*2.5);
         ObjectSetText("cd"+i,"+",8,"Arial",Countdown);
         }
      if(sCountdown>=1 && sCountdown<13 && Close[i]>=Close[i+2])
         {
         if(sCountdown==8)CountTest=Close[i];
         ObjectCreate("cd"+i,OBJ_TEXT,0,Time[i],High[i]+tfm*2.5);
         ObjectSetText("cd"+i,""+sCountdown,8,"Arial",Countdown);
         sCountdown++;
         }
      }
//+------------------------------------------------------------------+
//| TDST Support and Resistance lines                                |
//+------------------------------------------------------------------+
   for(int j=Bars-counted_bars+10; j>=0; j--)
      {
      //TDST Support
      if(Close[j]<=Close[j+4]&& Close[j+1]>=Close[j+5] && Close[j-1]<=Close[j+3] && Close[j-2]<=Close[j+2] &&
      Close[j-3]<=Close[j+1] && Close[j-4]<=Close[j] && Close[j-5]<=Close[j-1] && Close[j-6]<=Close[j-2] &&
      Close[j-7]<=Close[j-3] && Close[j-8]<=Close[j-4])
         {
         Support[j]=High[j];
         Support[j+1]=EMPTY_VALUE;
         }
      else Support[j]=Support[j+1];
      //TDST Resistance
      if(Close[j]>=Close[j+4]&& Close[j+1]<=Close[j+5] && Close[j-1]>=Close[j+3] && Close[j-2]>=Close[j+2] &&
      Close[j-3]>=Close[j+1] && Close[j-4]>=Close[j] && Close[j-5]>=Close[j-1] && Close[j-6]>=Close[j-2] &&
      Close[j-7]>=Close[j-3] && Close[j-8]>=Close[j-4])
         {
         Resistance[j]=Low[j];
         Resistance[j+1]=EMPTY_VALUE;
         }
      else Resistance[j]=Resistance[j+1];
      }
//----
   return(0);
  }
//+------------------------------------------------------------------

 



 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有