Elder's SafeZone Stop.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Elder's SafeZone Stop
  4. //  Author/Uploader: sloughbridge 
  5. //  E-mail:          
  6. //  Date/Time Added: 2003-10-16 00:12:05
  7. //  Origin:          Alexander Elder, "Come Into My Trading Room"
  8. //  Keywords:        Elder SafeZone Stop
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=303
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=303
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This indicator sets a Stop beneath the range of expected downside
  17. //  fluctuations during an uptrend.
  18. //
  19. //------------------------------------------------------------------------------
  20. /* Elder's SafeZone, from "Trading Room."  
  21. This stop method takes into account the "noise" in an uptrend, the lower lows, and sets a safe stop below the normal price fluctuation.  This is done by calculating the difference between a lower Low and the Low preceding it, the "Downside Penetration," DP.  The "Average Downside Penetration," ADP, is then calculated and a multiple of that is plotted beneath the Lows to indicate a SafeZone, which future Lows should not exceed.  Elder suggests using multiples of the average downside penetration to set the stop, and that is included.  The default choice, however, is to use the average plus variable standard deviations of downside penetrations.  You can obviously get the same numbers either way, but using StdDevs is less arbitrary. Based on your Buy point, a level should be determined from which the Stop will not decline.  That is handled here with the adjustable StpLvl.  */
  22. GraphXSpace=6;
  23. Plot(C,"",16,64);
  24. Pd= Param("Period",9,2,50,1);  /*Lookback for DPs.  Elder: Do not go back past "the last important turning point."*/
  25. DP= IIf(L<Ref(L,-1), Ref(L,-1)-L,0); // Downside penetrations
  26. DPSum= Sum(DP,Pd);
  27. DPCount= Sum(L<Ref(L,-1),Pd);
  28. ADP= DPsum/DPcount;  //Average Downside Penetration
  29. MultiplierSwitch= Param("+SDs (0) or *ADP (1)",0,0,1,1); /*Keep at 0 to use Mean+StdDev of DP, or set to 1 to use multiples of mean DP */
  30. ADPmult= Param("ADP Multiplier",2,1,4,.1);  /*How many multiples of mean DP to use*/
  31. SDmult = Param("StDev Multiplier",1,0,3,.1); /*Or use Mean + StdDevs*/
  32. StpLvl= Param("StopLevel",2,1,50,1); /*Adjust to keep the stop from dropping past the relevant low*/
  33. Plot(DPcount,"nDPcount",46,styleNoLine+styleOwnScale); /* It can be handy to know how many DPs go into your calculation */
  34. ADPzone= L-(ADP*ADPmult); //If based on ADPmultiple
  35. SDzone= L-(ADP+(SDmult*(StDev(DP,Pd)))); //If based on Mean+StdDev
  36. SafeZone= IIf(MultiplierSwitch == 0,SDzone,ADPzone);
  37. SafeZoneStop= HHV(SafeZone, StpLvl);
  38. Plot (SafeZoneStop,"   SafeZoneStop",54,1);  
  39. Title = Name() + ":  " + Date() + "\c55    Open \c-1" + WriteVal(O,1.2) + "\c55  Hi \c-1" +WriteVal(H,1.2) + "\c55  Lo \c-1" +WriteVal(L,1.2) + " \c55 Close \c-1" +  WriteVal(C,1.2) + " \c46 nDPcount = \c-1" +WriteVal(DPcount,1) + "\c54    SafeZone Stop = \c-1" +WriteVal(SafeZoneStop,1.2);