| 
 Hi, 
  
By merging multiple formula's, you 
dont get anything other than crap. Your code length is 3111 lines and includes 
everything from ADX to MACD to RSI to Crossovers to Random Number Generator to 
............Phew.  
  
Well, if you want to write a Trading 
formula, this is defnitely not the way to do it. What you should do instead is 
start off with say a simple Moving Average Crossover and then add new 
conditions. 
  
A simple system such as Buy on Monday 
and Sell of Friday too can be profitable.  
  
Cheers 
  
Prashanth 
  
----- Original Message -----  
  
  
  Sent: Wednesday, September 03, 2008 
  19:24 
  Subject: Re: Re: [amibroker] how to use 
  this formula for eod & how to find next day buy & sell signal help 
  me 
  
  
    sir, actually i want to make this in simpler way can u help me to 
  cut some or make it simplier cause i am mix various fromula. i gots results 
  but i want a profitable eod system that gives me buy & sell signals with 
  buy price & sell price also stop loss but its profitable results. for 
  daytrading as well as in short mid & long 
  term.
 
  thanks
  regards 
  vinod
 
  On Wed, 03 Sep 
  2008 Grant Noble wrote : >Dude, that's a mountain of code you've cobbled 
  together. Makes my head hurt looking at it. Maybe you >should start with 
  something a bit simpler.. G > >vin wrote: > > --- In 
  amibroker@xxxxxxxxxxxxxxx, "vin" <vins1432000@xxx> wrote: > 
  > > > i want to use this formula for eod for next day buy sell but 
  i am > > getting problem how to work with this. also i want buy & 
  sell alert > > with buy price & sell price along wth buy sell 
  arrorowsin graph. > > kindly help me this formula in all level 
  correct it if its wrong. also > > backtest, exploration, also create 
  text alert for buy & sell signal > > genarates. > 
  > > > formula is here > > > > > > // 
  ************************** > > // BEING EXPLORATION CODE > > 
  // ************************** > > > > // -- what will be our 
  lookback range for the hh and ll? > > nBars = Param("Number of bars", 
  12, 5, 40); > > bTrace = Param("Include trace output", 1, 0, 
  1); > > nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 
  1); > > bShowTCZ = Param("Show TCZ", 1, 0, 1); > > 
  nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 
  1); > > nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, 
  .04, .2, > > .01); > > bLastBarCanBePiv = Param("Last bar 
  can be a pivot", 1, 0, 1); > > retrcTolerance = .01; > > 
  tczTolerance = .005; > > nNumBarsToScan = 120; > > > 
  > // -- added from exploration version 20040204 > > nExploreBarIdx 
  = 0; > > nExploreDate = 0; > > nCurDateNum = 0; > > 
  DN = DateNum(); > > DT = DateTime(); > > > > // -- 
  key exploration variables > > bTCZLong = Buy =False; > > 
  bTCZShort = Sell =False; > > nAnchorPivIdx = 0; > > > 
  > ADX8 = ADX(8); > > > > // 1 - INDICATOR, 2 - 
  COMMENTARY, 3 - SCAN, > > // 4 - EXPLORATION, 5 - BACKTEST / 
  Optimize > > if(Status("action")==1) { > >     
   bDraw = True; > >      bUseLastVis = Param("Use 
  last visible bar", 1, 0, 1); > > } else { > >     
   bDraw = False; > >      bUseLastVis = 
  False; > >      bTrace = False; > >   
     nExploreDate = Status("rangetodate"); > >     
   for (i=LastValue(BarIndex());i>=0;i--) { > >     
        nCurDateNum = DN[i]; > >     
        if (nCurDateNum == nExploreDate) { > > 
                 nExploreBarIdx = 
  i; > >           } > >   
     } > > // -- if(Status("action")==1... > > 
  } > > > > GraphXSpace=7; > > > > // -- 
  basic candle chart > > // -- if this appears inside if block, 
  strange > > //    drawing results! > > 
  PlotOHLC(Open, High, Low, Close, > >      "BIdx = " + 
  BarIndex() + > >      "\n" + "O = " + O + "\n"+"H = "+ 
  H + "\n"+"L  = " + L > >      + "\n"+"C 
  ", > >      colorBlack, styleCandle); > 
  > > > if (bDraw) { > >      Plot(MA(C, 
  21), "21 bar MA", colorAqua, > >          
   styleLine+styleNoRescale+styleNoLabel); > >     
   Plot(MA(C, 55), "55 bar MA", colorGreen, > >     
        styleLine+styleNoRescale+styleNoLabel); > > 
       //Plot(MA(C, 233), "233 bar MA", colorDarkRed, > 
  >      //    
   styleLine+styleNoRescale+styleNoLabel); > > } > 
  > > > // -- Create 0-initialized arrays the size of 
  barcount > > aHPivs = H - H; > > aLPivs = L - L; > 
  > aHPivHighs = H - H; > > aLPivLows = L - L; > > 
  aHPivIdxs = H - H; > > aLPivIdxs = L - L; > > aAddedHPivs = 
  H - H; > > aAddedLPivs = L - L; > > aLegVol = H - H; > 
  > aRetrcVol = H - H; > > > > nHPivs = 0; > > 
  nLPivs = 0; > > > > lastHPIdx = 0; > > lastLPIdx = 
  0; > > lastHPH = 0; > > lastLPL = 0; > > 
  curPivBarIdx = 0; > > > > // -- looking back from the 
  current bar, how many bars > > //    back were the hhv and 
  llv values of the previous > > //    n bars, etc.? > 
  > aHHVBars = HHVBars(H, nBars); > > aLLVBars = LLVBars(L, 
  nBars); > > aHHV = HHV(H, nBars); > > aLLV = LLV(L, 
  nBars); > > > > // -- Initialize value of curTrend > 
  > nLastVisBar = LastValue( > >     
   Highest(IIf(Status("barvisible"), BarIndex(), 0))); > > > 
  > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar, > 
  >      IIf(Status("action")==4 AND nExploreBarIdx > 0, 
  nExploreBarIdx, > >     
   LastValue(BarIndex()))); > > > > curTrend = 
  ""; > > if (aLLVBars[curBar] < aHHVBars[curBar]) > > 
       curTrend = "D"; > > else > >   
     curTrend = "U"; > > > > // -- Loop through 
  bars. Search for > > //    entirely array-based 
  approach > > //    in future version > > /* 
  ******************* > >      Find main pivots > 
  > ******************* */ > > > > // -- Make sure there 
  are enough bars! > > if (curBar >= nNumBarsToScan) { > > 
       for (i=0; i<nNumBarsToScan; i++) { > > > 
  >           // -- value of curBar dependent 
  on two parameters > >           curBar 
  = IIf(nlastVisBar > 0 AND bUseLastVis, > >     
             nlastVisBar-i, > > 
                
   IIf(Status("action")==4 AND nExploreBarIdx > 0, > >   
               nExploreBarIdx-i, > 
  >               
   LastValue(BarIndex())-i)); > > > >     
        // -- Have we identified a pivot? If trend is 
  down... > >           if 
  (aLLVBars[curBar] < aHHVBars[curBar]) { > > > >   
               // ... and had been up, 
  this is a trend change > >          
        if (curTrend == "U") { > >     
                  curTrend = 
  "D"; > >               
        // -- Capture pivot information > >   
                   
   curPivBarIdx = curBar - aLLVBars[curBar]; > >     
                 
   aLPivs[curPivBarIdx] = 1; > >          
             aLPivLows[nLPivs] = 
  L[curPivBarIdx]; > >             
          aLPivIdxs[nLPivs] = curPivBarIdx; > 
  >                    
   nLPivs++; > >             
     } > >           // -- or 
  current trend is up > >           } 
  else { > >               
   if (curTrend == "D") { > >          
             curTrend = "U"; > > 
                     
   curPivBarIdx = curBar - aHHVBars[curBar]; > >     
                 
   aHPivs[curPivBarIdx] = 1; > >          
             aHPivHighs[nHPivs] = 
  H[curPivBarIdx]; > >             
          aHPivIdxs[nHPivs] = curPivBarIdx; > 
  >                    
   nHPivs++; > >             
     } > >           // -- 
       If curTrend is up...else... > >     
        } > > > >      // 
  -- loop through bars > >      } > > } > 
  > /* ******************* > >      Found main 
  pivots > > ******************* */ > > > > /* 
  ************************* > >      Finding missed 
  pivot(s) > > ************************* */ > > > > 
  // -- Start at last bar. Reestablish curBar > > curBar = > > 
       IIf(nlastVisBar > 0 AND bUseLastVis, > > 
       nlastVisBar, > >     
   IIf(Status("action")==4 AND nExploreBarIdx > 0, > >   
     nExploreBarIdx, > >     
   LastValue(BarIndex())) > >      ); > 
  > > > // -- Make sure I found at least two of each above. > 
  > if (nHPivs >= 2 AND nLPivs >= 2) { > > > >   
     lastLPIdx = aLPivIdxs[0]; > >     
   lastLPL = aLPivLows[0]; > > > >     
   lastHPIdx = aHPivIdxs[0]; > >      lastHPH = 
  aHPivHighs[0]; > > > >      nLastHOrLPivIdx = 
  Max(lastLPIdx, lastHPIdx); > > > >     
   nAddPivsRng = curBar - nLastHOrLPivIdx; > >     
   aLLVAfterLastPiv = LLV(L, nAddPivsRng); > >     
   nLLVAfterLastPiv = aLLVAfterLastPiv[curBar]; > >     
   aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng); > >   
     nLLVIdxAfterLastPiv = curBar - 
  aLLVIdxAfterLastPiv[curBar]; > >      aHHVAfterLastPiv 
  = HHV(H, nAddPivsRng); > >      nHHVAfterLastPiv = 
  aHHVAfterLastPiv[curBar]; > >      aHHVIdxAfterLastPiv 
  = HHVBars(H, nAddPivsRng); > >     
   nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv[curBar]; > 
  > > >      // -- Later want to add last high pivot 
  only if > >      //    not in buy mode from 
  last and still in trade > > > >     
   /* > >           Note - I'm only 
  interested in adding pivots if I'm in > >        
     a higher-highs or lower-lows scenario > >     
   */ > > > > > >      // -- OK, 
  let's start where the last high pivot occurs after the > >   
     //    last Low pivot > >     
   if (lastHPIdx > lastLPIdx) { > > > >     
        /*     There are at least two 
  possibilities here. One is that > >          
          the previous high was higher, indicating that 
  this is a > >               
     possible short retracement or one in the making. > > 
                   The other 
  is that the previous high was lower, indicating > >     
               that this is a possible 
  long retracement in the working. > >        
          However, both depend on opposing pivots. 
  E.g., if I find > >             
     higher highs, what if I have lower lows? > > > 
  >                If the highs 
  are descending, then I can consider: > >        
                 - a lower low, and 
  leave it at that > >            
             - a higher high and higher 
  low > >                 
        - a lower low and another lower high > > 
            */ > >     
        if (aHPivHighs[0] < aHPivHighs[1]) { > 
  > > >               
   if (nLLVAfterLastPiv < aLPivLows[0] AND > >     
                 
   (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= nMinBarsBtwPivs > > 
                     
   AND nLLVIdxAfterLastPiv != curBar     ) { > 
  > > >               
        // -- OK, we'll add this as a pivot. > > 
                     
   //    Mark it for plotting... > >     
                 
   aLPivs[nLLVIdxAfterLastPiv] = 1; > >        
              
   aAddedLPivs[nLLVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nLPivs; j++) { > >          
                 
   aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; > >   
                   
        aLPivIdxs[nLPivs-j] = 
  aLPivIdxs[nLPivs-(j+1)]; > >          
             } > >     
                  aLPivLows[0] 
  = nLLVAfterLastPiv; > >          
             aLPivIdxs[0] = 
  nLLVIdxAfterLastPiv; > >          
             nLPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >           // 
  -- Here, the last piv is a high piv, and we have > >     
        //    higher-highs. The most likely 
  addition is a > >           //  
    Low piv that is a retracement. > >        
     } else { > > > >        
          if (nLLVAfterLastPiv > aLPivLows[0] 
  AND > >               
        (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= 
  nMinBarsBtwPivs > >             
          AND nLLVIdxAfterLastPiv != curBar  
     ) { > > > >          
             // -- OK, we'll add this as a 
  pivot. > >               
        //    Mark it for plotting... > > 
                     
   aLPivs[nLLVIdxAfterLastPiv] = 1; > >        
              
   aAddedLPivs[nLLVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nLPivs; j++) { > >          
                 
   aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; > >   
                   
        aLPivIdxs[nLPivs-j] = 
  aLPivIdxs[nLPivs-(j+1)]; > >          
             } > >     
                  aLPivLows[0] 
  = nLLVAfterLastPiv; > >          
             aLPivIdxs[0] = 
  nLLVIdxAfterLastPiv; > >          
             nLPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > >           // -- The last 
  piv is a high and we have higher highs > >        
     //    OR lower highs > >     
        } > > > >      /* 
  **************************************************************** > > 
            Still finding missed pivot(s). Here, 
  the last piv is a low piv. > >     
   **************************************************************** 
  */ > >      } else { > > > >   
          // -- First case, lower highs > > 
            if (aHPivHighs[0] < aHPivHighs[1]) 
  { > > > >             
     if (nHHVAfterLastPiv < aHPivHighs[0] AND > >   
                   
   (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= nMinBarsBtwPivs > > 
                     
   AND nHHVIdxAfterLastPiv != curBar     ) { > 
  > > >               
        // -- OK, we'll add this as a pivot. > > 
                     
   //    Mark that for plotting > >     
                 
   aHPivs[nHHVIdxAfterLastPiv] = 1; > >        
              
   aAddedHPivs[nHHVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nHPivs; j++) { > >          
                 
   aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)]; > >   
                   
        aHPivIdxs[nHPivs-j] = 
  aHPivIdxs[nhPivs-(j+1)]; > >          
             } > >     
                 
   aHPivHighs[0] = nHHVAfterLastPiv; > >     
                  aHPivIdxs[0] 
  = nHHVIdxAfterLastPiv; > >          
             nHPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >           // 
  -- Second case when last piv is a low piv, higher highs > >   
          //    Most likely addition is high 
  piv that is a retracement. > >          
   //    Considering adding a high piv as long as it is 
  higher > >           } else { > 
  > > >               
   // -- Where I have higher highs, > >        
          if (nHHVAfterLastPiv > aHPivHighs[0] 
  AND > >               
        (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= 
  nMinBarsBtwPivs > >             
          AND nHHVIdxAfterLastPiv != curBar  
     ) { > > > >          
             // -- OK, we'll add this as a 
  pivot. > >               
        //    Mark it for plotting... > > 
                     
   aHPivs[nHHVIdxAfterLastPiv] = 1; > >        
              
   aAddedHPivs[nHHVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nHPivs; j++) { > >          
                 
   aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)]; > >   
                   
        aHPivIdxs[nHPivs-j] = 
  aHPivIdxs[nhPivs-(j+1)]; > >          
             } > >     
                 
   aHPivHighs[0] = nHHVAfterLastPiv; > >     
                  aHPivIdxs[0] 
  = nHHVIdxAfterLastPiv; > >          
             nHPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >          
   } > > > >      } > > > 
  > // -- If there are at least two of each > > } > 
  > > > /* **************************************** > > // 
  -- Done with finding pivots > > 
  ***************************************** */ > > > > if 
  (bDraw) { > > > >      // -- OK, let's plot 
  the pivots using arrows > >      PlotShapes( > 
  >           IIf(aHPivs==1, shapeDownArrow, 
  shapeNone), > >               
   colorRed, 0,      High, Offset=-15); > >   
     PlotShapes( > >          
   IIf(aAddedHPivs==1, shapeDownArrow, shapeNone), > >   
               colorDarkRed, 0, High, 
  Offset=-15); > >      PlotShapes( > >   
          IIf(aLPivs==1, shapeUpArrow , 
  shapeNone), > >               
   colorGreen, 0, Low, Offset=-15); > >     
   PlotShapes( > >          
   IIf(aAddedLPivs==1, shapeUpArrow , shapeNone), > >   
               colorDarkGreen, 0, Low, 
  Offset=-15); > > } > > > > > > /* 
  **************************************** > > // -- Done with 
  discovering and plotting pivots > > 
  ***************************************** */ > > > > // -- 
  I'm going to want to look for possible retracement > > risk = 
  0; > > profInc = 0; > > nLeg0Pts = 0; > > nLeg0Bars 
  = 0; > > nLeg0Vol = 0; > > nLeg1Pts = 0; > > 
  nLeg1Bars = 0; > > nLeg1Vol = 0; > > nLegBarsDiff = 
  0; > > nRtrc0Pts = 0; > > nRtrc0Bars = 0; > > 
  nRtrc0Vol = 0; > > nRtrc1Pts = 0; > > nRtrc1Bars = 
  0; > > nRtrc1Vol = 0; > > > > minRtrc = 0; > 
  > maxRtrc = 0; > > minLine = 0; > > maxLine = 0; > 
  > triggerLine = 0; > > firstProfitLine = 0; > > 
  triggerInc = 0; > > triggerPrc = 0; > > firstProfitPrc = 
  0; > > retrcPrc = 0; > > retrcBar = 0; > > 
  retrcBarIdx = 0; > > retrcRng = 0; > > aRetrcPrc = 
  H-H; > > aRetrcPrcBars = H-H; > > aRetrcClose = C; > 
  > retrcClose = 0; > > > > // -- Do TCZ calcs. Arrangement 
  of pivs very specific > > //    for this setup. > 
  > if (nHPivs >= 2 AND > >      nLPivs >=2 
  AND > >      aHPivHighs[0] > aHPivHighs[1] 
  AND > >      aLPivLows[0] > aLPivLows[1]) { > 
  > > >      tcz500 = > >     
   (aHPivHighs[0] - > >      (.5 * (aHPivHighs[0] - 
  aLPivLows[1]))); > > > >      tcz618 
  = > >      (aHPivHighs[0] - > >     
   (.618 * (aHPivHighs[0] - aLPivLows[1]))); > > > > 
       tcz786 = > >      (aHPivHighs[0] 
  - > >      (.786 * (aHPivHighs[0] - 
  aLPivLows[0]))); > > > >      retrcRng = 
  curBar  - aHPivIdxs[0]; > >      aRetrcPrc = 
  LLV(L, retrcRng); > >      retrcPrc = 
  aRetrcPrc[curBar]; > >      aRetrcPrcBars  = 
  LLVBars(L, retrcRng); > >      retrcBarIdx = curBar - 
  aRetrcPrcBars[curBar]; > >      retrcClose = 
  aRetrcClose[retrcBarIdx]; > > > >      // -- 
  bTCZLong setup? > >      bTCZLong = ( > 
  > > >           // -- Are 
  retracement levels arranged in > >          
   //    tcz order? > >        
     tcz500 >= (tcz786 * (1 - tczTolerance)) > >   
          AND > >        
     // .681 is below .786 for long setups > >     
        tcz618 <= (tcz786 * (1 + tczTolerance)) > 
  >           AND > > > > 
            // -- Is the low in the tcz 
  range > >           // -- Is the close 
  >= low of tcz range > >          
   //    and low <= high of tcz range > >   
          retrcClose >= ((1 - retrcTolerance) 
  *  tcz618) > >          
   AND > >           retrcPrc <= 
  ((1 + retrcTolerance) *  tcz500) > >        
     ); > > > >          
   // -- risk would be high of signal bar minus low of zone > > 
            //risk = 0; > > > > 
  // -- lower highs and lower lows > > } else if (nHPivs >= 2 AND 
  nLPivs >=2 > >      AND aHPivHighs[0] < 
  aHPivHighs[1] > >      AND aLPivLows[0] < 
  aLPivLows[1]) { > > > >      tcz500 = > 
  >      (aHPivHighs[1] - > >      (.5 
  * (aHPivHighs[1] - aLPivLows[0]))); > > > >     
   tcz618 = > >      (aHPivHighs[0] - > > 
       (.618 * (aHPivHighs[1] - aLPivLows[0]))); > 
  > > >      tcz786 = > >     
   (aHPivHighs[0] - > >      (.786 * (aHPivHighs[0] 
  - aLPivLows[0]))); > > > >      retrcRng = 
  curBar  - aLPivIdxs[0]; > >      aRetrcPrc = 
  HHV(H, retrcRng); > >      retrcPrc = 
  aRetrcPrc[curBar]; > >      aRetrcPrcBars  = 
  HHVBars(H, retrcRng); > >      retrcBarIdx = curBar - 
  aRetrcPrcBars[curBar]; > >      retrcClose = 
  aRetrcClose[retrcBarIdx]; > > > >     
   bTCZShort = ( > >           // -- 
  Are retracement levels arranged in > >        
     //    tcz order? > > > >   
          // .500 is below .786 for short 
  setups > >           tcz500 <= 
  (tcz786 * (1 + tczTolerance)) > >          
   AND > >           // .681 is 
  above .786 for short setups > >          
   tcz618 >= (tcz786 * (1 - tczTolerance)) > >     
        AND > > > >     
        // -- Is the close <= high of tcz range > 
  >           //    and high >= 
  low of tcz range > >          
   retrcClose <= ((1 + retrcTolerance) *  tcz618) > > 
            AND > >     
        retrcPrc >= ((1 - retrcTolerance) *  
  tcz500) > >           ); > 
  > > >           // -- Risk would be 
  top of zone - low of signal bar > >          
   //risk = 0; > > } > > > > Filter = (bTCZShort 
  OR bTCZLong); > > AddColumn(C, "Close"); > > 
  AddColumn(IIf(bTCZLong, 76, 83), "L/S", formatChar); > > > > 
  // ************************** > > // END EXPLORATION CODE > 
  > // ************************** > > > > // 
  ************************** > > // BEGIN INDICATOR CODE > > 
  // ************************** > > > > // -- what will be our 
  lookback range for the hh and ll? > > nBars = Param("Number of bars", 
  12, 5, 40); > > bTrace = Param("Include trace output", 1, 0, 
  1); > > nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 
  1); > > bShowTCZ = Param("Show TCZ", 1, 0, 1); > > 
  nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 
  1); > > nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, 
  .04, .2, > > .01); > > bLastBarCanBePiv = Param("Last bar 
  can be a pivot", 1, 0, 1); > > retrcTolerance = .01; > > 
  tczTolerance = .005; > > nNumBarsToScan = 120; > > > 
  > // -- added from exploration version 20040204 > > nExploreBarIdx 
  = 0; > > nExploreDate = 0; > > nCurDateNum = 0; > > 
  DN = DateNum(); > > DT = DateTime(); > > > > // -- 
  key exploration variables > > bTCZLong = Buy = False; > > 
  bTCZShort = Sell = False; > > nAnchorPivIdx = 0; > > > 
  > ADX8 = ADX(8); > > > > // 1 - INDICATOR, 2 - 
  COMMENTARY, 3 - SCAN, > > // 4 - EXPLORATION, 5 - BACKTEST / 
  Optimize > > if(Status("action")==1) { > >     
   bDraw = True; > >      bUseLastVis = Param("Use 
  last visible bar", 1, 0, 1); > > } else { > >     
   bDraw = False; > >      bUseLastVis = 
  False; > >      bTrace = False; > >   
     nExploreDate = Status("rangetodate"); > >     
   for (i=LastValue(BarIndex());i>=0;i--) { > >     
        nCurDateNum = DN[i]; > >     
        if (nCurDateNum == nExploreDate) { > > 
                 nExploreBarIdx = 
  i; > >           } > >   
     } > > // -- if(Status("action")==1... > > 
  } > > > > GraphXSpace=7; > > > > // -- 
  basic candle chart > > // -- if this appears inside if block, 
  strange > > //    drawing results! > > 
  PlotOHLC(Open, High, Low, Close, > >      "BIdx = " + 
  BarIndex() + > >      "\n" + "O = " + O + "\n"+"H = "+ 
  H + "\n"+"L  = " + L > >      + "\n"+"C 
  ", > >      colorBlack, styleCandle); > 
  > > > if (bDraw) { > >      Plot(MA(C, 
  21), "21 bar MA", colorAqua, > >          
   styleLine+styleNoRescale+styleNoLabel); > >     
   Plot(MA(C, 55), "55 bar MA", colorGreen, > >     
        styleLine+styleNoRescale+styleNoLabel); > > 
       //Plot(MA(C, 233), "233 bar MA", colorDarkRed, > 
  >      //    
   styleLine+styleNoRescale+styleNoLabel); > > } > 
  > > > // -- Create 0-initialized arrays the size of 
  barcount > > aHPivs = H - H; > > aLPivs = L - L; > 
  > aHPivHighs = H - H; > > aLPivLows = L - L; > > 
  aHPivIdxs = H - H; > > aLPivIdxs = L - L; > > aAddedHPivs = 
  H - H; > > aAddedLPivs = L - L; > > aLegVol = H - H; > 
  > aRetrcVol = H - H; > > > > nHPivs = 0; > > 
  nLPivs = 0; > > > > lastHPIdx = 0; > > lastLPIdx = 
  0; > > lastHPH = 0; > > lastLPL = 0; > > 
  curPivBarIdx = 0; > > > > // -- looking back from the 
  current bar, how many bars > > //    back were the hhv and 
  llv values of the previous > > //    n bars, etc.? > 
  > aHHVBars = HHVBars(H, nBars); > > aLLVBars = LLVBars(L, 
  nBars); > > aHHV = HHV(H, nBars); > > aLLV = LLV(L, 
  nBars); > > > > // -- Initialize value of curTrend > 
  > nLastVisBar = LastValue( > >     
   Highest(IIf(Status("barvisible"), BarIndex(), 0))); > > > 
  > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar, > 
  >      IIf(Status("action")==4 AND nExploreBarIdx > 0, 
  nExploreBarIdx, > >     
   LastValue(BarIndex()))); > > > > curTrend = 
  ""; > > if (aLLVBars[curBar] < aHHVBars[curBar]) > > 
       curTrend = "D"; > > else > >   
     curTrend = "U"; > > > > // -- Loop through 
  bars. Search for > > //    entirely array-based 
  approach > > //    in future version > > /* 
  ******************* > >      Find main pivots > 
  > ******************* */ > > > > // -- Make sure there 
  are enough bars! > > if (curBar >= nNumBarsToScan) { > > 
       for (i=0; i<nNumBarsToScan; i++) { > > > 
  >           // -- value of curBar dependent 
  on two parameters > >           curBar 
  = IIf(nlastVisBar > 0 AND bUseLastVis, > >     
             nlastVisBar-i, > > 
                
   IIf(Status("action")==4 AND nExploreBarIdx > 0, > >   
               nExploreBarIdx-i, > 
  >               
   LastValue(BarIndex())-i)); > > > >     
        // -- Have we identified a pivot? If trend is 
  down... > >           if 
  (aLLVBars[curBar] < aHHVBars[curBar]) { > > > >   
               // ... and had been up, 
  this is a trend change > >          
        if (curTrend == "U") { > >     
                  curTrend = 
  "D"; > >               
        // -- Capture pivot information > >   
                   
   curPivBarIdx = curBar - aLLVBars[curBar]; > >     
                 
   aLPivs[curPivBarIdx] = 1; > >          
             aLPivLows[nLPivs] = 
  L[curPivBarIdx]; > >             
          aLPivIdxs[nLPivs] = curPivBarIdx; > 
  >                    
   nLPivs++; > >             
     } > >           // -- or 
  current trend is up > >           } 
  else { > >               
   if (curTrend == "D") { > >          
             curTrend = "U"; > > 
                     
   curPivBarIdx = curBar - aHHVBars[curBar]; > >     
                 
   aHPivs[curPivBarIdx] = 1; > >          
             aHPivHighs[nHPivs] = 
  H[curPivBarIdx]; > >             
          aHPivIdxs[nHPivs] = curPivBarIdx; > 
  >                    
   nHPivs++; > >             
     } > >           // -- 
       If curTrend is up...else... > >     
        } > > > >      // 
  -- loop through bars > >      } > > } > 
  > /* ******************* > >      Found main 
  pivots > > ******************* */ > > > > /* 
  ************************* > >      Finding missed 
  pivot(s) > > ************************* */ > > > > 
  // -- Start at last bar. Reestablish curBar > > curBar = > > 
       IIf(nlastVisBar > 0 AND bUseLastVis, > > 
       nlastVisBar, > >     
   IIf(Status("action")==4 AND nExploreBarIdx > 0, > >   
     nExploreBarIdx, > >     
   LastValue(BarIndex())) > >      ); > 
  > > > // -- Make sure I found at least two of each above. > 
  > if (nHPivs >= 2 AND nLPivs >= 2) { > > > >   
     lastLPIdx = aLPivIdxs[0]; > >     
   lastLPL = aLPivLows[0]; > > > >     
   lastHPIdx = aHPivIdxs[0]; > >      lastHPH = 
  aHPivHighs[0]; > > > >      nLastHOrLPivIdx = 
  Max(lastLPIdx, lastHPIdx); > > > >     
   nAddPivsRng = curBar - nLastHOrLPivIdx; > >     
   aLLVAfterLastPiv = LLV(L, nAddPivsRng); > >     
   nLLVAfterLastPiv = aLLVAfterLastPiv[curBar]; > >     
   aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng); > >   
     nLLVIdxAfterLastPiv = curBar - 
  aLLVIdxAfterLastPiv[curBar]; > >      aHHVAfterLastPiv 
  = HHV(H, nAddPivsRng); > >      nHHVAfterLastPiv = 
  aHHVAfterLastPiv[curBar]; > >      aHHVIdxAfterLastPiv 
  = HHVBars(H, nAddPivsRng); > >     
   nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv[curBar]; > 
  > > >      // -- Later want to add last high pivot 
  only if > >      //    not in buy mode from 
  last and still in trade > > > >     
   /* > >           Note - I'm only 
  interested in adding pivots if I'm in > >        
     a higher-highs or lower-lows scenario > >     
   */ > > > > > >      // -- OK, 
  let's start where the last high pivot occurs after the > >   
     //    last Low pivot > >     
   if (lastHPIdx > lastLPIdx) { > > > >     
        /*     There are at least two 
  possibilities here. One is that > >          
          the previous high was higher, indicating that 
  this is a > >               
     possible short retracement or one in the making. > > 
                   The other 
  is that the previous high was lower, indicating > >     
               that this is a possible 
  long retracement in the working. > >        
          However, both depend on opposing pivots. 
  E.g., if I find > >             
     higher highs, what if I have lower lows? > > > 
  >                If the highs 
  are descending, then I can consider: > >        
                 - a lower low, and 
  leave it at that > >            
             - a higher high and higher 
  low > >                 
        - a lower low and another lower high > > 
            */ > >     
        if (aHPivHighs[0] < aHPivHighs[1]) { > 
  > > >               
   if (nLLVAfterLastPiv < aLPivLows[0] AND > >     
                 
   (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= nMinBarsBtwPivs > > 
                     
   AND nLLVIdxAfterLastPiv != curBar     ) { > 
  > > >               
        // -- OK, we'll add this as a pivot. > > 
                     
   //    Mark it for plotting... > >     
                 
   aLPivs[nLLVIdxAfterLastPiv] = 1; > >        
              
   aAddedLPivs[nLLVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nLPivs; j++) { > >          
                 
   aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; > >   
                   
        aLPivIdxs[nLPivs-j] = 
  aLPivIdxs[nLPivs-(j+1)]; > >          
             } > >     
                  aLPivLows[0] 
  = nLLVAfterLastPiv; > >          
             aLPivIdxs[0] = 
  nLLVIdxAfterLastPiv; > >          
             nLPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >           // 
  -- Here, the last piv is a high piv, and we have > >     
        //    higher-highs. The most likely 
  addition is a > >           //  
    Low piv that is a retracement. > >        
     } else { > > > >        
          if (nLLVAfterLastPiv > aLPivLows[0] 
  AND > >               
        (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= 
  nMinBarsBtwPivs > >             
          AND nLLVIdxAfterLastPiv != curBar  
     ) { > > > >          
             // -- OK, we'll add this as a 
  pivot. > >               
        //    Mark it for plotting... > > 
                     
   aLPivs[nLLVIdxAfterLastPiv] = 1; > >        
              
   aAddedLPivs[nLLVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nLPivs; j++) { > >          
                 
   aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; > >   
                   
        aLPivIdxs[nLPivs-j] = 
  aLPivIdxs[nLPivs-(j+1)]; > >          
             } > >     
                  aLPivLows[0] 
  = nLLVAfterLastPiv; > >          
             aLPivIdxs[0] = 
  nLLVIdxAfterLastPiv; > >          
             nLPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > >           // -- The last 
  piv is a high and we have higher highs > >        
     //    OR lower highs > >     
        } > > > >      /* 
  **************************************************************** > > 
            Still finding missed pivot(s). Here, 
  the last piv is a low piv. > >     
   **************************************************************** 
  */ > >      } else { > > > >   
          // -- First case, lower highs > > 
            if (aHPivHighs[0] < aHPivHighs[1]) 
  { > > > >             
     if (nHHVAfterLastPiv < aHPivHighs[0] AND > >   
                   
   (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= nMinBarsBtwPivs > > 
                     
   AND nHHVIdxAfterLastPiv != curBar     ) { > 
  > > >               
        // -- OK, we'll add this as a pivot. > > 
                     
   //    Mark that for plotting > >     
                 
   aHPivs[nHHVIdxAfterLastPiv] = 1; > >        
              
   aAddedHPivs[nHHVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nHPivs; j++) { > >          
                 
   aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)]; > >   
                   
        aHPivIdxs[nHPivs-j] = 
  aHPivIdxs[nhPivs-(j+1)]; > >          
             } > >     
                 
   aHPivHighs[0] = nHHVAfterLastPiv; > >     
                  aHPivIdxs[0] 
  = nHHVIdxAfterLastPiv; > >          
             nHPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >           // 
  -- Second case when last piv is a low piv, higher highs > >   
          //    Most likely addition is high 
  piv that is a retracement. > >          
   //    Considering adding a high piv as long as it is 
  higher > >           } else { > 
  > > >               
   // -- Where I have higher highs, > >        
          if (nHHVAfterLastPiv > aHPivHighs[0] 
  AND > >               
        (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= 
  nMinBarsBtwPivs > >             
          AND nHHVIdxAfterLastPiv != curBar  
     ) { > > > >          
             // -- OK, we'll add this as a 
  pivot. > >               
        //    Mark it for plotting... > > 
                     
   aHPivs[nHHVIdxAfterLastPiv] = 1; > >        
              
   aAddedHPivs[nHHVIdxAfterLastPiv] = 1; > > > >   
                   
   //    ...and then rearrange elements in the > > 
                     
   //    pivot information arrays > >     
                  for (j=0; 
  j<nHPivs; j++) { > >          
                 
   aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)]; > >   
                   
        aHPivIdxs[nHPivs-j] = 
  aHPivIdxs[nhPivs-(j+1)]; > >          
             } > >     
                 
   aHPivHighs[0] = nHHVAfterLastPiv; > >     
                  aHPivIdxs[0] 
  = nHHVIdxAfterLastPiv; > >          
             nHPivs++; > > > 
  >                // -- Test 
  whether to add piv given last piv is high > >     
             //    AND we have 
  lower highs > >               
   } > > > >          
   } > > > >      } > > > 
  > // -- If there are at least two of each > > } > 
  > > > /* **************************************** > > // 
  -- Done with finding pivots > > 
  ***************************************** */ > > > > if 
  (bDraw) { > > > >      // -- OK, let's plot 
  the pivots using arrows > >      PlotShapes( > 
  >           IIf(aHPivs==1, shapeDownArrow, 
  shapeNone), > >               
   colorRed, 0,      High, Offset=-15); > >   
     PlotShapes( > >          
   IIf(aAddedHPivs==1, shapeDownArrow, shapeNone), > >   
               colorDarkRed, 0, High, 
  Offset=-15); > >      PlotShapes( > >   
          IIf(aLPivs==1, shapeUpArrow , 
  shapeNone), > >               
   colorGreen, 0, Low, Offset=-15); > >     
   PlotShapes( > >          
   IIf(aAddedLPivs==1, shapeUpArrow , shapeNone), > >   
               colorDarkGreen, 0, Low, 
  Offset=-15); > > } > > > > > > /* 
  **************************************** > > // -- Done with 
  discovering and plotting pivots > > 
  ***************************************** */ > > > > // -- 
  I'm going to want to look for possible retracement > > risk = 
  0; > > profInc = 0; > > nLeg0Pts = 0; > > nLeg0Bars 
  = 0; > > nLeg0Vol = 0; > > nLeg1Pts = 0; > > 
  nLeg1Bars = 0; > > nLeg1Vol = 0; > > nLegBarsDiff = 
  0; > > nRtrc0Pts = 0; > > nRtrc0Bars = 0; > > 
  nRtrc0Vol = 0; > > nRtrc1Pts = 0; > > nRtrc1Bars = 
  0; > > nRtrc1Vol = 0; > > > > minRtrc = 0; > 
  > maxRtrc = 0; > > minLine = 0; > > maxLine = 0; > 
  > triggerLine = 0; > > firstProfitLine = 0; > > 
  triggerInc = 0; > > triggerPrc = 0; > > firstProfitPrc = 
  0; > > retrcPrc = 0; > > retrcBar = 0; > > 
  retrcBarIdx = 0; > > retrcRng = 0; > > aRetrcPrc = 
  H-H; > > aRetrcPrcBars = H-H; > > aRetrcClose = C; > 
  > retrcClose = 0; > > > > // -- Do TCZ calcs. Arrangement 
  of pivs very specific > > //    for this setup. > 
  > if (nHPivs >= 2 AND > >      nLPivs >=2 
  AND > >      aHPivHighs[0] > aHPivHighs[1] 
  AND > >      aLPivLows[0] > aLPivLows[1]) { > 
  > > >      tcz500 = > >     
   (aHPivHighs[0] - > >      (.5 * (aHPivHighs[0] - 
  aLPivLows[1]))); > > > >      tcz618 
  = > >      (aHPivHighs[0] - > >     
   (.618 * (aHPivHighs[0] - aLPivLows[1]))); > > > > 
       tcz786 = > >      (aHPivHighs[0] 
  - > >      (.786 * (aHPivHighs[0] - 
  aLPivLows[0]))); > > > >      retrcRng = 
  curBar  - aHPivIdxs[0]; > >      aRetrcPrc = 
  LLV(L, retrcRng); > >      aRetrcPrcBars  = 
  LLVBars(L, retrcRng); > > > >      retrcPrc = 
  aRetrcPrc[curBar]; > >      retrcBarIdx = curBar - 
  aRetrcPrcBars[curBar]; > >      retrcClose = 
  aRetrcClose[retrcBarIdx]; > > > >      // -- 
  bTCZLong setup? > >      bTCZLong = ( > 
  > > >           // -- Are 
  retracement levels arranged in > >          
   //    tcz order? > > > >     
        // .500 is above .786 for long setups > > 
            tcz500 >= (tcz786 * (1 - 
  tczTolerance)) > >          
   AND > >           // .681 is 
  below .786 for long setups > >          
   tcz618 <= (tcz786 * (1 + tczTolerance)) > >     
        AND > > > >     
        // -- Is the low in the tcz range > > 
            // -- Is the close >= low of tcz 
  range > >           //    and 
  low <= high of tcz range > >          
   retrcClose >= ((1 - retrcTolerance) *  tcz618) > > 
            AND > >     
        retrcPrc <= ((1 + retrcTolerance) *  
  tcz500) > >           ); > 
  > > >           // -- risk would be 
  high of signal bar minus low of zone > >        
     //risk = 0; > > > > // -- lower highs and lower 
  lows > > } else if (nHPivs >= 2 AND nLPivs >=2 > > 
       AND aHPivHighs[0] < aHPivHighs[1] > >   
     AND aLPivLows[0] < aLPivLows[1]) { > > > > 
       tcz500 = > >      (aHPivHighs[1] 
  - > >      (.5 * (aHPivHighs[1] - 
  aLPivLows[0]))); > > > >      tcz618 
  = > >      (aHPivHighs[0] - > >     
   (.618 * (aHPivHighs[1] - aLPivLows[0]))); > > > > 
       tcz786 = > >      (aHPivHighs[0] 
  - > >      (.786 * (aHPivHighs[0] - 
  aLPivLows[0]))); > > > >      retrcRng = 
  curBar  - aLPivIdxs[0]; > >      aRetrcPrc = 
  HHV(H, retrcRng); > >      retrcPrc = 
  aRetrcPrc[curBar]; > >      aRetrcPrcBars  = 
  HHVBars(H, retrcRng); > >      retrcBarIdx = curBar - 
  aRetrcPrcBars[curBar]; > >      retrcClose = 
  aRetrcClose[retrcBarIdx]; > > > >     
   bTCZShort = ( > >           // -- 
  Are retracement levels arranged in > >        
     //    tcz order? > > > >   
          // .500 is below .786 for short 
  setups > >           tcz500 <= 
  (tcz786 * (1 + tczTolerance)) > >          
   AND > >           // .681 is 
  above .786 for short setups > >          
   tcz618 >= (tcz786 * (1 - tczTolerance)) > >     
        AND > > > >     
        // -- Is the close <= high of tcz range > 
  >           //    and high >= 
  low of tcz range > >          
   retrcClose <= ((1 + retrcTolerance) *  tcz618) > > 
            AND > >     
        retrcPrc >= ((1 - retrcTolerance) *  
  tcz500) > >           ); > 
  > > >           // -- Risk would be 
  top of zone - low of signal bar > >          
   //risk = 0; > > } > > > > // -- Show zone if 
  present > > if (bTCZShort OR bTCZLong) { > > > > 
       // -- Be prepared to see symmetry > >   
     if (bTCZShort) { > >          
   if (aLPivIdxs[0] > aHPivIdxs[0]) { > >     
             // -- Valuable, useful symmetry 
  information > >               
   nRtrc0Pts = aHPivHighs[0] - aLPivLows[1]; > >     
             nRtrc0Bars = aHPivIdxs[0] - 
  aLPivIdxs[1] + 1; > >             
     nRtrc1Pts = retrcPrc - aLPivLows[0]; > >     
             nRtrc1Bars = retrcBarIdx - 
  aLPivIdxs[0] + 1; > >           } else 
  { > >               
   nRtrc0Pts = aHPivHighs[1] - aLPivLows[1]; > >     
             nRtrc0Bars = aHPivIdxs[1] - 
  aLPivIdxs[1] + 1; > >             
     nRtrc1Pts = aHPivHighs[0] - aLPivLows[0]; > >   
               nRtrc1Bars = aHPivIdxs[0] 
  - aLPivIdxs[0] + 1; > >          
   } > >      } else { // bLongSetup > > 
            if (aLPivIdxs[0] > aHPivIdxs[0]) 
  { > >               
   nRtrc0Pts = aHPivHighs[0] - aLPivLows[1]; > >     
             nRtrc0Bars = aHPivIdxs[0] - 
  aLPivIdxs[1] + 1; > >             
     nRtrc1Pts = retrcPrc - aLPivLows[0]; > >     
             nRtrc1Bars = retrcBarIdx - 
  aLPivIdxs[0] + 1; > >           } else 
  { > >               
   nRtrc0Pts = aHPivHighs[1] - aLPivLows[0]; > >     
             nRtrc0Bars = aLPivIdxs[0] - 
  aHPivIdxs[1] + 1; > >             
     nRtrc1Pts = aHPivHighs[0] - aLPivLows[0]; > >   
               nRtrc1Bars = aLPivIdxs[0] 
  - aHPivIdxs[0] + 1; > >          
   } > >      } > > > >   
     if (bShowTCZ) { > >          
   Plot( > >               
   LineArray(     IIf(bTCZLong, aHPivIdxs[0], 
  aLPivIdxs[0]), > >             
     tcz500, curBar, tcz500 , 0), > >     
             "tcz500", colorPaleBlue, 
  styleLine); > >           Plot( > 
  >               
   LineArray(     IIf(bTCZLong, aHPivIdxs[0], 
  aLPivIdxs[0]), > >             
     tcz618, curBar, tcz618, 0), > >     
             "tcz618", colorPaleBlue, 
  styleLine); > >           Plot( > 
  >               
   LineArray(     IIf(bTCZLong, aHPivIdxs[0], 
  aLPivIdxs[0]), > >             
     tcz786, curBar, tcz786, 0), > >     
             "tcz786", colorTurquoise, 
  styleLine); > >      } > > > > // -- 
  if (bShowTCZ) > > } > > > > if (bDraw) { > 
  >      Title = Name() + " (" + StrLeft(FullName(), 10) 
  + > >      ")  ATR: " + NumToStr(ATR(1), 4.2) + " 
  ( " + > >      NumToStr((C - Ref(C, -1)), 4.2) + " / " 
  + > >      NumToStr((((C - Ref(C, -1)) / Ref(C, -1)) * 
  100), 2.1) +      "% )  " + > >     
   WriteVal( SelectedValue( DateTime() ), formatDateTime) + > > 
       " \nO: " + Open + > >     
   ",  \nH: " + High + > >      ",  \nL: 
  " + Low + > >      ", \nC: " + Close +     
   ",  \n" + > > //     "Risk: " + 
  WriteVal(risk, 2.1) + "%  \n" + > >      "Rtrc 
  0/1 Pts: " + WriteVal(nRtrc0Pts, 2.1) + "/" + > >     
   WriteVal(nRtrc1Pts, 2.1) + "  \n" + > >     
   "Rtrc 0/1 Bars: " + WriteVal(nRtrc0Bars, 2.0) + "/" + > > 
       WriteVal(nRtrc1Bars, 2.0); > > } > 
  > > > // ************************** > > // END INDICATOR 
  CODE > > // ************************** > > > > 
  //Filter = (bTCZShort OR bTCZLong) AND C > $2 AND C < $20; > 
  > > > Buy = Cover = Filter ; > > Sell = Short = 
  aAddedHPivs; > > Buy = ExRem(Buy,Sell); > > Sell = 
  ExRem(Sell,Buy); > > AddColumn(C, "Close"); > > 
  //AddColumn(IIf(bTCZLong, 76, 83), "L/S", formatChar); > > > 
  > //////////////////////// > > num = 
  Param("trend",3,1,6,1); > > > > FirstVisibleBar = Status( 
  "FirstVisibleBar" ); > > Lastvisiblebar = 
  Status("LastVisibleBar"); > > > > for( b = Firstvisiblebar + 
  num; b <= Lastvisiblebar AND b < BarCount - > > num; 
  b++) > > { > > i = num; > > ml = 0; > > mu 
  = 0; > > while( i > 0 ) > > { > > if (L[b] <= 
  L[b-i] && L[b] <= L[b+i] ) > > { > > 
  ml++; > > } > > if (H[b] >= H[b-i] && H[b] >= 
  H[b+i] ) > > { > > mu++; > > } > > 
  i--; > > } > > if ( ml == num ) > > { > > 
  PlotText("\n***\n",b,L[b],colorGreen); > > } > > if ( mu == 
  num ) > > { > > PlotText("***\n",b,H[b],colorRed); > 
  > } > > } > > > > _SECTION_BEGIN("Alert Output 
  As Quick Rewiev"); > > //=========================  QUICK VIEW 
  [alert] > > ============================= > > 
  //============================================================================== > 
  > //×××  Period at finding changes at stocks price > > 
  ×××××××××××××××××××××××××××× > > x      =-90; > 
  > eDay  =-1; > > eWeek  =-5; > > eMonth 
  =-20; > > eQTR  =-60; > > eYEAR  =-260; > 
  > user  =x; > > //×××  HLEDANÁ DÉLKA > > 
  ×××××××××××××××××××××××××××××××××××××××××××××××××××××××× > > qvCAS = 
  eDay;        // There enter lenght period > > 
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! > > //×××  PODMÍNKY > > 
  ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× > > 
  qvCE      =C; > > qvHLEDANE  
  =Ref(C,qvCAS); > > qvBODY    =qvCE-qvHLEDANE; > > 
  qvPROCENTA =100*(qvCE-qvHLEDANE)/qvHLEDANE; > > //×××  
  EXPLORE > > 
  ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× > > 
  Filter    = C; > > AddTextColumn(Name(),"Ticker",2, IIf( 
  MarketID()==0,5,4)); > > 
  AddColumn(qvHLEDANE,"Prev.Price",1.2); > > 
  AddColumn(C,"Price",1.2,IIf(C<1,11,IIf(C>=1 AND C<3,12,IIf(C>=3 
  AND > > C<20,1,0)))); > > ; > > 
  AddColumn(qvBODY,"Change in $",1.2,2 > > 
  ,IIf(qvBODY>=0.001,5,IIf(qvBODY==0,9,4 ))); > > 
  AddColumn(qvPROCENTA,"Change in %",1.2,2 > > 
  ,IIf(qvPROCENTA>=0.001,5,IIf(qvPROCENTA==0,9,4 )));//×××  
  ALERT > > 
  ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× > > 
  Buy  = qvPROCENTA>0; > > Cover= qvProcenta==0; > > 
  Sell = qvPROCENTA<0; > > AlertIf( 
  Buy,"",WriteVal(qvPROCENTA,1.2),1,1,0 ); > > AlertIf( 
  Sell,"",WriteVal(qvPROCENTA,1.2),2,1,0 ); > > AlertIf( 
  Cover,"",WriteVal(qvPROCENTA,1.2),0,1,0 ); > > 
  //×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× > 
  > > > _SECTION_END(); > > > > 
  _SECTION_BEGIN("Application of Ehler filter"); > > // ehler filter 
  based on acclerartion and speed > > // x - input > > // n - 
  length of FIR > > // w - exponential weight of passed acceleration 
  and speed > > // f - weighting factor between acceleration and 
  speed > > function Ehler1( x, V, n, w,f) > > {y=x; > 
  > // acceleration + speed > > a = x-2*Ref(x,-1) + 
  Ref(x,-2); > > s = f*(x-Ref(x,-1)); > > 
  q=AMA(V*(abs(a)+abs(s))/x,w); > > > > for( i = n-1; i < 
  BarCount; i++ ) > >  { > >    
  sy=0;sw=0; > >  for (j=i-n+1; j<i+1; j++) > >  
  {sy = sy + q[j]*x[j]; > >    sw = sw + q[j]; > 
  >  } > >  y[i]=sy/sw; > >  } > > 
  return y; > > } > > 
  w=Param("w",0.62,0.05,0.99,0.01); > > n=Param("n",8,1,42,1); > 
  > f=Param("f",-0.3,-10,10,0.1); > > f=10^f; > > 
  eh=Ehler1(C,V,n,w,f); > > Plot( Close, "Price", colorBlack, 
  styleCandle ); > > Plot( eh, "Ehler", colorBlack ); > > 
  Plot( MA(C,n), "MA", colorBlue ); > > > > 
  _SECTION_END(); > > > > _SECTION_BEGIN("ATR Study"); > 
  > //* ATR Study:  */ > > > > Exclude = 
  MA(V,50)<200 ; > > MaxGraph = 12; > > Graph0 = C; > 
  > Graph0Color = 1; > > Graph0Style = 64; > > > > 
  BuyOffSet = 18;//Optimize("BuyOffSet",18,15,20,1); > > SellOffset = 
  BuyOffSet;//Optimize("SellOffset",2,2,14,2); > > RegLength = 
  5;//Optimize("RegLength",5, 2,11,2); > > BuyATRPeriod = 
  2;//Optimize("BuyATRPeriod",2,2,5,1); > > SellATRPeriod = 
  BuyATRPeriod;//Optimize("SellATRPeriod",4,2,11,2); > > ATRMultiplier 
  = 1;//Optimize("ATRMultiplier",1,0.7,1.25,.05); > > > 
  > > > Graph8 = 
  HHV(H-ATRMultiplier*ATR(BuyATRPeriod),BuyOffset);  /* RED */ > > 
  Graph9 = LLV(L+ATRMultiplier*ATR(SellATRPeriod),SellOffset);  /*  
  GREEN */ > > > > Graph8Style=Graph9Style = 5; > > 
  Graph9Color=  5;  /* 5 is green */ > > Graph8Color = 
  4;  /* 4 is red */ > > > > ticker = 
  0.0;//Optimize("Tickerk",0,0,1,0.125); > > > > Buy = Cover = 
  Cross(C,Graph8) AND C>Graph9 AND LinRegSlope(EMA(C,17),2)>0; > 
  > Sell = Short = Cross(Graph8,C) AND LinRegSlope(C,2)<0; > > 
  Buy = ExRem(Buy,Sell); > > Sell = ExRem(Sell,Buy); > > 
  BuyStop = Ref(Graph8,-1)+ ticker; > > BuyPrice = 
  Max(BuyStop,Low); > > SellStop= Ref(Graph8,-1);  
  //IIf(Cross(Graph8,C),Ref(Graph8,-1),0); > > SellPrice = Min( 
  SellStop, High )- ticker; > > > > 
  //ApplyStop(2,3,Optimize("TrailingStop",15,0,20,5),1); > > > 
  > Filter=  (Buy OR Sell)      ; > > NumColumns 
  = 8; > > Column0 =  IIf(Buy==1,1,IIf(Sell==1,-1,0) ); > 
  > Column0Format = 1.0; > > Column0Name = "Long/Sell"; > > 
  Column1 = C; > > Column1Name = "Close      "; > 
  > Column1Format = 1.2; > > Column2 = MA(V,17); > > 
  Column2Name = "17 Ma Vol  "; > > Column2Format = 1.0; > 
  > Column3 = MA(C,17)/MA(C,50); > > Column3Name = "% 17/50 
  "; > > Column3Format = 1.2; > > Column3Format = 1.2; > 
  > Column4= MA(C,17); > > Column4Name="17 C ma"; > > 
  Column4Format = 1.2; > > Column5= MA(C,50); > > 
  Column5Name="50 C ma"; > > Column5Format = 1.2; > > > 
  > Column6= BuyPrice; > > Column6Name="BuyPrice"; > > 
  Column6Format = 1.2; > > Column7= SellPrice; > > 
  Column7Name="Sellprice"; > > Column7Format = 1.2; > > 
  _SECTION_END(); > > > > _SECTION_BEGIN("Bull Fear _ Bear 
  Fear"); > > // BBFEAR.AFL v 0.001 24/01/2002 > > // Bull 
  Fear / Bear Fear with DX Trading System > > // Developed by 
  Jef > > // Published in http://www.nt-tech.com.au/guppy/ > > 
  // Coded by Marek Chlopek, January 2002 > > > > > > 
  // > > 
  **************************************************************************************** > 
  > // INITIALIZATION OF EXPLORATION IN AMIBROKER > > // > 
  > 
  **************************************************************************************** > 
  > Filter = 1; > > NumColumns = 5; > > Column0 = O; 
  Column0Name = "O"; Column0Format = 1.2; > > Column1 = H; Column1Name 
  = "H"; Column1Format = 1.2; > > Column2 = L; Column2Name = "L"; 
  Column2Format = 1.2; > > Column3 = C; Column3Name = "C"; 
  Column3Format = 1.2; > > Column4 = V; Column4Name = "V"; 
  Column4Format = 1.0; > > > > // END OF "INITIALIZATION OF 
  EXPLORATION IN AMIBROKER" SECTION > > > > > > 
  // > > 
  **************************************************************************************** > 
  > // MAIN CODE > > // > > 
  **************************************************************************************** > 
  > Opt1 = Optimize("DX Level", 16, 10, 30, 1); > > Opt2 = 
  Optimize("Period", 15, 10, 50, 1); // n > > > > n = 
  Opt2; > > BullFear = (HHV(High,n) - LLV(High,n))/2 + 
  LLV(High,n); > > BearFear = (HHV(Low,n) - LLV(Low,n))/2 + 
  LLV(Low,n); > > > > // Exploration in Amibroker > > 
  AddColumn(BullFear, "BullFear", format=1.2); > > AddColumn(BearFear, 
  "BearFear", format=1.2); > > > > // END OF "MAIN CODE" 
  SECTION > > > > > > // > > 
  **************************************************************************************** > 
  > // TRADING SYSTEM ENTRY FORMULAS > > // > > 
  **************************************************************************************** > 
  > Buy  = Cover = Cross(Close, BullFear) AND ADX(10) > Opt1; > 
  > Short = Sell = Cross(BearFear, Close); > > > > // 
  Exploration in Amibroker > > AddColumn(Buy,      
    "Buy",        format=1.0); > > 
  AddColumn(Short,      "Short",      
  format=1.0); > > //AddColumn(BuyPrice,  "BuyPrice",  
  format=1.2); > > //AddColumn(ShortPrice, "ShortPrice", 
  format=1.2); > > > > // END OF "TRADING SYSTEM ENTRY 
  FORMULAS" SECTION > > > > > > // > > 
  **************************************************************************************** > 
  > // TRADING SYSTEM EXIT FORMULAS > > // > > 
  **************************************************************************************** > 
  > Sell  = Short; > > Cover = Buy; > > > > 
  // Exploration in Amibroker > > AddColumn(Sell,      
  "Sell",      format=1.0); > > AddColumn(Cover,  
      "Cover",      format=1.0); > > 
  //AddColumn(SellPrice,  "SellPrice",  format=1.2); > > 
  //AddColumn(CoverPrice, "CoverPrice", format=1.2); > > > > 
  // END OF "TRADING SYSTEM EXIT FORMULAS" SECTION > > > 
  > > > // > > 
  **************************************************************************************** > 
  > // TRADING SYSTEM EXCESSIVE ENTRY/EXIT SIGNALS REMOVING FORMULAS > 
  > // > > 
  **************************************************************************************** > 
  > Buy  = ExRem(Buy, Sell); > > Sell  = ExRem(Sell, 
  Buy); > > Short = ExRem(Short, Cover); > > Cover = 
  ExRem(Cover, Short); > > > > // END OF "TRADING SYSTEM 
  EXCESSIVE ENTRY/EXIT SIGNALS REMOVING > > FORMULAS" SECTION > 
  > > > > > // > > 
  **************************************************************************************** > 
  > // GRAPHIC PRESENTATION IN AMIBROKER > > // > > 
  **************************************************************************************** > 
  > MaxGraph = 3; > > Graph0 = C; Graph0Style = 4; Graph0Color = 
  1; > > Graph1 = BullFear; Graph1Style = 1; Graph1Color = 5; > 
  > Graph2 = BearFear; Graph2Style = 1; Graph2Color = 4; > > > 
  > Title = Name() > >        + " - C (Black) = 
  " + WriteVal(Graph0, 1.2) > >        + ", 
  BullFear (Green) = " + WriteVal(Graph1, 1.2) > >      
    + ", BearFear (Red) = " + WriteVal(Graph2, 1.2); > > > 
  > // END OF "GRAPHIC PRESENTATION IN AMIBROKER" SECTION > 
  > > > > > // > > 
  **************************************************************************************** > 
  > // END OF CODE (BBFEAR.AFL) > > // > > 
  **************************************************************************************** > 
  > /**/ > > _SECTION_END(); > > > > 
  _SECTION_BEGIN("Pivot Point and Support and Resistance Points"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Pivot Point and 
  Support and Resistance Points > > //  Author/Uploader: Anthony 
  Faragasso > > //  E-mail:          
  ajf1111@xxx > > //  Date/Time Added: 2002-04-25 09:04:53 > 
  > //  Origin: > > //  Keywords: > > //  
  Level:          basic > > //  
  Flags:          commentary > > //  
  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=186 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=186 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Guru Commentary, provides Pivot and support and 
  resistance > > // > > //  points for the Next trading 
  day. > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > /* Pivot points and Support and Resistance Points*/ > 
  > /* for next day trading*/ > > /* coded by Anthony Faragasso 
  */ > > > > > > MaxGraph =8; > > > 
  > p = (H+L+C)/3; > > r1 = (2*p)-L; > > s1 = 
  (2*p)-H; > > r2 = p +(r1 - s1); > > s2 = p -(r2 - 
  s1); > > > > Graph0=p; > > Graph1=r1; > > 
  Graph2 = s1; > > Graph3= r2; > > Graph4 = s2; > 
  > > > Graph0Style = Graph1Style = Graph2Style = Graph3Style = 
  Graph4Style = > > 16 + 8; > > Graph0Color = 2; > > 
  Graph1Color = Graph2Color = 8; > > Graph3Color = Graph4Color = 
  6; > > > > Graph5 = Close; > > Graph5Color = 
  3; > > Graph5Style = 128; > > ""; > > 
  "------------------------------------------------------------------------------------------------------------"; > 
  > "    PIVOT POINTS AND SUPPORT AND RESISTANCE POINTS "; > 
  > 
  "------------------------------------------------------------------------------------------------------------"; > 
  > ""; > > "MARKET BEING EVALUATED :  " + Title = Name() + 
  "      DATE : "  + Date(); > > ""; > > 
  "TODAY'S CLOSE WAS : "+"( " +WriteVal(Close,format=1.2)+" )"; > > 
  "----------------------------------------------------------------------------------------------------------------------"; > 
  > "    *******  THESE POINTS ARE VALID FOR NEXT TRADING DAY 
  ******"; > > 
  "-----------------------------------------------------------------------------------------------------------------------"; > 
  > "RESISTENCE POINT 2 : ----------------" 
  +WriteVal(Graph3,format=1.2); > > ""; > > "RESISTENCE POINT 
  1 : ----------------" +WriteVal(Graph1,format=1.2); > > ""; > 
  > " --------------------------------------------------------"+ > > 
  "("+WriteVal(Graph0,format=1.2)+")" +"  PIVOT POINT--------"; > 
  > ""; > > "SUPPORT POINT 1 : ----------------------" 
  +WriteVal(Graph2,format=1.2); > > ""; > > "SUPPORT POINT 2 : 
  ----------------------" +WriteVal(Graph4,format=1.2); > > 
  _SECTION_END(); > > > > _SECTION_BEGIN("Auto Analysis Key 
  Reversal"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Auto Analysis Key 
  Reversal > > //  Author/Uploader: Larry Lovrencic > > 
  //  E-mail:          lvl@xxx > > 
  //  Date/Time Added: 2001-09-04 01:51:44 > > //  
  Origin: > > //  Keywords:        key 
  reversal automatic analysis > > //  Level:      
      basic > > //  Flags:        
    exploration > > //  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=109 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=109 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Find Key Reversals using automatic 
  analysis > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > /*Key Reversals Automatic Analysis > > by Larry 
  Lovrencic*/ > > > > Buy=O<Ref(C,-1) AND L<Ref(L,-1) 
  AND C>Ref(H,-1); > > Sell=O>Ref(C,-1) AND H>Ref(H,-1) AND 
  C<Ref(L,-1); > > _SECTION_END(); > > > > 
  _SECTION_BEGIN("Positive ROC Exploration"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Positive ROC 
  Exploration > > //  Author/Uploader: Mubashar Virk > > 
  //  E-mail:          mavirk@xxx > > 
  //  Date/Time Added: 2006-10-03 14:36:47 > > //  
  Origin:          ROC > > //  
  Keywords:        ROC > > //  Level:  
          basic > > //  Flags:    
        exploration > > //  Formula URL:  
    http://www.amibroker.com/library/formula.php?id=730 > > 
  //  Details URL:    
  http://www.amibroker.com/library/detail.php?id=730 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Hi there guys and ladies, I have a Positive ROC 
  exploration for > > all you > > //  tight-traders and 
  beginners. It may give you some good picks for > > the next > 
  > //  day. Needless to say you must study the securities by using 
  William, > > //  Chaikin, and Bollinger's. Also try to put your 
  own filtration > > values for > > //  ROC and Volume as 
  mine are too tight. May the Profit be with you all. > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > > > P  =  ((H + L + C) / 3); > > R1  
  =  ((2 * P) - L); > > S1  =  ((2 * P)  - 
  H); > > R2  =  ((P - S1) + R1); > > S2  
  =  (P - (R1 - S1)); > > > > Filter = ROC( C, 1 ) > 
  0.25 AND V > 29999; > > > > AddColumn( V, "Volume",1 
  ); > > AddColumn( C, "Close" ); > > AddColumn( Ref (C, -1), 
  "Last Close"); > > AddColumn( C - Ref( C, -1), "Change"); > 
  > AddColumn( ROC( C, 1 ), "ROC" ); > > AddColumn (RSI(), 
  "RSI",1.2); > > AddColumn( r2, "R 2", 1.2); > > AddColumn( 
  r1, "R 1", 1.2); > > AddColumn( P, "Pivot", 1.2); > > 
  AddColumn( S1, "S 1", 1.2); > > AddColumn( S2, "S 2", 1.2); > 
  > _SECTION_END(); > > > > _SECTION_BEGIN("Price 
  Persistency"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Price 
  Persistency > > //  Author/Uploader: Anthony Faragasso > 
  > //  E-mail:          ajf1111@xxx > 
  > //  Date/Time Added: 2002-12-29 18:20:39 > > //  
  Origin: > > //  Keywords: > > //  Level:  
          basic > > //  Flags:    
        exploration > > //  Formula URL:  
    http://www.amibroker.com/library/formula.php?id=245 > > 
  //  Details URL:    
  http://www.amibroker.com/library/detail.php?id=245 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Interested in measuring a short-term Trend 
  ? > > // > > //  Price persistency is the number of 
  days that a market continues to > > close > > //  
  either up or down. It's another term for a market run. The > > 
  usefulness of > > //  Price Persistency is based on the theory 
  of runs..It is the idea that, > > //  given the market has moved 
  in a particular direction for ( n ) > > days, the > > 
  //  likelihood it will either continue..or not...can be estimated 
  and > > used in a > > //  profitable trading 
  system.... > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > //Price Persistency Exploration > > //Interpreted 
  from January,2002, TASC, page 44 > > //article by Gordon Gustafson on 
  Price Persistency > > //Coded by Anthony Faragasso, 12/31/01 > 
  > //Version 1.00 > > > > /*****Bars in the 
  test*****************/ > > bars=Cum(1); > > 
  /**************************************/ > > Day1up=C > 
  Ref(C,-1); > > Day1Dn=C < Ref(C,-1); > > 
  /**************************************/ > > > > Day2up=C 
  > Ref(C,-1) AND Ref(C,-1) > Ref(C,-2); > > Day2Dn=C < 
  Ref(C,-1) AND Ref(C,-1) < Ref(C,-2); > > > > 
  /***********************************************/ > > Day3up=C > 
  Ref(C,-1) AND Ref(C,-1) > Ref(C,-2) AND Ref(C,-2) > Ref(C,-3); > 
  > Day3Dn=C < Ref(C,-1) AND Ref(C,-1) < Ref(C,-2) AND Ref(C,-2) < 
  Ref(C,-3); > > 
  /**********************************************/ > > > > 
  Day4up=C > Ref(C,-1) AND Ref(C,-1)>Ref(C,-2)AND 
  Ref(C,-2)>Ref(C,-3) > > AND Ref(C,-3) > Ref(C,-4); > > 
  Day4Dn=C < Ref(C,-1) AND Ref(C,-1)<Ref(C,-2)AND 
  Ref(C,-2)<Ref(C,-3) > > AND Ref(C,-3) < Ref(C,-4); > > 
  /**********************************************/ > > > > 
  Day5up=C > Ref(C,-1) AND Ref(C,-1)>Ref(C,-2)AND 
  Ref(C,-2)>Ref(C,-3)AND > > Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) 
  > Ref(C,-5); > > Day5Dn=C < Ref(C,-1) AND 
  Ref(C,-1)<Ref(C,-2)AND Ref(C,-2)<Ref(C,-3)AND > > Ref(C,-3) 
  < Ref(C,-4) AND Ref(C,-4) < Ref(C,-5); > > 
  /************************************************/ > > > > 
  Day6up=C > Ref(C,-1) AND Ref(C,-1)> Ref(C,-2)AND > > 
  Ref(C,-2)>Ref(C,-3)AND Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) > 
  Ref(C,-5) > > AND Ref(C,-5) > Ref(C,-6); > > Day6Dn=C 
  < Ref(C,-1) AND Ref(C,-1)< Ref(C,-2)AND Ref(C,-2)< > > 
  Ref(C,-3)AND Ref(C,-3) < Ref(C,-4)AND Ref(C,-4) < Ref(C,-5) AND > 
  > Ref(C,-5) < Ref(C,-6); > > 
  /***********************************************/ > > > > 
  Day7up=C > Ref(C,-1) AND Ref(C,-1)> Ref(C,-2)AND > > 
  Ref(C,-2)>Ref(C,-3)AND Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) > > 
  > Ref(C,-5)AND Ref(C,-5)>Ref(C,-6) AND Ref(C,-6) > Ref(C,-7); > 
  > Day7Dn=C < Ref(C,-1) AND Ref(C,-1)< Ref(C,-2)AND 
  Ref(C,-2)< > > Ref(C,-3)AND Ref(C,-3) < Ref(C,-4)AND Ref(C,-4) 
  < Ref(C,-5)AND > > Ref(C,-5)< Ref(C,-6)AND Ref(C,-6) < 
  Ref(C,-7); > > 
  /*********************************************/ > > > > 
  Day8up=C > Ref(C,-1) AND Ref(C,-1)> Ref(C,-2)AND > > 
  Ref(C,-2)>Ref(C,-3)AND Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) > > 
  > Ref(C,-5)AND Ref(C,-5)>Ref(C,-6)AND Ref(C,-6) > Ref(C,-7) 
  AND > > Ref(C,-7) > Ref(C,-8); > > Day8Dn=C < 
  Ref(C,-1) AND Ref(C,-1)< Ref(C,-2)AND Ref(C,-2)< > > 
  Ref(C,-3)AND Ref(C,-3) < Ref(C,-4)AND Ref(C,-4) < Ref(C,-5)AND > 
  > Ref(C,-5)< Ref(C,-6)AND Ref(C,-6) < Ref(C,-7)AND Ref(C,-7) < 
  Ref(C,-8); > > 
  /**********************************************/ > > > > 
  Day9up=C > Ref(C,-1) AND Ref(C,-1)> Ref(C,-2)AND > > 
  Ref(C,-2)>Ref(C,-3)AND Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) > > 
  > Ref(C,-5)AND Ref(C,-5)>Ref(C,-6)AND Ref(C,-6) > Ref(C,-7)AND 
  Ref(C,-7) > >> Ref(C,-8) AND Ref(C,-8) > Ref(C,-9); > 
  > Day9Dn=C < Ref(C,-1) AND Ref(C,-1)< Ref(C,-2)AND 
  Ref(C,-2)< > > Ref(C,-3)AND Ref(C,-3) < Ref(C,-4)AND Ref(C,-4) 
  < Ref(C,-5)AND > > Ref(C,-5)< Ref(C,-6)AND Ref(C,-6) < 
  Ref(C,-7)AND Ref(C,-7) < Ref(C,-8) > > AND Ref(C,-8) < 
  Ref(C,-9); > > 
  /**********************************************/ > > > > 
  Day10up=C > Ref(C,-1) AND Ref(C,-1)> Ref(C,-2)AND > > 
  Ref(C,-2)>Ref(C,-3)AND Ref(C,-3) > Ref(C,-4) AND Ref(C,-4) > > 
  > Ref(C,-5)AND Ref(C,-5)>Ref(C,-6)AND Ref(C,-6) > Ref(C,-7)AND 
  Ref(C,-7) > >> Ref(C,-8)AND Ref(C,-8)> Ref(C,-9) AND Ref(C,-9) 
  > Ref(C,-10); > > Day10Dn=C < Ref(C,-1) AND Ref(C,-1)< 
  Ref(C,-2)AND Ref(C,-2)< > > Ref(C,-3)AND Ref(C,-3) < 
  Ref(C,-4)AND Ref(C,-4) < Ref(C,-5)AND > > Ref(C,-5)< 
  Ref(C,-6)AND Ref(C,-6) < Ref(C,-7)AND Ref(C,-7) < > > 
  Ref(C,-8)AND Ref(C,-8) < Ref(C,-9) AND Ref(C,-9) < Ref(C,-10); > 
  > /************************************************/ > > > 
  > 
  tot1dayUp=LastValue(Cum(Day1up));tot1dayDn=LastValue(Cum(Day1Dn)); > 
  > 
  tot2dayUp=LastValue(Cum(Day2up));tot2dayDn=LastValue(Cum(Day2Dn)); > 
  > 
  tot3dayUp=LastValue(Cum(Day3up));tot3dayDn=LastValue(Cum(Day3Dn)); > 
  > 
  tot4dayUp=LastValue(Cum(Day4up));tot4dayDn=LastValue(Cum(Day4Dn)); > 
  > 
  tot5dayUp=LastValue(Cum(Day5up));tot5dayDn=LastValue(Cum(Day5Dn)); > 
  > 
  tot6dayUp=LastValue(Cum(Day6up));tot6dayDn=LastValue(Cum(Day6Dn)); > 
  > 
  tot7dayUp=LastValue(Cum(Day7up));tot7dayDn=LastValue(Cum(Day7Dn)); > 
  > 
  tot8dayUp=LastValue(Cum(Day8up));tot8dayDn=LastValue(Cum(Day8Dn)); > 
  > 
  tot9dayUp=LastValue(Cum(Day9up));tot9dayDn=LastValue(Cum(Day9Dn)); > 
  > 
  tot10dayUp=LastValue(Cum(Day10up));tot10dayDn=LastValue(Cum(Day10Dn)); > 
  > > > /*********Percentages for Up or Down as a % of total bars 
  *************/ > > totpct1dayup=tot1dayUp/(Cum(1))*100; > > 
  totpct1dayDn=tot1dayDn/(Cum(1))*100; > > 
  totpct2dayUp=tot2dayUp/(Cum(1))*100; > > 
  totpct2dayDn=tot2dayDn/(Cum(1))*100; > > 
  totpct3dayUp=tot3dayUp/(Cum(1))*100; > > 
  totpct3dayDn=tot3dayDn/(Cum(1))*100; > > 
  totpct4dayUp=tot4dayUp/(Cum(1))*100; > > 
  totpct4dayDn=tot4dayDn/(Cum(1))*100; > > 
  totpct5dayUp=tot5dayUp/(Cum(1))*100; > > 
  totpct5dayDn=tot5dayDn/(Cum(1))*100; > > 
  totpct6dayUp=tot6dayUp/(Cum(1))*100; > > 
  totpct6dayDn=tot6dayDn/(Cum(1))*100; > > 
  totpct7dayUp=tot7dayUp/(Cum(1))*100; > > 
  totpct7dayDn=tot7dayDn/(Cum(1))*100; > > 
  totpct8dayUp=tot8dayUp/(Cum(1))*100; > > 
  totpct8dayDn=tot8dayDn/(Cum(1))*100; > > 
  totpct9dayUp=tot9dayUp/(Cum(1))*100; > > 
  totpct9dayDn=tot9dayDn/(Cum(1))*100; > > 
  totpct10dayUp=tot10dayUp/(Cum(1))*100; > > 
  totpct10dayDn=tot10dayDn/(Cum(1))*100; > > > > 
  /*******************************************************/ > > 
  /**********Percent up or down / previous up or > > 
  down***********************/ > > > > 
  Pct2dayUp=(tot2dayUp/tot1dayup)*100; > > 
  Pct2dayDn=(tot2dayDn/tot1dayDn)*100; > > 
  pct3dayUp=(tot3dayUp/tot2dayup)*100; > > 
  pct3dayDn=(tot3dayDn/tot2dayDn)*100; > > 
  pct4dayUp=(tot4dayUp/tot3dayUp)*100; > > 
  pct4dayDn=(tot4dayDn/tot3dayDn)*100; > > 
  pct5dayUp=(tot5dayUp/tot4dayUp)*100; > > 
  pct5dayDn=(tot5dayDn/tot4dayDn)*100; > > 
  pct6dayUp=(tot6dayUp/tot5dayUp)*100; > > 
  pct6dayDn=(tot6dayDn/tot5dayDn)*100; > > 
  pct7dayUp=(tot7dayUp/tot6dayUp)*100; > > 
  pct7dayDn=(tot7dayDn/tot6dayDn)*100; > > 
  pct8dayUp=(tot8dayUp/tot7dayUp)*100; > > 
  pct8dayDn=(tot8dayDn/tot7dayDn)*100; > > 
  pct9dayUp=(tot9dayUp/tot8dayUp)*100; > > 
  pct9dayDn=(tot9dayDn/tot8dayDn)*100; > > 
  pct10dayUp=(tot10dayUp/tot9dayUp)*100; > > 
  pct10dayDn=(tot10dayDn/tot9dayDn)*100; > > > > > > 
  Filter=1; > > /***Current State of the Closes******/ > > 
  stateUp=BarsSince(C < Ref(C,-1)); > > stateDown=BarsSince(C > 
  Ref(C,-1)); > > AddColumn(stateUp,"currentUp"); > > 
  AddColumn(statedown,"CurrentDown"); > > > > /***Close is 
  equal to previous close*****/ > > AddColumn(Cum(C == 
  Ref(C,-1)),"Close==PrevClose",1); > > > > /***Days in a row 
  ,whether up or down ( A Run )********/ > > //1 day > 
  > > > 
  AddColumn(tot1dayUp,"1dayUp",1);AddColumn(tot1dayDn,"1dayDn",1);AddColumn(0,"%Up/PrevUp");AddColumn(0,"%Dn/PrevDn");AddColumn(totpct1dayUp,"%Up[bars]");AddColumn(totpct1dayDn,"%Dn[bars]"); > 
  > //2 days > > 
  AddColumn(tot2dayUp,"2dayUp",1);AddColumn(tot2dayDn,"2dayDn",1);AddColumn(pct2dayUp,"%Up/prevUp");AddColumn(pct2dayDn,"%Dn/prevDn");AddColumn(totpct2dayUp,"%Up[bars]");AddColumn(totpct2dayDn,"%Dn[bars]"); > 
  > //3 days > > 
  AddColumn(tot3dayUp,"3dayUp",1);AddColumn(tot3dayDn,"3dayDn",1);AddColumn(pct3dayUp,"%Up/prevUp");AddColumn(pct3dayDn,"%Dn/prevDn");AddColumn(totpct3dayUp,"%Up[bars]");AddColumn(totpct3dayDn,"%Dn[bars]"); > 
  > //4 days > > 
  AddColumn(tot4dayUp,"4dayUp",1);AddColumn(tot4dayDn,"4dayDn",1);AddColumn(pct4dayup,"%Up/prevUp");AddColumn(pct4dayDn,"%Dn/prevDn");AddColumn(totpct4dayUp,"%Up[bars]");AddColumn(totpct4dayDn,"%Dn[bars]"); > 
  > //5 days > > 
  AddColumn(tot5dayUp,"5dayUp",1);AddColumn(tot5dayDn,"5dayDn",1);AddColumn(pct5dayup,"%Up/prevUp");AddColumn(pct5dayDn,"%Dn/prevDn");AddColumn(totpct5dayUp,"%Up[bars]");AddColumn(totpct5dayDn,"%Dn[bars]"); > 
  > //6 days > > 
  AddColumn(tot6dayUp,"6dayUp",1);AddColumn(tot6dayDn,"6dayDn",1);AddColumn(pct6dayUp,"%Up/prevUp");AddColumn(pct6dayDn,"%Dn/prevDn");AddColumn(totpct6dayUp,"%Up[bars]");AddColumn(totpct6dayDn,"%Dn[bars]"); > 
  > //7 days > > 
  AddColumn(tot7dayUp,"7dayUp",1);AddColumn(tot7dayDn,"7dayDn",1);AddColumn(pct7dayUp,"%Up/prevUp");AddColumn(pct7dayDn,"%Dn/prevDn");AddColumn(totpct7dayUp,"%Up[bars]");AddColumn(totpct7dayDn,"%Dn[bars]"); > 
  > //8 days > > 
  AddColumn(tot8dayUp,"8dayUp",1);AddColumn(tot8dayDn,"8dayDn",1);AddColumn(pct8dayUp,"%Up/prevUp");AddColumn(pct8dayDn,"%Dn/PrevDn");AddColumn(totpct8dayUp,"%Up[bars]");AddColumn(totpct8dayDn,"%Dn[bars]"); > 
  > //9 days > > 
  AddColumn(tot9dayUp,"9dayUp",1);AddColumn(tot9dayDn,"9dayDn",1);AddColumn(pct9dayUp,"%Up/prevUp");AddColumn(pct9dayDn,"%Dn/prevDn");AddColumn(totpct9dayUp,"%Up[bars]");AddColumn(totpct9dayDn,"%Dn[bars]"); > 
  > //10 days > > 
  AddColumn(tot10dayUp,"10dayUp",1);AddColumn(tot10dayDn,"10dayDn",1);AddColumn(pct10dayUp,"%Up/prevUp");AddColumn(pct10dayDn,"%Dn/prevDn");AddColumn(totpct10dayUp,"%Up[bars]");AddColumn(totpct10dayDn,"%Dn[bars]"); > 
  > > > AddColumn(bars,"bars",1); > > 
  _SECTION_END(); > > > > _SECTION_BEGIN("Trend exploration 
  with multiple timeframes"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Trend exploration 
  with multiple timeframes > > //  Author/Uploader: Marcus 
  Davidsson > > //  E-mail:          
  davidsson_marcus@xxx > > //  Date/Time Added: 2006-09-30 
  20:31:21 > > //  Origin: > > //  Keywords:  
        exploration, trend, moving average > > //  
  Level:          medium > > //  
  Flags:          exploration > > //  
  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=724 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=724 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  I started experimenting with Tradestations 
  Radarscreen > > // > > //  when it struck me that 
  Amibroker have the same function > > "Exploration" but > > 
  //  100000$ much cheaper. > > // > > //  The 
  formula is quite simple just load it in to Amibroker > > // > 
  > //  and go to automatic analysis and push explore. > > 
  // > > //  The formula will scan multiple moving averages and 
  draw conclusions > > //  regarding overall trend phase, strenght 
  etc. Enjoy! > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > /*Use daily data! You could use data with > > 
  higher time resolution but then you have > > to include a timeframe 
  parameters > > since 10 periods will become > > 10 minutes 
  (if you have one Minute data)*/ > > > > 
  ////////////////////////////////////////////////////////////// > 
  > > > Filter = 1; // all symbols and quotes accepted. > > 
  DTL=140; // DTL = Define Trend Long > > DTM=60;     // 
  DTM = Define Trend Medium > > DTS=8;  // DTS = Define Trend 
  Short > > > > 
  ////////////////////////////////////////////////////////////// > 
  > > > TL=LinRegSlope(MA(C, DTL),2);      // TL = 
  Trend Long > > TM=LinRegSlope(MA(C, DTM),2);  // TM = Trend 
  Medium > > TS=LinRegSlope(MA(C, DTS),2);  // TS = Trend 
  Short > > > > TLL=IIf(LinRegSlope(MA(C, DTL),2) > 0,True, 
  False); > > TMM=IIf(LinRegSlope(MA(C, DTM),2) > 0,True, 
  False); > > TSS=IIf(LinRegSlope(MA(C, DTS),2) > 0,True, 
  False); > > > > TLLL= > > WriteIf(TL>0 AND 
  TL<0.3,"+", > > WriteIf(TL>=0.3 AND TL<0.6 ,"+ +", > 
  > WriteIf(TL>=0.6,"+ + +", > > WriteIf(TL<0 AND 
  TL>-0.3,"-", > > WriteIf(TL<=-0.3 AND TL>-0.6 ,"- 
  -", > > WriteIf(TL<=-0.6,"- - -","")))))); > > > 
  > TMMM= > > WriteIf(TM>0 AND TM<0.3,"+", > > 
  WriteIf(TM>=0.3 AND TM<0.6 ,"+ +", > > WriteIf(TM>=0.6,"+ + 
  +", > > WriteIf(TM<0 AND TM>-0.3,"-", > > 
  WriteIf(TM<=-0.3 AND TM>-0.6 ,"- -", > > WriteIf(TM<=-0.6,"- 
  - -","")))))); > > > > TSSS= > > WriteIf(TS>0 
  AND TS<0.3,"+", > > WriteIf(TS>=0.3 AND TS<0.6 ,"+ 
  +", > > WriteIf(TS>=0.6,"+ + +", > > WriteIf(TS<0 AND 
  TS>-0.3,"-", > > WriteIf(TS<=-0.3 AND TS>-0.6 ,"- 
  -", > > WriteIf(TS<=-0.6,"- - -","")))))); > > > 
  > ////////////////////////////////////////////////////////////// > 
  > > > AddTextColumn( TLLL, "MA"+-DTL, 1 , colorDefault, > 
  > IIf( TLL==True, colorGreen, colorRed ),-1 ); > > AddTextColumn( 
  TMMM, "MA"+-DTM, 1 , colorDefault, > > IIf( TMM==True, colorGreen, 
  colorRed ),-1 ); > > AddTextColumn( TSSS, "MA"+-DTS, 1 , 
  colorDefault, > > IIf( TSS==True, colorGreen, colorRed ),-1 
  ); > > > > 
  ////////////////////////////////////////////////////////////// > > 
  message= > > WriteIf(TL>=0.3 AND TM>=0.3 AND > > 
  TS>=0.3, "Strong Up Trend", > > WriteIf(TL<=-0.3 AND 
  TM<=-0.3 AND > > TS<=-0.3, "Strong Down Trend", > > 
  WriteIf(TLL==True AND TMM==True AND > > TSS==True,"Up Trend", > 
  > WriteIf(TLL==False AND TMM==False AND > > TSS==False,"Down 
  Trend", "No Trend")))); > > > > > > AddTextColumn( 
  message, "Overall Trend", 1 , > > colorDefault,IIf(TLL==True AND 
  TMM==True AND > > TSS==True, colorGreen, > > IIf(TLL==False 
  AND TMM==False AND > > TSS==False, colorRed, colorDefault )),-1 
  ); > > > > 
  ////////////////////////////////////////////////////////////// > 
  > > > x = IIf(Cross(LinRegSlope(MA(C, DTL),2),0) OR > > 
  Cross(0, LinRegSlope(MA(C, DTL),2) ), True, False); > > y = 
  BarIndex()-ValueWhen(x==True, BarIndex(),1); > > > > 
  Phase=WriteIf(Y>=400,"Mature",WriteIf(Y>100 AND > > Y<400, 
  "Progress", WriteIf(Y<=100, "Initial", ""))); > > //AddColumn( y, 
  "Trend Phase", 1 , colorDefault,  -1); > > AddTextColumn( Phase, 
  "Trend Phase", 1 , colorDefault,  -1); > > > > 
  ////////////////////////////////////////////////////////////// > > 
  Comments= > > WriteIf(Y>=400,"Mature trend with risk of 
  bubble", > > WriteIf(y<400 AND TLL==True AND TMM==True AND 
  TSS==True, > > "Keep on coming baby $", > > WriteIf(y<15 
  AND TLL==True AND TMM==True AND TSS==True OR > > TLL==False AND 
  TMM==False AND TSS==False, > > "Are you going to grow up and become a 
  big boy?", > > WriteIf(y<400 AND TLL==False AND TMM==False AND 
  TSS==False, > > "Keep on coming baby $$", > > 
  WriteIf(TLL==True AND TMM==True AND TSS==False OR > > TLL==False AND 
  TMM==False AND TSS==True, > > "Risk for short term reversal", > 
  > WriteIf(TLL==True AND TMM==False AND TSS==True OR > > TLL==False 
  AND TMM==True AND TSS==False, > > "trading range-avoid", > > 
  "live to trade another day")))))); > > > > AddTextColumn( 
  Comments, "Comments", 1 , > > colorDefault,colorDefault,-1 ); > 
  > > > > > 
  ////////////////////////////////////////////////////////////// > > 
  _SECTION_END(); > > > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Auto-Optimization 
  Framework > > //  Author/Uploader: Dave Merrill > > 
  //  E-mail: > > //  Date/Time Added: 2003-10-22 
  11:58:47 > > //  Origin: > > //  Keywords:  
        optimize,auto-optimize,backtest > > //  
  Level:          advanced > > //  
  Flags:          system,exploration,function > 
  > //  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=304 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=304 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  this is a backtest framework that continously 
  and automatically > > optimizes > > //  settings for a 
  trading rule you provide. it chooses settings that > > 
  measure > > //  best over a selectable lookback period. this 
  re-optimization can > > be done > > //  every bar, at a 
  user-definable interval, or once at the start of > > trading. > 
  > //  it requires AFL editing to use; instructions are 
  provided. > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // INTRO > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > /* > > > > 
  ------------------------------------------------------------------------ > 
  > Auto-Optimization Framework > > v 1.0 (hah) 10/20/03 Dave 
  Merrill (email: dmerrill at usa dot net) > > thanks to Tomasz 
  Janeczko for AmiBroker, and everyone in the AmiBroker > > groups at 
  Yahoo > > comments, suggestions, bug reports etc are most 
  welcome > > 
  ------------------------------------------------------------------------ > 
  > > > > > WHAT DOES THIS DO? > > > > 
  you've probably done walk-forward optimizations, where you optimize a > 
  > trading system over some time period, then trade with those 
  settings > > for a while, optimize again at some later date, trade 
  on, etc.. in > > fact, this is like real life, unless you assume your 
  initial settings > > will be optimal forever and you'll never change 
  them. > > > > this code is a backtest framework that does 
  this continously and > > automatically. you provide a trading rule, 
  and it constantly optimizes > > the parameters for it, always using 
  the settings that measure best > > over a selectable lookback period. 
  this re-optimization can be done > > every bar, at a user-definable 
  interval, or once at the start of trading. > > > > one 
  interesting fact is that so far, almost no trading rules I've > > 
  tested are very profitable when managed this way, with any framework > 
  > settings I've tried. the ones that are are far from universally > 
  > successful over various stocks and time frames. I find this very > 
  > interesting and quite puzzling, as is well documented on the AB 
  group. > > maybe there are bugs that cause this; please let me know 
  about any you > > find. maybe the equity evaluation function or other 
  framework > > behaviors could be improved; please let me know if you 
  come up with > > great changes. maybe it's just not a very effective 
  method; if you can > > explain to me why this is so, please 
  do! > > > > and lastly, if you find any hugely profitable 
  uses for this thing, or > > other interesting insights from poking 
  around with it, PLEASE let me > > in on 'em! (:-) > 
  > > > > > IMPORTANT USAGE NOTE!!!! > > > 
  > parts of this code belong to the framework itself, and shouldn't 
  be > > modified in normal use. other parts you need to edit, to 
  select the > > specific trading rule you want to test, and establish 
  settings for how > > the framework will operate. > > > 
  > all sections are clearly labelled as editable or not. it's in 
  your > > best interest not to change the ones that say NOT EDITABLE, 
  at least > > to start with. > > > > > > 
  DON'T BE IMTIMIDATED > > > > though this is pretty long, 
  it's actually not that complicated, either > > to use or in its 
  internals. it's broken down into sections, most of > > which you 
  don't need to even look at. if I could hide the no-touchy > > bits 
  away I would (:-). also, a lot of it is explanation, not code, > > 
  and a lot of the code is a collection of sample trading rules. > 
  > > > > > INSTRUCTIONS > > > > 1) add 
  trading rule(s) you want to test to the CUSTOM TRADING RULES > > 
  section. see comments there for how your rules will be called, and > 
  > what they need to do. some examples are provided. you can have as 
  many > > rules here as you want, but only one can be in use at a 
  time. step 3 > > below controls which one is active. > 
  > > > 2) if those rules require other custom functions, add them 
  to the > > CUSTOM UTILITY FUNCTIONS section. > > > 
  > 3) edit the framework function BuySellRule(), at the start of the > 
  > FRAMEWORK CONFIGURATION section, to call the trading rule you want 
  to > > test now. > > > > 4) edit the 
  SetParameterRanges() call, next in the FRAMEWORK > > CONFIGURATION 
  section, to set the ranges over which you want to test > > each of 
  the two optimization parameters. some examples are provided; > > 
  comment out all but the one you want to use. > > > > 5) if 
  desired, edit the rest of the FRAMEWORK CONFIGURATION section, > > to 
  control various aspects of how the framework itself behaves. > 
  > > > 6) set the AA range, stock universes you want to test, and 
  other AA > > settings, then run a Backtest or Portfolio 
  Backtest. > > > > 7) if you want to see the parameters 
  selected and other decisions > > being made under the hood, you can 
  Explore instead of backtest. if > > desired, edit the EXPLORATION 
  section at the end to change the columns > > and bars displayed; some 
  possible extensions and modifications are > > provided. note that 
  exploring doesn't actually trade, it's only a > > readout for your 
  interest. > > > > > > GETTING STARTED > 
  > > > this comes set up to run the included trading rule 
  'BuySellCCI'. > > backtest it on, say, the NASDAQ Composite Index, to 
  get an idea of how > > it performs (nothing great). explore it to see 
  the parameter values > > the framework selected (the best_p1 column). 
  try changing the > > parameter ranges tested, as described in the 
  instructions above. > > > > BuySellCCI uses a single 
  parameter, requiring only 40 tests to > > optimize. this makes it 
  quicker to run than most two-parameter > > systems, which typically 
  need about 40 x 40 tests or more, depending > > on the number of 
  values you want to test. performance can definitely > > be an issue 
  as the number of tests goes up, and even single parameter > > systems 
  can be pretty slow with a large number of stocks. > > > > in 
  the FRAMEWORK CONFIGURATION section, try changing > > 
  equity_lookback_bars (how far back performance is evaluated during > 
  > optimization) and equity_lookback_frequency (how often optimization 
  is > > done). if you want, you can actually optimize these; 
  possible > > optimization settings are provided. be cautious in 
  interpreting those > > results though. I'd do it more for a quick 
  sense of how things behave > > than to necessarily choose the highest 
  performing settings. at the > > very least, test a variety of stocks 
  and time frames with any settings > > you arrive at, to make sure 
  they're not a fluke. > > > > try some of the other included 
  trading rules, maybe starting with the > > MA/EMA/DEMA/TEMA cross 
  rules. hook them up and select parameter ranges > > to test as 
  described in the instructions above. > > > > try adding your 
  own trading rules, and experiment with optimization > > ranges and 
  equity feedback parameters. > > > > try modifying the 
  performance scoring methods, and adding your own. > > > > 
  */ > > > > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // FRAMEWORK INIT - NOT EDITABLE > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > Buy = Sell = Short = Cover = 0; > > 
  equity_lookback_bars = equity_lookback_frequency = > > 
  equity_lookback_smoothing = equity_drawdown_discount_pct = 0; > > e = 
  best_e = best_perf_score = best_p1 = best_p2 = 0; > > p1_start = 
  p2_start = 2; > > p1_end = p2_end = 20; > > p1_step = 
  p2_step = 1; > > bar_index = BarIndex(); > > > 
  > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // FRAMEWORK FUNCTIONS - NOT EDITABLE > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > function SetParameterRanges(p1_start_p, p1_end_p, 
  p1_step_p, > > p2_start_p, p2_end_p, p2_step_p) { > >   
     if(p1_step_p != 0) { > >        
     p1_start = p1_start_p; > >        
     p1_end = p1_end_p; > >          
   p1_step = p1_step_p; > >      } else { > 
  >           p1_start = p1_end = p1_step = 
  1; > >      } > >     
   if(p2_step_p != 0) { > >          
   p2_start = p2_start_p; > >          
   p2_end = p2_end_p; > >          
   p2_step = p2_step_p; > >      } else { > 
  >           p2_start = p2_end = p2_step = 
  1; > >      } > > } > > function 
  PerformanceScoreMDDDiscount(e, perf_score) { > >     
   e_max = Highest(e); // peak equity so far > >     
   mdd = Highest(e_max - e);     // max drawdown so 
  far > >      mdd_fraction = Highest(mdd / 
  e_max);     // fraction max drawdown is of > > peak 
  equity > >      perf_score = perf_score - (perf_score 
  * mdd_fraction * > > (equity_drawdown_discount_pct/100));  
     // reduce score by mdd fraction > > scaled by drawdown 
  discount > >      return perf_score; > > 
  } > > > > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // CUSTOM UTILITY FUNCTIONS - EDITABLE > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > function EMAx(array, period) {     // use in 
  place of AB EMA function when > > period needs to be an array > 
  >      return AMA(array, 1 / (period + 2)); > > 
  } > > function StochTransform(array, period) { > >   
     return > > 
  100*(array-LLV(array,period))/(HHV(array,period)-LLV(array,period)); > 
  > } > > function MeanDev(array, mean, range) { > >   
     result = 0; > >      for(i = 
  LastValue(Highest(range)); i < BarCount; i++) { > >     
        result[i] = 0;     // the mean is not 
  'moving' over the range (outside > > the loop) > >   
          tm = mean[i]; > >     
        for(j = 0; j < range[i]; j++) { > > 
                 result[i] = 
  result[i] + abs(array[i - j] - tm); > >        
     } > >           result[i] 
  = result[i] / range[i]; > >      } > >   
     return result; > > } > > function CCIx(period) 
  {     // use in place of AB CCI function when period > 
  > needs to be an array > >      // CCI = 
  (TypicalPrice - MA(TypicalPrice, 20)) / (.015 x MeanDeviation) > > 
       SMATP = MA(Avg, period); > >     
   MD = MeanDev(Avg, SMATP, period); > >     
   result = (Avg - SMATP) / (0.015 * MD); > >     
   return result; > > } > > function 
  TradeDivergences(array1, array2) { > >      dir1 = 
  IIf(array1 > Ref(array1, -1), 1, IIf(array1 < Ref(array1, -1), > 
  > -1, 0)); > >      dir2 = IIf(array2 > 
  Ref(array2, -1), 1, IIf(array2 < Ref(array2, -1), > > -1, 
  0)); > >      Buy = Cover = (dir1 == 1) AND (dir2 == 
  -1); > >      Sell = Short = (dir1 == -1) AND (dir2 == 
  1); > > } > > function TradeReversalsArith(array, threshold) 
  { > >      array = last_hi = last_lo = 
  IIf(IsNull(array), -1, array); > >      last_signal[0] 
  = 0; > >      Buy = Sell = 0; > >   
     for(i = 1; i < BarCount; i++) { > >     
        Buy[i] = array[i] >= last_lo[i-1] + threshold[i] 
  AND > > last_signal[i-1] != 1 AND array[i-1] != -1; > > 
            Sell[i] = array[i] <= last_hi[i-1] 
  - threshold[i] AND > > last_signal[i-1] != -1 AND array[i-1] != 
  -1; > >           last_signal[i] = 
  IIf(Buy[i], 1, IIf(Sell[i], -1, last_signal[i-1])); > >     
        always_track = array[i-1] == -1 OR Buy[i] OR 
  Sell[i]; > >           last_lo[i] = 
  IIf(always_track OR array[i] < last_lo[i-1], array[i], > > 
  last_lo[i-1]); > >           last_hi[i] 
  = IIf(always_track OR array[i] > last_hi[i-1], array[i], > > 
  last_hi[i-1]); > >      } > >     
   Short = Sell; > >      Cover = Buy; > > 
  } > > > > > > 
  ///////////////////////////////////////////////////////////////////////// > 
  > // CUSTOM TRADING RULES - EDITABLE > > 
  ///////////////////////////////////////////////////////////////////////// > 
  > > > /* > > > > this is where you put the 
  various trading rules you may want to test. > > only one rule can be 
  in use at a time. select which one actually gets > > used by editing 
  the framework function BuySellRule(), at the start of > > the 
  FRAMEWORK CONFIGURATION section. > > > > all rules should 
  set buy, sell, short and cover, in response to the > > parameters 
  passed to it and whatever logic you want. > > > > your rule 
  will be passed 3 parameters: > >      dynamic 
  (true/false)     : true if parameters are arrays, not just 
  single > > values; see ABOUT THE 'DYNAMIC' PARAMETER, below > 
  >      p1 (number/array)         
   : first optimization parameter > >      p2 
  (number/array)          : second optimization 
  parameter > > > > p1 and p2 are the values being optimized 
  on. trading rules can use > > them for any optimizable purpose, MA 
  periods or crossover thresholds > > for example. > > > 
  > during optimization, the rule in use will be called multiple 
  times, > > once with each combination of p1 and p2 being tested. at 
  this time, p1 > > and p2 will be simple numeric values, not arrays. 
  once optimal > > settings have been determined for every bar, the 
  rule will be called > > once more, to generate actual trading 
  signals. this time, p1 and p2 > > will be arrays, each bar containing 
  the optimal p1 and p2 value for > > that bar. > > > 
  > ABOUT THE 'DYNAMIC' PARAMETER > > > > not all AB 
  functions can take arrays as inputs. for example, MA, TEMA > > and 
  DEMA can use an array as their period, but EMA can't. it's usually > 
  > possible to code an equivalent that can in AFL, but it may be 
  slower, > > or in a DLL, which I didn't want to depend on for this. 
  this speed > > difference can be big, since the trading rule is 
  called many times > > during optimization. > > > > 
  if desired, your rule can include both slower array-capable code for > 
  > use in the final signal-generation phase, and faster, > > 
  non-array-capable code for use during the many optimization tries. if > 
  > you do this, use the 'dynamic' parameter to know which to call. 
  see > > BuySellCCI, below, for an example. > > > > 
  */ > > > > function BuySellEMACrossPrice(dynamic, p1, p2) 
  {     // p1 = EMA period > >      m = 
  EMAx(C, p1); > >      Buy = Cover = Cross(C, 
  m); > >      Sell = Short = Cross(m, C); > > 
  } > > function BuySellMACross(dynamic, p1, p2) {    
   // p1 = MA1 period, p2 = > > MA2 period increase over MA1 
  period > >      m1 = MA(C, p1); > >   
     m2 = MA(C, p1 + p2); > >      Buy = Cover 
  = Cross(m1, m2); > >      Sell = Short = Cross(m2, 
  m1); > > } > > function BuySellEMACross(dynamic, p1, p2) 
  {     // p1 = MA1 period, p2 = > > MA2 period increase 
  over MA1 period > >      m1 = EMAx(C, p1); > 
  >      m2 = EMAx(C, p2); > >     
   Buy = Cover = Cross(m1, m2); > >      Sell = 
  Short = Cross(m2, m1); > > } > > function 
  BuySellDEMACross(dynamic, p1, p2) {     // p1 = MA1 period, p2 
  = > > MA2 period increase over MA1 period > >     
   m1 = DEMA(C, p1); > >      m2 = DEMA(C, p1 + 
  p2); > >      Buy = Cover = Cross(m1, m2); > 
  >      Sell = Short = Cross(m2, m1); > > } > 
  > function BuySellTEMACross(dynamic, p1, p2) {     // p1 = 
  MA1 period, p2 = > > MA2 period increase over MA1 period > > 
       m1 = TEMA(C, p1); > >      m2 = 
  TEMA(C, p1 + p2); > >      Buy = Cover = Cross(m1, 
  m2); > >      Sell = Short = Cross(m2, m1); > 
  >      //short = cover = 0;     // at least 
  sometimes, short is perf_scoreable, > > but only barely, so RAR 
  drops > > } > > function BuySellCCI(dynamic, p1, p2) {  
     // p1 = CCI period; fixed > > threshold of zero > 
  >      if(dynamic) { > >        
     cc = CCIx(p1); > >      } else { > 
  >           cc = CCI(p1); > >   
     } > >      Buy = Cover = Cross(cc, 
  0); > >      Sell = Short = Cross(0, cc); > > 
  } > > function BuySellCCI2(dynamic, p1, p2) {     // 
  p1 = CCI period; moveable > > symetrical thresholds, mirrored above 
  and below zero for long and short > >      if(dynamic) 
  { > >           cc = CCIx(p1); > 
  >      } else { > >        
     cc = CCI(p1); > >      } > > 
       Buy = Cover = Cross(cc, p2); > >     
   Sell = Short = Cross(-p2, cc); > > } > > function 
  BuySellCCI3(dynamic, p1, p2) {     // p1 = CCI period; 
  moveable > > absolute threshold, same numeric level for long and 
  short > >      if(dynamic) { > >   
          cc = CCIx(p1); > >     
   } else { > >           cc = 
  CCI(p1); > >      } > >     
   Buy = Cover = Cross(cc, p2); > >      Sell = 
  Short = Cross(p2, cc); > > } > > function 
  BuySellStochCCI(dynamic, p1, p2) {     // p1 = CCI 
  period > >      cc = CCIx(period); > >   
     cc = StochTransform(cc, period); > >     
   Buy = Cover = Cross(cc, 50); > >      Sell = 
  Short = Cross(50, cc); > > } > > function 
  BuySellStoch(dynamic, p1, p2) {     // p1 = range, p2 = K & 
  D > > smoothing > >      if(dynamic) 
  { > >           stoK = > > 
  MA(100*(C-LLV(L,best_p1))/(HHV(H,best_p1)-LLV(L,best_p1)),best_p2); > 
  >           stoD = MA(stoK, best_p2); > 
  >      } else { > >        
     stoD = StochD(p1, p2, p2); > >     
        stoK = StochK(p1, p2); > >     
   } > >      sig = stoD - stoK; > > 
       Buy = Cover = Cross(sig, 0);; > >     
   Sell = Short = Cross(0, sig); > > } > > function 
  BuySellStochDivergence(dynamic, p1, p2) {     // p1 = range, p2 
  = > > K & D smoothing > >     
   if(dynamic) { > >           stoK 
  = > > 
  MA(100*(C-LLV(L,best_p1))/(HHV(H,best_p1)-LLV(L,best_p1)),best_p2); > 
  >           stoD = MA(stoK, best_p2); > 
  >      } else { > >        
     stoD = StochD(p1, p2, p2); > >     
        stoK = StochK(p1, p2); > >     
   } > >      TradeDivergences(stoD, stoK); > 
  > } > > function BuySellROC(dynamic, p1, p2) {    
   // p1 = range, p2 = threshold > >      sig = 
  ROC(MA(C, p1), 1); > >      Buy = Cover = Cross(sig, 
  p2); > >      Sell = Short = Cross(p2, sig); > 
  > } > > function BuySellDemandIndex(dynamic, p1, p2) {  
     // p1 = DI & TEMA > > period, p2 = EMA 
  period > >      period = 21;    
   //p1;     // 21 > >      period2 
  = 30;     //p2;     // 30 > >   
     A=(H+L+2*C); > >     
   B=EMAx((HHV(H,2)-LLV(L,2)),21); > >      BuyP= 
  /*{BuyPower}*/ > >          
   V/EMAx(V,21) * ((A>=Ref(A,-1)) +(A<Ref(A,-1)) / exp((0.375 
  * > > (A+Ref(A,-1)) /B ) *(Ref(A,-1)-A) / A)); > >   
     SellP = /*{SellPressure}*/ > >     
        V/EMAx(V,21) * ((A<=Ref(A,-1)) + (A>Ref(A,-1)) 
  / exp((0.375 * > > (A+Ref(A,-1)) / B ) * (A-Ref(A,-1)) / 
  Ref(A,-1))); > >      mabp=EMAx(BuyP,period); > 
  >      masp=EMAx(SellP,period);       
               // {smooth Selling 
  Pressure} > >     
   divsor=IIf(mabp>masp,mabp,masp);         
   // {BP:SP ratio} > >     
   divend=IIf(mabp<masp,mabp,masp);         
   // {biggest=divisor} > >     
   var2=1-(divend/divsor);            
               // {adjust ratio to plot 
  in} > >      var3=IIf((masp>mabp), -var2, 
  var2);     // {range -100 to 100} > >     
   var4=var3*100; > >      DI = var4; > > 
       DI_TEMA = TEMA(DI, period); > >     
   DI_TEMA_MA = EMAx(DI_TEMA, period2); > >     
   Buy = Cover = Cross(DI_TEMA, 0);         
   // try various crosses of DI, > > DI_TEMA, DI_TEMA_MA and 
  zero > >      Sell = Short = Cross(0, 
  DI_TEMA); > >      Short = Cover = 0;    
                    
          // improves performance sometimes > 
  > } > > function BuySellMTIReversals(dyanamic, p1, p2) {  
     // p1 = reversal > > threshold; .12 for San Diego Wave 
  timing > >      // requires MTI in ticker 
  !!MTI; > >      // note that MTI data doesn't go back 
  very far, and was calculated > > differently before some time in 
  early '00 > >      // adjust test period and keep 
  results in perspective accordingly > >      MTI = 
  Foreign("!!MTI", "C", True); > >     
   TradeReversalsArith(MTI, p1); > > } > > > 
  > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // PERFORMANCE SCORING METHODS - EDITABLE > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // one of these functions will be called to evaluate the 
  performance > > of each parameter combination tried > > // 
  select the one that will be active by editing the framework > > 
  function PerformanceScore > > //         
   it's at the beginning of EQUITY FEEDBACK BEHAVIOR, in the > > 
  FRAMEWORK CONFIGURATION section > > // you can edit these or add your 
  own > > function PerformanceScore1() {     // profit 
  per bar > >      e = Equity(0, 0); > >   
     if(equity_lookback_bars == 0) {     // test all 
  performance to date > >           e_ref 
  = e[0]; > >      } else {       
                   
                  // test 
  performance back spec'd number of bars > >        
     e_ref = Ref(e, -equity_lookback_bars); > >     
   } > >      perf_score = (e - e_ref) / 
  e_ref;     // growth over lookback period > >   
     perf_score = MA(perf_score, IIf(equity_lookback_smoothing >= 
  1, > > equity_lookback_smoothing, 1)) * 100;     // 
  smoothed pct > >      perf_score = perf_score * 100 / 
  IIf(equity_lookback_bars == 0, > > Cum(1), 
  equity_lookback_bars);     // per 100 bars > >   
     perf_score = PerformanceScoreMDDDiscount(e, perf_score); > 
  >      return perf_score; > > } > > 
  function PerformanceScore2() {     // net of right-sided bars 
  per bar > >      e = Equity(0, 0); > >   
     e_ref = Ref(e, -1); > >      e_delta = e 
  - e_ref; > >      last_buy_bar = ValueWhen(Buy, 
  bar_index); > >      last_sell_bar = ValueWhen(Sell, 
  bar_index); > >      last_short_bar = ValueWhen(Short, 
  bar_index); > >      last_cover_bar = ValueWhen(Cover, 
  bar_index); > >      entry_status = IIf(last_buy_bar 
  > last_sell_bar, 1, > > IIf(last_short_bar > last_cover_bar, 
  -1, 0)); > >      bar_is_right = IIf(entry_status == 
  1, e_delta > 0, IIf(entry_status > > == -1, e_delta < 0, 
  0)); > >      bar_is_wrong = IIf(entry_status == 1, 
  e_delta < 0, IIf(entry_status > > == -1, e_delta < 0, 
  0)); > >      if(equity_lookback_bars == 0) {  
     // test all performance to date > >     
        bars_right = Cum(bar_is_right);    
   // bars long and rising or short and > > falling > > 
            bars_wrong = Cum(bar_is_wrong);  
     // bars long and falling or short > > and rising > 
  >      } else {         
                    
               // test performance back 
  spec'd number of bars > >          
   bars_right = Sum(bar_is_right, equity_lookback_bars);    
   // bars long > > and rising or short and falling > > 
            bars_wrong = Sum(bar_is_wrong, 
  equity_lookback_bars);     // bars long > > and 
  falling or short and rising > >      } > > 
       perf_score = (bars_right - bars_wrong) / bar_index;  
          // net bars > > right per 
  bar > >      perf_score = MA(perf_score, 
  IIf(equity_lookback_smoothing >= 1, > > equity_lookback_smoothing, 
  1)) * 100;     // smoothed pct > >     
   perf_score = PerformanceScoreMDDDiscount(e, perf_score); > > 
       return perf_score; > > } > > > 
  > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // FRAMEWORK CONFIGURATION - EDITABLE > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > // TRADING RULE: EDIT TO CALL THE CUSTOM RULE YOU WANT TO 
  TEST > > function BuySellRule(dynamic, p1, p2) { > >   
     BuySellCCI(dynamic, p1, p2); > > } > > > 
  > // PARAMETER RANGES TO TEST > > // each of the two parameters, 
  p1 and p2, has start, end and step > > values that control the values 
  tried during optimization > > //         
   you'll probably need to adjust these to the ranges that are 
  useful > > for the active trading rule > > //    
   to set them all at once, call SetParameterRanges(p1_start, 
  p1_end, > > p1_step, p2_start, p2_end, p2_step) > > // 
            if your rule doesn't use p2, use 
  p2_step = 0 to speed up optimization > > //  some typical 
  settings are provided below; uncomment and edit the > > one you want 
  to use > > SetParameterRanges(2, 40, 1, 1, 1, 0);     
   // basic single parameter range > > //SetParameterRanges(2, 40, 
  1, 2, 40, 1);      // basic two parameter ranges > > 
  //SetParameterRanges(2, 40, 1, 0, 100, 10);      // 2-40 
  period, 0-100 > > threshold > > //SetParameterRanges(.01, 
  .5, .01, 1, 1, 0);     // for MTI reversals > 
  > > > // EQUITY FEEDBACK BEHAVIOR > > // parameter values 
  selected by the framework are the ones that > > performed best over a 
  specified time in the past > > // this section controls how this is 
  done > > //          two performance 
  metrics are provided, and you can add your own > > //    
             only one can be active at a 
  time > > //              
   edit the function PerformanceScore to call the one you want to 
  use > > //         
   equity_lookback_bars controls how many bars worth of history 
  will > > be examined > > //         
        0 = examine all performance to date > > 
  //          equity_lookback_frequency is the 
  number of bars between optimizations > > //       
          0 = optimize every bar, -1 = first bar 
  only > > //         
   equity_lookback_smoothing applies an MA to the equity curve 
  before > > picking optimum values > > //    
             minimizes the effect of daily 
  price fluctuations on optimization; > > only matters much when pretty 
  high, multiple months > > //         
   equity_drawdown_discount_pct reduces the performance score by 
  the > > maximum drawdown amount * this percentage > > 
  //               at zero, MDD has 
  no effect; at 100, 20% MDD reduces the score by 20% > > function 
  PerformanceScore() { > >      return 
  PerformanceScore2(); > > } > > equity_lookback_bars = 
  0;     // 126 * Optimize("Equity Lookback", 0, 0, > > 
  5*2, 1); > > equity_lookback_frequency = 0;     //21 * 
  Optimize("Equity Lookback > > Frequency", 0, 0, 12*2, 1); > 
  > equity_lookback_smoothing = 0;     //21*6; > > 
  equity_drawdown_discount_pct = 0;     //100; > 
  > > > // TRADE ENTRY RESTRICTIONS > > // edit to set 
  minimum price, volume and length of history required to > > enter a 
  trade > > // note that the volume requirement is ignored for mutual 
  funds and > > tickers starting w '!' or '~' > > has_min_vol 
  = (MA(V, 100) > 1000000) OR True; > > is_min_price_long = C > 
  1; > > is_min_price_short = C > 5; > > has_min_history = 
  bar_index >= (252 * 3);     // require 3 years of > 
  > history before trading > > > > // PORTFOLIO 
  MANAGEMENT > > // these settings aren't well tested (:-) > > 
  max_positions = 0;     // number of simultaneous positions to 
  hold; zero > > for no portfolio management > > use_ranking = 
  False;     // true to rank simultaneous entry signals 
  by > > backtest return in portfolio mode > > > 
  > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > 
  ////////////////////////////////////////////////////////////////////////// > 
  > 
  ////////////////////////////////////////////////////////////////////////// > 
  > ////////////////////  FRAMEWORK ENGINE - NOT EDITABLE  
  ////////////////// > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > 
  ////////////////////////////////////////////////////////////////////////// > 
  > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > // tweak volume entry requirements for things with no volume 
  data > > has_min_vol = has_min_vol > >     
   OR (MarketID(1) == "Mutual funds") OR (StrLeft(Name(), 1) == "!") 
  OR > > (StrLeft(Name(), 1) == "~"); > > > > // loop 
  through requested parameter ranges, calculating signals and > > 
  choosing parameter values that score best > > first_bar_index = 
  ValueWhen(Status("FirstBarInRange"), bar_index); > > for(p1 = 
  p1_start; p1 <= p1_end; p1 = p1 + p1_step) { > >     
   for(p2 = p2_start; p2 <= p2_end; p2 = p2 + p2_step) { > 
  > > >           // calc 
  buy/sell/short/cover w those settings > >        
     BuySellRule(False, p1, p2); > > > >   
          // apply overall entry restrictions > 
  >           Buy = Buy AND is_min_price_long 
  AND has_min_vol; > >           Short = 
  Short AND is_min_price_short AND has_min_vol; > > > >   
          // calc performance score w those 
  settings > >           perf_score = 
  PerformanceScore(); > > > >        
     // track settings w best performance and resulting equity > 
  >           if(equity_lookback_frequency == 
  0) { > >               
   optimize_this_bar = 1; > >          
   } else if(equity_lookback_frequency == -1) { > >     
             optimize_this_bar = 
  Status("FirstBarInRange"); > >          
   } else { > >             
     optimize_this_bar = (first_bar_index - bar_index) % > > 
  equity_lookback_frequency == 0; > >          
   } > >           is_new_best = 
  IIf(optimize_this_bar AND perf_score > > > best_perf_score, 1, 
  0); > >           best_perf_score = 
  IIf(is_new_best, perf_score, best_perf_score); > >     
        best_p1 = IIf(is_new_best, p1, best_p1); > 
  >           best_p2 = IIf(is_new_best, p2, 
  best_p2); > >           best_e = 
  IIf(is_new_best, e, best_e); > >          
   best_perf_score = IIf(optimize_this_bar, best_perf_score, > > 
  ValueWhen(optimize_this_bar, best_perf_score)); > >     
        best_p1 = IIf(optimize_this_bar, best_p1, > 
  > ValueWhen(optimize_this_bar, best_p1)); > >     
        best_p2 = IIf(optimize_this_bar, best_p2, > 
  > ValueWhen(optimize_this_bar, best_p2)); > >     
        best_e = IIf(optimize_this_bar, best_e, 
  ValueWhen(optimize_this_bar, > > best_e)); > >     
   } > > } > > > > // calc real 
  buy/sell/short/cover w optimal settings > > BuySellRule(True, 
  best_p1, best_p2); > > > > // apply overall entry 
  restrictions > > Buy = Buy AND is_min_price_long AND has_min_vol AND 
  has_min_history; > > Short = Short AND is_min_price_short AND 
  has_min_vol AND has_min_history; > > > > // don't enter, 
  exit now, unless lookback was perf_scoreable > > Buy = Buy AND 
  best_perf_score > 0; > > Short = Short AND best_perf_score > 
  0; > > Sell = Sell OR best_perf_score <= 0; > > Cover = 
  Cover OR best_perf_score <= 0; > > > > // kill sells and 
  covers before respective entries; cleans up exploration > > Sell = 
  Sell AND Cum(Buy); > > Cover = Cover AND Cum(Short); > 
  > > > // kill dupe signals, for exploration > > Sell = 
  ExRem(Sell, Buy); > > Cover = ExRem(Cover, Short); > 
  > > > // set PostionSize and PositionScore if requested > 
  > if(max_positions > 0) { > >      PositionSize 
  = -((100 / max_positions) - 1); > > } > > if(use_ranking) 
  { > >      PositionScore = IIf(Buy, best_perf_score, 
  IIf(Short, > > -best_perf_score, 0)); > > } > 
  > > > > > 
  ////////////////////////////////////////////////////////////////////////// > 
  > // EXPLORATION - EDITABLE IF YOU WANT, BUT USUALLY NOT NECCESSARY > 
  > 
  ////////////////////////////////////////////////////////////////////////// > 
  > > > Filter = Buy OR Sell OR Short OR Cover; > > 
  //filter = optimize_this_bar;          // to 
  show every bar where optimization > > was done > > //filter 
  = filter or Ref(filter, 1);          // to show 
  the day before each > > signal too > > //filter = 1; //to 
  show all bars > > > > AddColumn(bar_index, "Bar Index", 
  1.0); > > AddColumn(Buy, "buy", 1); > > AddColumn(Sell, 
  "sell", 1); > > AddColumn(Short, "short", 1); > > 
  AddColumn(Cover, "cover", 1); > > AddColumn(optimize_this_bar, 
  "optimize_this_bar", 1.0); > > AddColumn(best_perf_score, 
  "best_perf_score", 1.4); > > AddColumn(best_e, "best_e", 
  1.0); > > AddColumn(((ValueWhen(Filter OR Status("LastBarInTest"), 
  best_e, 0) - > > best_e) / best_e) * 100, "best_e_pct_change", 
  1.2); > > AddColumn(best_p1, "best_p1"); > > 
  AddColumn(best_p2, "best_p2"); > > AddColumn(BarsSince(best_p1 != 
  Ref(best_p1, -1) OR best_p2 != > > Ref(best_p2, -1)) + 1, 
  "bars_since_settings", 1.0); > > AddColumn(ValueWhen(Filter OR 
  Status("LastBarInTest"), bar_index, 0) - > > bar_index, "bars", 
  1.0); > > AddColumn(has_min_history, "has_min_vol", 1.0); > 
  > AddColumn(has_min_history, "has_min_history", 1.0); > > 
  AddColumn(C, "price"); > > AddColumn(equity_lookback_bars, 
  "equity_lookback_bars"); > > AddColumn(equity_lookback_frequency, 
  "equity_lookback_frequency"); > > > > // enable next lines 
  to see more optimization details; note that only > > the last 
  parameter set tried will show > > //AddColumn(e, "e"); > > 
  //AddColumn(e_ref, "e_ref"); > > //AddColumn(perf_score, 
  "perf_score", 1.4); > > > > // TRADING THE MACD Ver 1.0 by 
  Karthik Marar. AFL provided as a part > > of the Discussion on 
  trading the MACD in the Thread " Experiments in > > Technical 
  Analysis" > > // Afl provided to learn and get an insight for trading 
  using the > > MACD. The AFL can be freely distributed except for 
  commercial purpose. > > > > _SECTION_BEGIN("MACD 
  optimize"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    MACD optimize > 
  > //  Author/Uploader: Grayesso > > //  E-mail:  
          grayesso@xxx > > //  Date/Time 
  Added: 2003-12-10 14:12:39 > > //  Origin: > > //  
  Keywords: > > //  Level:          
  advanced > > //  Flags:          
  showemail,function > > //  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=313 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=313 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  MACD (12,26,9 - 5,34,5 <==> by default - 
  by Bill Williams > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > /* Project:      AmiBroker > > ** 
  File:          MACD_optimize.afl > > ** 
  Title:        MACD Optimize for Automatic Analysis 
  (English) > > ** Date:          Dec 10th, 
  2003 > > ** Written by:    Grayesso (grayesso dog rambler 
  dot ru) > > */ > > > > /*After entering the formula 
  just click on Optimize button in > > "Automatic Analysis" window. 
  AmiBroker will start testing all possible > > combinations of 
  optimization variables and report the results in the > > list. After 
  optimization is done the list of result is presented > > sorted by 
  the Net % profit. As you can sort the results by any column > > in 
  the result list it is easy to get the optimal values of parameters > 
  > for the lowest drawdown, lowest number of trades, largest profit > 
  > factor, lowest market exposure and highest risk adjusted annual % > 
  > return. The last three columns of result list present the values 
  of > > optimization variables for given test. > > > 
  > > > When you decide which combination of parameters suits your 
  needs the > > best all you need to do is to replace the default 
  values in optimize > > function calls with the optimal values. At 
  current stage you need to > > type them by hand in the formula edit 
  window (the second parameter of > > optimize function call). 
  */ > > > > /* MACD (12,26,9 - 5,34,5 <==> by default - 
  by Bill Williams */ > > > > /* variable = optimize( 
  "Description", default, min, max, step ) */ > > > > > 
  > fa = Optimize( "MACD Fast", 5, 5, 12, 1 ); > > sa = 
  Optimize("MACD Slow", 34, 26, 34, 1 ); > > sig = Optimize( "Signal 
  average", 5, 5, 9, 1 ); > > > > Buy = Cross( MACD( fa, sa ) 
  , Signal( fa, sa, sig ) ); > > Sell = Cross( Signal( fa, sa, sig ), 
  MACD( fa, sa ) ); > > _SECTION_END(); > > > 
  > > > _SECTION_BEGIN("Randomize"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    Randomize() > 
  > //  Author/Uploader: Antonio Marra > > //  
  E-mail:          ant.marra@xxx > > //  
  Date/Time Added: 2004-07-20 06:40:47 > > //  Origin: > 
  > //  Keywords:        Random interval > 
  > //  Level:          basic > > 
  //  Flags:          showemail,function > 
  > //  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=365 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=365 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  This function will generate random numbers 
  included in a given numeric > > //  interval. > > 
  // > > 
  //------------------------------------------------------------------------------ > 
  > > > 
  /*_________________________________________________________________________________________ > 
  > > > > >  SYNTAX: > >      
      Randomize(a,b) > > > >  PURPOSE: > 
  >          This function will generate random 
  numbers included in a > > given numeric interval. > 
  > > >  HOW TO USE: > >        
    Copy this file in your include directory or append it to > > 
  another file that You > >          use as 
  "functions database". > >          "a" is 
  the lowest value, "b" is the highest value. > > > >  
  EXAMPLE: > >          1. if you want to 
  generate random between 1 e 100 (with > > decimal values): > 
  > > >              RandomNumber 
  = Randomize(1,100); > > > >        
    2. if you want to generate random between 1 e 100 (with only > 
  > integer values): > > > >        
        RandomNumber = int( Randomize(1,100) ) ; > 
  > > > > > 
  ________________________________________________________________________________________ > 
  > > > > >              
        */ > > > > > > function 
  Randomize(a,b) > > { > >    result = 
  Random()*(b-a)+a; > >    return result; > > 
  } > > _SECTION_END(); > > > > _SECTION_BEGIN("sort 
  function"); > > 
  //------------------------------------------------------------------------------ > 
  > // > > //  Formula Name:    sort function > 
  > //  Author/Uploader: walt schwarz > > //  
  E-mail:          wschwarz@xxx > > //  
  Date/Time Added: 2003-05-26 17:11:16 > > //  Origin: > 
  > //  Keywords:        sort array function > 
  > //  Level:          medium > > 
  //  Flags:          showemail,function > 
  > //  Formula URL:    
  http://www.amibroker.com/library/formula.php?id=283 > > //  
  Details URL:    
  http://www.amibroker.com/library/detail.php?id=283 > > // > 
  > 
  //------------------------------------------------------------------------------ > 
  > // > > //  will return the passed array in sorted 
  order > > // > > 
  //------------------------------------------------------------------------------ > 
  > > > function sort(inlist) > > > > { > 
  > > > //sort inlist > > > > temp=0; > 
  > > > for(i = BarCount-1; i>=0; i--) > > > > 
  { > > > > for (j = 1; j <= i; j++) > > > 
  > { > > > > if (inlist[j-1] > inlist[j]) > 
  > > > { > > > > temp = inlist[j-1]; > 
  > > > inlist[j-1] = inlist[j]; > > > > inlist[j] 
  = temp; > > > > } > > > > } > 
  > > > } > > > > //inlist now sorted > 
  > > > return inlist; > > > > } > 
  > > > _SECTION_END(); > > > > 
  SetCustomBacktestProc(""); > > if( Status("action") == 
  actionPortfolio ) > > { > >      bo = 
  GetBacktesterObject(); > >      bo.Backtest(); > 
  >      Buy = 0; > >      Sell= 
  0; > >      PosTradePos = 0; > >   
     NegTradePos = 0; > > } > > > > 
  _SECTION_BEGIN("EOD v1.1 Mod"); > > #include 
  <T3_include.AFL>; > > //WAD > > TrueRangeHigh=Max( 
  Ref(Close,-1), High ); > > TrueRangeLow=Min( Ref(Close,-1), Low 
  ); > > WAD = Cum(IIf(C > Ref(C,-1),C-TrueRangeLow, IIf(C 
  < > > Ref(C,-1),C-TrueRangeHigh,0))); > > wadup = WAD 
  > EMA (WAD,20); > > waddn = WAD < EMA (WAd,20); > > 
  wadbl = Cross(WAD, EMA(WAD,20)); > > wadbr = Cross(EMA(WAD,20), 
  WAD); > > wad_status=     WriteIf(wadup, "Bullish 
  Zone", WriteIf(waddn, "Bearish > > Zone", WriteIf(wadbl, "Bullish 
  Cross", WriteIf(wadbr, "Bearish Cross", > > "Zilch")))); > > 
  wad_Col=IIf(wadup OR wadbl, colorGreen, IIf(waddn OR wadbr, colorRed, > 
  > colorLightGrey)); > > > > > > //Trend 
  Strength > > up = ADX(10) > 20; > > down = ADX(10) < 
  20; > > choppy = ADX(10) < PDI(10) AND ADX(10) < 
  MDI(10); > > adx_status=     WriteIf(up, "Strong 
  Trend", WriteIf(down, "Weak Trend", > > WriteIf( choppy, "Choppy", 
  "Zilch"))); > > adx_Col=IIf(up, colorGreen, IIf(down, colorRed, 
  IIf(Choppy, colorPink, > > colorLightGrey))); > > > 
  > // Coppock > > r1=ROC(C,14); > > r2=ROC(C,11); > 
  > ck=EMA((r1+r2),10); > > upt=IIf(ck>0 AND 
  ROC(ck,1)>0,ck,0); > > ups=IIf(ck>0 AND 
  ROC(ck,1)<0,ck,0); > > downs=IIf(ck<0 AND 
  ROC(ck,1)>0,ck,0); > > down=IIf(ck<0 AND 
  ROC(ck,1)<0,ck,0); > > cop_status=     WriteIf(upt, 
  "Uptrend", WriteIf(ups, "Uptrend Sidways", > > WriteIf(downs, 
  "Downtrend Sideways", WriteIf(down, "Downtrend", > > 
  "Zilch")))); > > cop_Col=IIf(upt, colorDarkGreen, IIf(ups, 
  colorGreen, IIf(downs, > > colorOrange, IIf(down, colorRed, 
  colorLightGrey)))); > > > > //Initial Buy Signal > 
  > Ibuy =  Cross(RSI(14), EMA(RSI(14),9)); > > Isell = 
  Cross(EMA(RSI(14),9), RSI(14)); > > Ibuy = ExRem(Ibuy, 
  ISell); > > Isell = ExRem(ISell, Ibuy); > > BlRSI = RSI(14) 
  > EMA(RSI(14),9); > > BrRSI = RSI(14) < EMA(RSI(14),9); > 
  > Ibuy_status=     WriteIf(Ibuy, "Buy Warning", 
  WriteIf(Isell, "Sell > > Warning", WriteIf(BlRSI, "Bullish Zone", 
  WriteIf(BrRSI, "Breaish > > Zone", "Zilch")))); > > 
  I_Col=IIf(Ibuy OR BlRSI, colorGreen, IIf(Isell OR BrRSI, colorRed, > 
  > colorLightGrey)); > > > > //BB Breakout > > 
  bbk2 = Cross(RSI(14),30) AND > > RSI(14) > 
  Ref(RSI(14),-1); > > bbk_status=     WriteIf(bbk2, 
  "Break RSI", "Zilch" ); > > bbk_Col=IIf(bbk2, colorGreen, 
  colorLightGrey); > > > > > > //Price 
  Smoothing > > TBuy = Cross (T3(C,3), T3(C,5)); > > TSell 
  =  Cross (T3(C,5), T3(C,3)); > > TBuy = ExRem(TBuy, 
  TSell); > > TSell = ExRem(TSell, TBuy); > > 
  Tbuy_status=     WriteIf(TBuy, "Buy", WriteIf(TSell, "Sell", 
  "Zilch")); > > T_Col=IIf(TBuy, colorGreen, IIf(TSell, colorRed, 
  colorLightGrey)); > > > > //Guppy MMA > > P1 = 
  EMA(C,3); > > P2 = EMA(C,5); > > P3 = EMA(C,8); > > 
  P4 = EMA(C,10); > > P5 = EMA(C,12); > > P6 = 
  EMA(C,15); > > P7 = EMA(C,30); > > P8 = EMA(C,35); > 
  > P9 = EMA(C,40); > > P10 = EMA(C,45); > > P11 = 
  EMA(C,50); > > P12 = EMA(C,55); > > P13 = EMA(C,60); > 
  > GBuy = Cross (P1,P8); > > GSell = Cross(P8,P1); > > 
  GBuy = ExRem(GBuy, GSell); > > GSell = ExRem(GSell, GBuy); > 
  > Gbuy_status=     WriteIf(GBuy, "Buy", WriteIf(GSell, 
  "Sell", "Zilch")); > > G_Col=IIf(GBuy, colorGreen, IIf(GSell, 
  colorRed, colorLightGrey)); > > > > //EMA-9 > > 
  MAbuy = Cross(C, EMA(C,9)); > > MAsell= Cross(EMA(C,9),C); > 
  > MAbuy = ExRem(MAbuy, MAsell); > > MAsell = ExRem(MAsell, 
  MAbuy); > > MA1 = C > EMA(C,9); > > MA11 = C < 
  EMA(C,9); > > MA_status=     WriteIf(MAbuy, "Buy", 
  WriteIf(MAsell, "Sell", WriteIf(MA1, > > "Bullish", WriteIf(MA11, 
  "Bearish","Zilch")))); > > MA_Col=IIf(MAbuy OR MA1, colorGreen, 
  IIf(MAsell OR MA11, colorRed, > > colorLightGrey)); > 
  > > > //EMA-20 > > MA2buy = Cross(C, EMA(C,20)); > 
  > MA2sell= Cross(EMA(C,20),C); > > MA2buy = ExRem(MA2buy, 
  MA2sell); > > MA2sell = ExRem(MA2sell, MA2buy); > > MA2 = C 
  > EMA(C,20); > > MA22 = C < EMA(C,20); > > 
  MA2_status=     WriteIf(MA2buy, "Buy", WriteIf(MA2sell, 
  "Sell", > > WriteIf(MA2, "Bullish", WriteIf(MA22, 
  "Bearish","Zilch")))); > > MA2_Col=IIf(MA2buy OR MA2, colorGreen, 
  IIf(MA2sell OR MA22, colorRed, > > colorLightGrey)); > 
  > > > //EMA-9 x 20 > > MA3buy = Cross(EMA(C,9), 
  EMA(C,20)); > > MA3sell= Cross(EMA(C,20),EMA(C,9)); > > 
  MA3buy = ExRem(MA3buy, MA3sell); > > MA3sell = ExRem(MA3sell, 
  MA3buy); > > MA3 = EMA(C,9) > EMA(C,20); > > MA33 = 
  EMA(C,9) < EMA(C,20); > > MA3_status=    
   WriteIf(MA3buy, "Buy", WriteIf(MA3sell, "Sell", > > 
  WriteIf(MA3, "Bullish", WriteIf(MA33, "Bearish","Zilch")))); > > 
  MA3_Col=IIf(MA3buy OR MA3, colorGreen, IIf(MA3sell OR MA33, colorRed, > 
  > colorLightGrey)); > > > > //Midterm Bullish or 
  Bearish > > mBull = C > EMA(C,50); > > mBear= C < 
  EMA(C,50); > > mt_status=     WriteIf(mBull, 
  "Bullish", WriteIf(mBear, "Bearish", "Zilch")); > > mt_Col=IIf(mBull, 
  colorGreen, IIf(mbear, colorRed, colorLightGrey)); > > > > 
  //Longterm Bullish or Bearish > > Bull = C > EMA(C,200); > 
  > Bear= C < EMA(C,200); > > lt_status=    
   WriteIf(Bull, "Bullish", WriteIf(Bear, "Bearish", "Zilch")); > 
  > lt_Col=IIf(Bull, colorGreen, IIf(bear, colorRed, 
  colorLightGrey)); > > > > //Long-term Price Trend > 
  > rc= C > EMA (C,50) AND C < EMA(C,200) AND EMA(C,50) < 
  EMA(C,200); > > ac=  C > EMA (C,50) AND C > EMA(C,200) AND 
  EMA(C,50) < EMA(C,200); > > bl= C > EMA (C,50) AND C > 
  EMA(C,200) AND EMA(C,50) > EMA(C,200); > > wr= C < EMA (C,50) 
  AND C > EMA(C,200) AND EMA(C,50) > EMA(C,200); > > ds= C < 
  EMA (C,50) AND C < EMA(C,200) AND EMA(C,50) > EMA(C,200); > > 
  br= C < EMA (C,50) AND C < EMA(C,200) AND EMA(C,50) < 
  EMA(C,200); > > > > ltp=WriteIf(rc, "RECOVERY", WriteIf(ac, 
  "ACCUMULATION", WriteIf(bl, > > "BULLISH", WriteIf(wr, 
  "WARNING",WriteIf(ds, > > "DISTRIBUTION",WriteIf(br, "BEARISH", 
  "Zilch")))))); > > ltp_col=IIf( rc, colorBlue, IIf( ac, colorGreen, 
  IIf(bl, > > colorDarkGreen, IIf(wr, colorOrange, IIf(ds, colorRed, 
  IIf(br, > > colorDarkRed, colorLightGrey )))))); > > > 
  > G=((O-Ref(L,-1))/Ref(L,-1))*100; > > 
  F=((C-Ref(C,-1))/Ref(C,-1))*100; > > > > //T-3 Delta > 
  > T3Day = T3(Close, 3); > > T5Day = T3(Close, 5); > > 
  Delta = T3Day - T5Day; > > > > > > 
  Filter=O<Ref(L,-1) AND C>Ref(C,-1)|C>Ref(O,-1) > > AND 
  L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3) > 
  > AND V>Ref(V,-1) AND V>(MA(Ref(V,-1),5)+(MA(Ref(V,-1),5)*0.3)) 
  AND > > MA(V,21)>50000; > > > > 
  Buy=Filter; > > > > AddColumn(V, "Volome", 1, IIf(V > 
  Ref(V,-1), colorGreen, colorRed),-1); > > 
  AddColumn(((V/EMA(Ref(V,-1),10)))*100, "VolSpike %", 1.2, IIf(V> > 
  > EMA(Ref(V,-1),10), colorBlue, colorRed),-1); > > 
  AddColumn(Delta, "Delta",1.2, IIf(delta < 0, colorRed, 
  colorGreen),-1); > > AddColumn(C, "Close", 1.2, IIf(C > Ref(C,-1), 
  colorGreen, colorRed),-1); > > AddColumn(G,"O Low%",1.2,-1); > 
  > AddColumn(F,"C High%",1.2,-1); > > 
  AddColumn(RSI(14),"RSI-14",1.2, IIf(RSI(14) > Ref(RSI(14),-1), > > 
  colorGreen, colorRed),-1); > > 
  AddColumn(ADX(10),"ADX-10",1.2,IIf(ADX(10) > Ref(ADX(10),-1), > > 
  colorGreen, colorRed),-1); > > AddTextColumn(bbk_status, "Breaks", 
  1.6, colorWhite, bbk_Col,-1); > > AddTextColumn(Tbuy_status, 
  "T3-Signal", 1.6, colorWhite, T_Col,-1); > > 
  AddTextColumn(Gbuy_status, "Guppy", 1.6, colorWhite, G_Col,-1); > > 
  AddTextColumn(MA_status, "EMA-9", 1.6, colorWhite, MA_Col,-1); > > 
  AddTextColumn(MA2_status, "EMA-20", 1.6, colorWhite, MA2_Col,-1); > > 
  AddTextColumn(MA3_status, "EMA-9x20", 1.6, colorWhite, MA3_Col,-1); > 
  > AddTextColumn(Ibuy_status, "RSI signal", 1.6, colorWhite, 
  I_Col,-1); > > AddTextColumn(adx_status, "Trend", 1.6, colorWhite, 
  adx_Col,-1); > > AddTextColumn(cop_status, "Coppock", 1.6, 
  colorWhite, cop_Col,-1); > > AddTextColumn(mt_status, "Mid Term", 1, 
  colorWhite, mt_Col); > > AddTextColumn(lt_status, "Long Term", 1, 
  colorWhite, lt_Col); > > //AddTextColumn(wad_status, "WAD", 1.6, 
  colorWhite, WAD_Col,-1); > > //AddTextColumn(mt_status, "EMA-50", 
  1.6, colorWhite, mt_Col,-1); > > //AddTextColumn(lt_status, 
  "EMA-200", 1.6, colorWhite, lt_Col,-1); > > AddTextColumn(ltp, 
  "Phase", 1.6, colorWhite, ltp_Col,-1); > > > > > > 
  _SECTION_END(); > > > > _SECTION_BEGIN("All in One EOD 
  Explorer"); > > //52 Week New High-New Low > > HI = High 
  > Ref(HHV(High,260),-1); > > LI = Low < 
  Ref(LLV(Low,260),-1); > > W_status=     WriteIf(HI, 
  "High", WriteIf(LI, "Low", "Neutral")); > > W_Col=IIf(HI, colorGreen, 
  IIf(LI, colorRed, colorLightGrey)); > > > > > > 
  //Price Volume Breakout > > HIV = C > Ref (C,-1) AND V > 
  (MA(V,50)*2); > > LIV = C < Ref (C,-1) AND V < 
  (MA(V,50)*2); > > V_status=     WriteIf(HIV, "Gainer", 
  WriteIf(LIV, "Loser", "Neutral")); > > V_Col=IIf(HIV, colorGreen, 
  IIf(LIV, colorRed, colorLightGrey)); > > > > > > 
  //50/200 Crosses > > BC= Cross(MA(C,50),MA(C,200)); > > BR= 
  Cross(MA(C,200),MA(C,50)); > > B_status=    
   WriteIf(BC, "Bullish", WriteIf(BR, "Bearish", "Neutral")); > > 
  B_Col=IIf(BC, colorGreen, IIf(BR, colorRed, colorLightGrey)); > 
  > > > //MACD Crosses > > MB= Cross (MACD(), 
  Signal()); > > MS = Cross( Signal(), MACD()); > > 
  MB_status=     WriteIf(MB, "Bullish", WriteIf(MS, "Bearish", 
  "Neutral")); > > MS_Col=IIf(MB, colorGreen, IIf(MS, colorRed, 
  colorLightGrey)); > > > > //RSI Status > > 
  r=RSI(14) < 70 AND Ref (RSI(14),-1) > 70 AND Ref (RSI(14),-2) > 
  70; > > r2= RSI(14) > 70 AND Ref (RSI(14),-1) < 70 AND Ref 
  (RSI(14),-2) < 70; > > r_status=     WriteIf(r, 
  "Declining", WriteIf(r2, "Improving", "Neutral")); > > r_Col=IIf(r, 
  colorGreen, IIf(r2, colorRed, colorLightGrey)); > > > > 
  //Bollinger Bands > > bb= C > BBandTop( C, 20, 2) AND Ref (C,-1) 
  < Ref(BBandTop( C, 20, 2),-1); > > bb1= C < BBandBot( C, 20, 2) 
  AND Ref (C,-1) > Ref(BBandBot( C, 20, 2),-1); > > bb_status=  
     WriteIf(BB, "AboveTop", WriteIf(r2, "BelowBottom", 
  "Neutral")); > > bb_Col=IIf(r, colorGreen, IIf(r2, colorRed, 
  colorLightGrey)); > > > > //Daily Acc/Dist Status > 
  > acc = AccDist() > Ref (AccDist(),-1); > > dist = AccDist() 
  < Ref (AccDist(),-1); > > ad_status=    
   WriteIf(acc, "Accumulation", WriteIf(dist, "Distribution", > > 
  "Neutral")); > > ad_Col=IIf(acc, colorGreen, IIf(dist, colorRed, 
  colorLightGrey)); > > > > //Midterm Bullish or 
  Bearish > > mBull = C > EMA(C,50); > > mBear= C < 
  EMA(C,50); > > mt_status=     WriteIf(mBull, 
  "Bullish", WriteIf(mBear, "Bearish", "Zilch")); > > mt_Col=IIf(mBull, 
  colorGreen, IIf(mbear, colorRed, colorLightGrey)); > > > > 
  //Longterm Bullish or Bearish > > Bull = C > MA(C,200); > 
  > Bear= C < MA(C,200); > > lt_status=    
   WriteIf(Bull, "Bullish", WriteIf(Bear, "Bearish", "Neutral")); > 
  > lt_Col=IIf(Bull, colorGreen, IIf(bear, colorRed, 
  colorLightGrey)); > > > > //Median Price > > 
  mp=(H+L)/2; > > > > Filter = HI OR LI OR HIV OR LIV OR BC OR 
  BR OR MB OR MS OR acc OR dist > > OR bull OR bear; > 
  > > > AddColumn(C, "Close", 1.2, IIf(C > Ref(C,-1), colorGreen, 
  colorRed)); > > AddColumn(ROC(C,1), "ROC Price", 1.2, IIf(ROC(C,1) 
  > 0, colorGreen, > > colorRed)); > > AddColumn(mp, 
  "Median Price", 1.2, IIf(mp > Ref(mp,-1), colorGreen, > > 
  colorRed)); > > AddColumn(V, "Volume", 1, IIf(V > Ref(V,-1), 
  colorGreen, colorRed)); > > AddColumn(ROC(V,1), "ROC Volume", 1.2, 
  IIf(ROC(V,1) > 0, colorGreen, > > colorRed)); > > 
  AddTextColumn(V_status, "Price Volume Breakout", 1, colorWhite, 
  V_Col); > > AddTextColumn(ad_status, "Acc/Dist", 1, colorWhite, 
  ad_Col); > > AddColumn(NVI(), "NVI", 1, IIf(NVI() > Ref(NVI(),-1), 
  colorGreen, > > colorRed)); > > 
  AddColumn(MFI(21),"MFI-21",1.2, IIf(MFI(21) > Ref(MFI(21),-1), > > 
  colorGreen, colorRed)); > > AddColumn(RSI(14),"RSI-14",1.2, 
  IIf(RSI(14) > Ref(RSI(14),-1), > > colorGreen, colorRed)); > 
  > AddColumn(ADX(14),"ADX-14",1.2,IIf(ADX(14) > Ref(ADX(14),-1), > 
  > colorGreen, colorRed)); > > AddTextColumn(bb_status, "BBand", 1, 
  colorWhite, bb_Col); > > AddTextColumn(MB_status, "MACDX", 1, 
  colorWhite, MS_Col); > > AddTextColumn(W_status, "52-Week", 1, 
  colorWhite, W_Col); > > AddTextColumn(B_status, "50/200", 1, 
  colorWhite, B_Col); > > AddTextColumn(mt_status, "Mid Term", 1, 
  colorWhite, mt_Col); > > AddTextColumn(lt_status, "Long Term", 1, 
  colorWhite, lt_Col); > > _SECTION_END(); > > > > 
  Buy = Cover =Cross( MACD(), 0 ); > > Sell = Short =Cross( 0, MACD() 
  ); > > > > Filter = Cross( MACD(), 0 ); > > > 
  > Buy = ExRem(Buy,Sell); > > Sell = ExRem(Sell,Buy); > 
  > > > a=EMA(C,30)-EMA(C,200); > > b=EMA(a,20); > 
  > > > > > Buy = Cross( a,b ); > > Sell = Cross( 
  b,a ); > > //Short = Sell; > > //Cover = Buy; > 
  > > > AlertIf( Buy, "", "MACD BUY", 1,1+2 ); > > > 
  > AlertIf( Sell, "", "MACD SELL", 2 ,1+2); > > > > --- 
  End forwarded message --- > > > > > > > > 
  ------------------------------------ > > > > Please note 
  that this group is for discussion between users only. > > > 
  > To get support from AmiBroker please send an e-mail directly to > 
  > SUPPORT {at} amibroker.com > > > > For NEW RELEASE 
  ANNOUNCEMENTS and other news always check DEVLOG: > > 
  http://www.amibroker.com/devlog/ > > > > For other support 
  material please check also: > > 
  http://www.amibroker.com/support.html > > Yahoo! Groups Links > 
  > > > > > > > > > 
  ------------------------------------------------------------------------ > 
  > > > > > No virus found in this incoming 
  message. > > Checked by AVG - http://www.avg.com > > 
  Version: 8.0.169 / Virus Database: 270.6.15/1648 - Release Date: 9/2/2008 5:29 
  PM > >
  regards, 
  vinod  shree 
  balaji enterprises  9860287788
  
  
    
    
      ![Ebay]()  |     
__._,_.___
  
Please note that this group is for discussion between users only. 
 
To get support from AmiBroker please send an e-mail directly to  
SUPPORT {at} amibroker.com 
 
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: 
http://www.amibroker.com/devlog/ 
 
For other support material please check also: 
http://www.amibroker.com/support.html 
  
     
    
 
      
   
__,_._,___
 |