Pathfinder Trading System

Viewing 15 posts - 466 through 480 (of 1,835 total)
  • Author
    Posts
  • #18588 quote
    Pere
    Participant
    Veteran

    Hi wp01, Jimbob, dajvop,

    you all are right: the trade started with 11.190,8€ and finished with 11.248,8€, that makes a loss of 58€. And yes, I am using the final V6, that means, each month splitted in two parts, and did not change anything.

    But what I don’t understand is why, even if the graphic shows that the system only traded 1 contract in short (histogram in red), the list multiplies the given values by 5 (55.954€ and 56.244€ respectively)!

    See graphics attached.

    Regards

    #18593 quote
    Alco
    Participant
    Senior

    Hi Petrus,

    You are trading with dax €5 mini. So 1 contract stands for €5.

    Most of us are trading with Dax €1 mini.

    #18599 quote
    Pere
    Participant
    Veteran

    Oh, thank you Alco!!!

    Sometimes such things are not so obvious for me!

    Regards

    #18609 quote
    Alco
    Participant
    Senior

    Hi guys,

    I have changed the codes ftse v4 to v6.

    // Pathfinder Trading System based on ProRealTime 10.2
    // Breakout system triggered by previous daily, weekly and monthly high/low crossings with smart position management
    // Version 6
    // Instrument: DAX mini 4H, 9-21 CET, 2 points spread, account size 10.000 Euro, from August 2010
    
    // ProOrder code parameter
    DEFPARAM CUMULATEORDERS = true  // cumulate orders if not turned off
    DEFPARAM PRELOADBARS = 10000
    
    // define intraday trading window
    ONCE startTime = 90000
    ONCE endTime = 210000
    
    // define instrument signalline with help of multiple smoothed averages
    ONCE periodFirstMA = 5
    ONCE periodSecondMA = 10
    ONCE periodThirdMA = 7
    
    // define filter parameter
    ONCE periodLongMA = 200
    ONCE periodShortMA = 10
    
    // define position and money management parameter
    ONCE positionSize = 1
    
    Capital = 10000
    Risk = 5 // in %
    equity = Capital + StrategyProfit
    maxRisk = round(equity * Risk / 100)
    
    ONCE stopLossLong = 5.5 // in %
    ONCE stopLossShort = 2.5 // in %
    ONCE takeProfitLong = 3 // in %
    ONCE takeProfitShort = 2 // in %
    
    maxPositionSizeLong = MAX(15, abs(round(maxRisk / (close * stopLossLong / 100) / PointValue) * pipsize))
    maxPositionSizeShort = MAX(10, abs(round(maxRisk / (close * stopLossShort / 100) / PointValue) * pipsize))
    
    ONCE trailingStartLong = 2 // in %
    ONCE trailingStartShort = 0.75 // in %
    ONCE trailingStepLong = 0.2 // in %
    ONCE trailingStepShort = 0.4 // in %
    
    ONCE maxCandlesLongWithProfit = 25  // take long profit latest after 16 candles
    ONCE maxCandlesShortWithProfit = 13  // take short profit latest after 15 candles
    ONCE maxCandlesLongWithoutProfit = 40  // limit long loss latest after 30 candles
    ONCE maxCandlesShortWithoutProfit = 25  // limit short loss latest after 12 candles
    
    // define saisonal position multiplier for each month 1-15 / 16-31 (>0 - long / <0 - short / 0 no trade)
    ONCE January1 = 3
    ONCE January2 = 0
    ONCE February1 = 3
    ONCE February2 = 3
    ONCE March1 = 3
    ONCE March2 = 2
    ONCE April1 = 1
    ONCE April2 = 3
    ONCE May1 = 1
    ONCE May2 = 1
    ONCE June1 = 2
    ONCE June2 = 2
    ONCE July1 = 3
    ONCE July2 = 1
    ONCE August1 = 1
    ONCE August2 = 1
    ONCE September1 = 3
    ONCE September2 = 0
    ONCE October1 = 3
    ONCE October2 = 2
    ONCE November1 = 1
    ONCE November2 = 3
    ONCE December1 = 3
    ONCE December2 = 2
    
    // calculate daily high/low (include sunday values if available)
    dailyHigh = DHigh(1)
    dailyLow = DLow(1)
    
    // calculate weekly high/low
    If DayOfWeek < DayOfWeek[1] then
    weeklyHigh = Highest[BarIndex - lastWeekBarIndex](dailyHigh)
    lastWeekBarIndex = BarIndex
    ENDIF
    
    // calculate monthly high/low
    If Month[1] <> Month[2] then
    //If Month <> Month[1] then
    monthlyHigh = Highest[BarIndex - lastMonthBarIndex](dailyHigh)
    monthlyLow = Lowest[BarIndex - lastMonthBarIndex](dailyLow)
    lastMonthBarIndex = BarIndex
    ENDIF
    
    // calculate instrument signalline with multiple smoothed averages
    firstMA = WilderAverage[periodFirstMA](close)
    secondMA = TimeSeriesAverage[periodSecondMA](firstMA)
    signalline = TimeSeriesAverage[periodThirdMA](secondMA)
    
    // save position before trading window is open
    If Time < startTime then
    startPositionLong = COUNTOFLONGSHARES
    startPositionShort = COUNTOFSHORTSHARES
    EndIF
    
    // trade only in defined trading window
    IF Time >= startTime AND Time <= endTime THEN
    
    // set saisonal multiplier
    currentDayOfTheMonth = Date - ((CurrentYear * 10000) + CurrentMonth * 100)
    midOfMonth = 15
    IF CurrentMonth = 1 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = January1
    ELSE
    saisonalPatternMultiplier = January2
    ENDIF
    ELSIF CurrentMonth = 2 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = February1
    ELSE
    saisonalPatternMultiplier = February2
    ENDIF
    ELSIF CurrentMonth = 3 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = March1
    ELSE
    saisonalPatternMultiplier = March2
    ENDIF
    ELSIF CurrentMonth = 4 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = April1
    ELSE
    saisonalPatternMultiplier = April2
    ENDIF
    ELSIF CurrentMonth = 5 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = May1
    ELSE
    saisonalPatternMultiplier = May2
    ENDIF
    ELSIF CurrentMonth = 6 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = June1
    ELSE
    saisonalPatternMultiplier = June2
    ENDIF
    ELSIF CurrentMonth = 7 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = July1
    ELSE
    saisonalPatternMultiplier = July2
    ENDIF
    ELSIF CurrentMonth = 8 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = August1
    ELSE
    saisonalPatternMultiplier = August2
    ENDIF
    ELSIF CurrentMonth = 9 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = September1
    ELSE
    saisonalPatternMultiplier = September2
    ENDIF
    ELSIF CurrentMonth = 10 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = October1
    ELSE
    saisonalPatternMultiplier = October2
    ENDIF
    ELSIF CurrentMonth = 11 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = November1
    ELSE
    saisonalPatternMultiplier = November2
    ENDIF
    ELSIF CurrentMonth = 12 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = December1
    ELSE
    saisonalPatternMultiplier = December2
    ENDIF
    ENDIF
    
    // define trading filters
    // 1. use fast and slow averages as filter because not every breakout is profitable
    f1 = close > Average[periodLongMA](close)
    f2 = close < Average[periodLongMA](close)
    f3 = close > Average[periodShortMA](close)
    
    // 2. check if position already reduced in trading window as additonal filter criteria
    alreadyReducedLongPosition = COUNTOFLONGSHARES  < startPositionLong
    alreadyReducedShortPosition = COUNTOFSHORTSHARES < startPositionShort
    
    // long position conditions
    l1 = signalline CROSSES OVER monthlyHigh
    l2 = signalline CROSSES OVER weeklyHigh
    l3 = signalline CROSSES OVER dailyHigh
    l4 = signalline CROSSES OVER monthlyLow
    
    // short position conditions
    s1 = signalline CROSSES UNDER monthlyHigh
    s2 = signalline CROSSES UNDER dailyLow
    
    // long entry with order cumulation
    IF ( (l1 OR l4 OR l2 OR (l3 AND f2)) AND NOT alreadyReducedLongPosition) THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier > 0 THEN
    IF (COUNTOFPOSITION + (positionSize * saisonalPatternMultiplier)) <= maxPositionSizeLong THEN
    BUY positionSize * saisonalPatternMultiplier CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    BUY positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossLong
    takeProfit = takeProfitLong
    
    ENDIF
    
    // short entry without order cumulation
    IF NOT SHORTONMARKET AND ( (s1 AND f3) OR  (s2 AND f1) ) AND NOT alreadyReducedShortPosition THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier < 0 THEN
    IF (COUNTOFPOSITION + (positionSize * ABS(saisonalPatternMultiplier))) <= maxPositionSizeShort THEN
    SELLSHORT positionSize * ABS(saisonalPatternMultiplier) CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    SELLSHORT positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossShort
    takeProfit = takeProfitShort
    
    ENDIF
    
    // stop and profit management
    posProfit = (((close - positionprice) * pointvalue) * countofposition) / pipsize
    
    numberCandles = (BarIndex - TradeIndex)
    
    m1 = posProfit > 0 AND numberCandles >= maxCandlesLongWithProfit
    m2 = posProfit > 0 AND numberCandles >= maxCandlesShortWithProfit
    m3 = posProfit < 0 AND numberCandles >= maxCandlesLongWithoutProfit
    m4 = posProfit < 0 AND numberCandles >= maxCandlesShortWithoutProfit
    
    // take profit after max candles
    IF LONGONMARKET AND (m1 OR m3) THEN
    SELL AT MARKET
    ENDIF
    IF SHORTONMARKET AND (m2 OR m4) THEN
    EXITSHORT AT MARKET
    ENDIF
    
    // trailing stop function (convert % to pips)
    trailingStartLongInPoints = tradeprice(1) * trailingStartLong / 100
    trailingStartShortInPoints = tradeprice(1) * trailingStartShort / 100
    trailingStepLongInPoints = tradeprice(1) * trailingStepLong / 100
    trailingStepShortInPoints = tradeprice(1) * trailingStepShort / 100
    
    // reset the stoploss value
    IF NOT ONMARKET THEN
    newSL = 0
    ENDIF
    
    // manage long positions
    IF LONGONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND close - tradeprice(1) >= trailingStartLongInPoints * pipsize THEN
    newSL = tradeprice(1) + trailingStepLongInPoints * pipsize
    stopLoss = stopLossLong * 0.1
    takeProfit = takeProfitLong * 2
    ENDIF
    // next moves
    IF newSL > 0 AND close - newSL >= trailingStepLongInPoints * pipsize THEN
    newSL = newSL + trailingStepLongInPoints * pipsize
    ENDIF
    ENDIF
    
    // manage short positions
    IF SHORTONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND tradeprice(1) - close >= trailingStartShortInPoints * pipsize THEN
    newSL = tradeprice(1) - trailingStepShortInPoints * pipsize
    ENDIF
    // next moves
    IF newSL > 0 AND newSL - close >= trailingStepShortInPoints * pipsize THEN
    newSL = newSL - trailingStepShortInPoints * pipsize
    ENDIF
    ENDIF
    
    // stop order to exit the positions
    IF newSL > 0 THEN
    IF LONGONMARKET THEN
    SELL AT newSL STOP
    ENDIF
    IF SHORTONMARKET THEN
    EXITSHORT AT newSL STOP
    ENDIF
    ENDIF
    
    // superordinate stop and take profit
    SET STOP %LOSS stopLoss
    SET TARGET %PROFIT takeProfit
    
    ENDIF
    

    See the difference in  .jpg file.
    Less gain but lower drawdown. I’ve copied the seasonal booster from dax v6.

    Have fun 🙂

    wp01 and Reiner thanked this post
    #18612 quote
    Alco
    Participant
    Senior

    Dow 4h v6

    // Pathfinder Trading System based on ProRealTime 10.2
    // Breakout system triggered by previous daily, weekly and monthly high/low crossings with smart position management
    // Version 6
    // Instrument: DAX mini 4H, 9-21 CET, 2 points spread, account size 10.000 Euro, from August 2010
    
    // ProOrder code parameter
    DEFPARAM CUMULATEORDERS = true  // cumulate orders if not turned off
    DEFPARAM PRELOADBARS = 10000
    
    // define intraday trading window
    ONCE startTime = 90000
    ONCE endTime = 210000
    
    // define instrument signalline with help of multiple smoothed averages
    ONCE periodFirstMA = 5
    ONCE periodSecondMA = 10
    ONCE periodThirdMA = 7
    
    // define filter parameter
    ONCE periodLongMA = 160
    ONCE periodShortMA = 5
    
    // define position and money management parameter
    ONCE positionSize = 1
    
    Capital = 10000
    Risk = 5 // in %
    equity = Capital + StrategyProfit
    maxRisk = round(equity * Risk / 100)
    
    ONCE stopLossLong = 5.5 // in %
    ONCE stopLossShort = 2.25 // in %
    ONCE takeProfitLong = 1.75 // in %
    ONCE takeProfitShort = .75 // in %
    
    maxPositionSizeLong = MAX(10, abs(round(maxRisk / (close * stopLossLong / 100) / PointValue) * pipsize))
    maxPositionSizeShort = MAX(10, abs(round(maxRisk / (close * stopLossShort / 100) / PointValue) * pipsize))
    
    ONCE trailingStartLong = 1.25 // in %
    ONCE trailingStartShort = 0.75 // in %
    ONCE trailingStepLong = 0.2 // in %
    ONCE trailingStepShort = 0.2 // in %
    
    ONCE maxCandlesLongWithProfit = 17  // take long profit latest after 16 candles
    ONCE maxCandlesShortWithProfit = 4  // take short profit latest after 15 candles
    ONCE maxCandlesLongWithoutProfit = 40  // limit long loss latest after 30 candles
    ONCE maxCandlesShortWithoutProfit = 11  // limit short loss latest after 12 candles
    
    // define saisonal position multiplier for each month 1-15 / 16-31 (>0 - long / <0 - short / 0 no trade)
    ONCE January1 = 2
    ONCE January2 = 1
    ONCE February1 = 2
    ONCE February2 = 2
    ONCE March1 = 2
    ONCE March2 = 2
    ONCE April1 = 1
    ONCE April2 = 2
    ONCE May1 = 1
    ONCE May2 = 1
    ONCE June1 = 2
    ONCE June2 = 2
    ONCE July1 = 2
    ONCE July2 = 1
    ONCE August1 = 1
    ONCE August2 = 1
    ONCE September1 = 2
    ONCE September2 = 1
    ONCE October1 = 2
    ONCE October2 = 2
    ONCE November1 = 1
    ONCE November2 = 2
    ONCE December1 = 2
    ONCE December2 = 2
    
    // calculate daily high/low (include sunday values if available)
    dailyHigh = DHigh(1)
    dailyLow = DLow(1)
    
    // calculate weekly high/low
    If DayOfWeek < DayOfWeek[1] then
    weeklyHigh = Highest[BarIndex - lastWeekBarIndex](dailyHigh)
    lastWeekBarIndex = BarIndex
    ENDIF
    
    // calculate monthly high/low
    If Month[1] <> Month[2] then
    //If Month <> Month[1] then
    monthlyHigh = Highest[BarIndex - lastMonthBarIndex](dailyHigh)
    monthlyLow = Lowest[BarIndex - lastMonthBarIndex](dailyLow)
    lastMonthBarIndex = BarIndex
    ENDIF
    
    // calculate instrument signalline with multiple smoothed averages
    firstMA = WilderAverage[periodFirstMA](close)
    secondMA = TimeSeriesAverage[periodSecondMA](firstMA)
    signalline = TimeSeriesAverage[periodThirdMA](secondMA)
    
    // save position before trading window is open
    If Time < startTime then
    startPositionLong = COUNTOFLONGSHARES
    startPositionShort = COUNTOFSHORTSHARES
    EndIF
    
    // trade only in defined trading window
    IF Time >= startTime AND Time <= endTime THEN
    
    // set saisonal multiplier
    currentDayOfTheMonth = Date - ((CurrentYear * 10000) + CurrentMonth * 100)
    midOfMonth = 15
    IF CurrentMonth = 1 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = January1
    ELSE
    saisonalPatternMultiplier = January2
    ENDIF
    ELSIF CurrentMonth = 2 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = February1
    ELSE
    saisonalPatternMultiplier = February2
    ENDIF
    ELSIF CurrentMonth = 3 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = March1
    ELSE
    saisonalPatternMultiplier = March2
    ENDIF
    ELSIF CurrentMonth = 4 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = April1
    ELSE
    saisonalPatternMultiplier = April2
    ENDIF
    ELSIF CurrentMonth = 5 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = May1
    ELSE
    saisonalPatternMultiplier = May2
    ENDIF
    ELSIF CurrentMonth = 6 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = June1
    ELSE
    saisonalPatternMultiplier = June2
    ENDIF
    ELSIF CurrentMonth = 7 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = July1
    ELSE
    saisonalPatternMultiplier = July2
    ENDIF
    ELSIF CurrentMonth = 8 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = August1
    ELSE
    saisonalPatternMultiplier = August2
    ENDIF
    ELSIF CurrentMonth = 9 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = September1
    ELSE
    saisonalPatternMultiplier = September2
    ENDIF
    ELSIF CurrentMonth = 10 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = October1
    ELSE
    saisonalPatternMultiplier = October2
    ENDIF
    ELSIF CurrentMonth = 11 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = November1
    ELSE
    saisonalPatternMultiplier = November2
    ENDIF
    ELSIF CurrentMonth = 12 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = December1
    ELSE
    saisonalPatternMultiplier = December2
    ENDIF
    ENDIF
    
    // define trading filters
    // 1. use fast and slow averages as filter because not every breakout is profitable
    f1 = close > Average[periodLongMA](close)
    f2 = close < Average[periodLongMA](close)
    f3 = close > Average[periodShortMA](close)
    
    // 2. check if position already reduced in trading window as additonal filter criteria
    alreadyReducedLongPosition = COUNTOFLONGSHARES  < startPositionLong
    alreadyReducedShortPosition = COUNTOFSHORTSHARES < startPositionShort
    
    // long position conditions
    l1 = signalline CROSSES OVER monthlyHigh
    l2 = signalline CROSSES OVER weeklyHigh
    l3 = signalline CROSSES OVER dailyHigh
    l4 = signalline CROSSES OVER monthlyLow
    
    // short position conditions
    s1 = signalline CROSSES UNDER monthlyHigh
    s2 = signalline CROSSES UNDER dailyLow
    
    // long entry with order cumulation
    IF ( (l1 OR l4 OR l2 OR (l3 AND f2)) AND NOT alreadyReducedLongPosition) THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier > 0 THEN
    IF (COUNTOFPOSITION + (positionSize * saisonalPatternMultiplier)) <= maxPositionSizeLong THEN
    BUY positionSize * saisonalPatternMultiplier CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    BUY positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossLong
    takeProfit = takeProfitLong
    
    ENDIF
    
    // short entry without order cumulation
    IF NOT SHORTONMARKET AND ( (s1 AND f3) OR  (s2 AND f1) ) AND NOT alreadyReducedShortPosition THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier < 0 THEN
    IF (COUNTOFPOSITION + (positionSize * ABS(saisonalPatternMultiplier))) <= maxPositionSizeShort THEN
    SELLSHORT positionSize * ABS(saisonalPatternMultiplier) CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    SELLSHORT positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossShort
    takeProfit = takeProfitShort
    
    ENDIF
    
    // stop and profit management
    posProfit = (((close - positionprice) * pointvalue) * countofposition) / pipsize
    
    numberCandles = (BarIndex - TradeIndex)
    
    m1 = posProfit > 0 AND numberCandles >= maxCandlesLongWithProfit
    m2 = posProfit > 0 AND numberCandles >= maxCandlesShortWithProfit
    m3 = posProfit < 0 AND numberCandles >= maxCandlesLongWithoutProfit
    m4 = posProfit < 0 AND numberCandles >= maxCandlesShortWithoutProfit
    
    // take profit after max candles
    IF LONGONMARKET AND (m1 OR m3) THEN
    SELL AT MARKET
    ENDIF
    IF SHORTONMARKET AND (m2 OR m4) THEN
    EXITSHORT AT MARKET
    ENDIF
    
    // trailing stop function (convert % to pips)
    trailingStartLongInPoints = tradeprice(1) * trailingStartLong / 100
    trailingStartShortInPoints = tradeprice(1) * trailingStartShort / 100
    trailingStepLongInPoints = tradeprice(1) * trailingStepLong / 100
    trailingStepShortInPoints = tradeprice(1) * trailingStepShort / 100
    
    // reset the stoploss value
    IF NOT ONMARKET THEN
    newSL = 0
    ENDIF
    
    // manage long positions
    IF LONGONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND close - tradeprice(1) >= trailingStartLongInPoints * pipsize THEN
    newSL = tradeprice(1) + trailingStepLongInPoints * pipsize
    stopLoss = stopLossLong * 0.1
    takeProfit = takeProfitLong * 2
    ENDIF
    // next moves
    IF newSL > 0 AND close - newSL >= trailingStepLongInPoints * pipsize THEN
    newSL = newSL + trailingStepLongInPoints * pipsize
    ENDIF
    ENDIF
    
    // manage short positions
    IF SHORTONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND tradeprice(1) - close >= trailingStartShortInPoints * pipsize THEN
    newSL = tradeprice(1) - trailingStepShortInPoints * pipsize
    ENDIF
    // next moves
    IF newSL > 0 AND newSL - close >= trailingStepShortInPoints * pipsize THEN
    newSL = newSL - trailingStepShortInPoints * pipsize
    ENDIF
    ENDIF
    
    // stop order to exit the positions
    IF newSL > 0 THEN
    IF LONGONMARKET THEN
    SELL AT newSL STOP
    ENDIF
    IF SHORTONMARKET THEN
    EXITSHORT AT newSL STOP
    ENDIF
    ENDIF
    
    // superordinate stop and take profit
    SET STOP %LOSS stopLoss
    SET TARGET %PROFIT takeProfit
    
    ENDIF
    
    wp01, Pfeiler and Reiner thanked this post
    #18621 quote
    wp01
    Participant
    Master

    Hi Alco,

    I’m not sure if you noticed but you mentionede that you updated FTSE mini from V4 to V6, but Reiner already released V5B2.

    You can find the itf. at page 7.

    Regards,

    Patrick

    #18624 quote
    Alco
    Participant
    Senior

    Oh I’m sorry guys! didn’t saw it in previous posts. My bad.

    #18699 quote
    hakke
    Participant
    Average

    Hi,

    it would be nice with a “summary”-post with what version of different systems is the latest for each instrument (and either attached or specify which page they are found on). I follow this thread close but I find it hard to find what version is the last one for each. Just a thought.

    #18702 quote
    Aloysius
    Participant
    Veteran

    Hi guys,

    I have worked on the Nikkei (Japan 225)and here is the result, quite good. The time is from 01 AM to 22h, and the spread is 8 by IG.

    Edit: the picture does not appear… so result is about 43000 $ from 2010 to now, with a drawdown of 4300.

    // Pathfinder Trading System based on ProRealTime 10.2
    // Breakout system triggered by previous daily, weekly and monthly high/low crossings with smart position management
    // Version 6
    // Instrument: Japan 225 mini 4H, 01-22h CET, 8 points spread, account size 10.000 Euro, from August 2010
    
    // ProOrder code parameter
    DEFPARAM CUMULATEORDERS = true // cumulate orders if not turned off
    DEFPARAM PRELOADBARS = 10000
    
    // define intraday trading window
    ONCE startTime = 010000
    ONCE endTime = 220000
    
    // define instrument signalline with help of multiple smoothed averages
    ONCE periodFirstMA = 5
    ONCE periodSecondMA = 10
    ONCE periodThirdMA = 3
    
    // define filter parameter
    ONCE periodLongMA = 300
    ONCE periodShortMA = 50
    
    // define position and money management parameter
    ONCE positionSize = 1
    
    Capital = 10000
    Risk = 5 // in %
    equity = Capital + StrategyProfit
    maxRisk = round(equity * Risk / 100)
    
    ONCE stopLossLong = 2//2//4//5.5 // in %
    ONCE stopLossShort = 2.5//3.25 // in %
    ONCE takeProfitLong = 1.5//1.5//3.25 // in %
    ONCE takeProfitShort = 6//3.25 // in %
    
    maxPositionSizeLong = MAX(15, abs(round(maxRisk / (close * stopLossLong / 100) / PointValue) * pipsize))
    maxPositionSizeShort = MAX(15, abs(round(maxRisk / (close * stopLossShort / 100) / PointValue) * pipsize))
    
    ONCE trailingStartLong = 1//1//2 // in %
    ONCE trailingStartShort = 1.25//0.75 // in %
    ONCE trailingStepLong = 0.4//0.6//0.2 // in %
    ONCE trailingStepShort = 1//0.4 // in %
    
    ONCE maxCandlesLongWithProfit = 16 // take long profit latest after 16 candles
    ONCE maxCandlesShortWithProfit = 15 // take short profit latest after 15 candles
    ONCE maxCandlesLongWithoutProfit = 20 // limit long loss latest after 30 candles
    ONCE maxCandlesShortWithoutProfit = 12 // limit short loss latest after 12 candles
    
    // define saisonal position multiplier for each month 1-15 / 16-31 (>0 - long / <0 - short / 0 no trade)
    ONCE January1 = 0//3
    ONCE January2 = 3//0
    ONCE February1 = 0//3
    ONCE February2 = 0//3
    ONCE March1 = 3//3
    ONCE March2 = 3//2//2
    ONCE April1 = 3//2
    ONCE April2 = 3//2//3
    ONCE May1 = 0//0
    ONCE May2 = 3//3
    ONCE June1 = 1//0//2
    ONCE June2 = 3//2
    ONCE July1 = 3//3
    ONCE July2 = 1//1
    ONCE August1 = 0//3
    ONCE August2 = 0//0
    ONCE September1 = 0//0//3
    ONCE September2 = 0//3//0
    ONCE October1 = 3//1//3
    ONCE October2 = 3//3//2
    ONCE November1 = 3//3
    ONCE November2 = 3//3//3
    ONCE December1 = 3//3
    ONCE December2 = 3//2
    
    // calculate daily high/low (include sunday values if available)
    dailyHigh = DHigh(1)
    dailyLow = DLow(1)
    
    // calculate weekly high/low
    If DayOfWeek < DayOfWeek[1] then
    weeklyHigh = Highest[BarIndex - lastWeekBarIndex](dailyHigh)
    lastWeekBarIndex = BarIndex
    ENDIF
    
    // calculate monthly high/low
    If Month[1] <> Month[2] then
    //If Month <> Month[1] then
    monthlyHigh = Highest[BarIndex - lastMonthBarIndex](dailyHigh)
    monthlyLow = Lowest[BarIndex - lastMonthBarIndex](dailyLow)
    lastMonthBarIndex = BarIndex
    ENDIF
    
    // calculate instrument signalline with multiple smoothed averages
    firstMA = WilderAverage[periodFirstMA](close)
    secondMA = TimeSeriesAverage[periodSecondMA](firstMA)
    signalline = TimeSeriesAverage[periodThirdMA](secondMA)
    
    // save position before trading window is open
    If Time < startTime then
    startPositionLong = COUNTOFLONGSHARES
    startPositionShort = COUNTOFSHORTSHARES
    EndIF
    
    // trade only in defined trading window
    IF Time >= startTime AND Time <= endTime THEN
    
    // set saisonal multiplier
    currentDayOfTheMonth = Date - ((CurrentYear * 10000) + CurrentMonth * 100)
    midOfMonth = 15
    IF CurrentMonth = 1 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = January1
    ELSE
    saisonalPatternMultiplier = January2
    ENDIF
    ELSIF CurrentMonth = 2 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = February1
    ELSE
    saisonalPatternMultiplier = February2
    ENDIF
    ELSIF CurrentMonth = 3 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = March1
    ELSE
    saisonalPatternMultiplier = March2
    ENDIF
    ELSIF CurrentMonth = 4 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = April1
    ELSE
    saisonalPatternMultiplier = April2
    ENDIF
    ELSIF CurrentMonth = 5 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = May1
    ELSE
    saisonalPatternMultiplier = May2
    ENDIF
    ELSIF CurrentMonth = 6 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = June1
    ELSE
    saisonalPatternMultiplier = June2
    ENDIF
    ELSIF CurrentMonth = 7 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = July1
    ELSE
    saisonalPatternMultiplier = July2
    ENDIF
    ELSIF CurrentMonth = 8 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = August1
    ELSE
    saisonalPatternMultiplier = August2
    ENDIF
    ELSIF CurrentMonth = 9 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = September1
    ELSE
    saisonalPatternMultiplier = September2
    ENDIF
    ELSIF CurrentMonth = 10 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = October1
    ELSE
    saisonalPatternMultiplier = October2
    ENDIF
    ELSIF CurrentMonth = 11 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = November1
    ELSE
    saisonalPatternMultiplier = November2
    ENDIF
    ELSIF CurrentMonth = 12 THEN
    IF currentDayOfTheMonth <= midOfMonth THEN
    saisonalPatternMultiplier = December1
    ELSE
    saisonalPatternMultiplier = December2
    ENDIF
    ENDIF
    
    // define trading filters
    // 1. use fast and slow averages as filter because not every breakout is profitable
    f1 = close > Average[periodLongMA](close)
    f2 = close < Average[periodLongMA](close)
    f3 = close > Average[periodShortMA](close)
    
    // 2. check if position already reduced in trading window as additonal filter criteria
    alreadyReducedLongPosition = COUNTOFLONGSHARES < startPositionLong
    alreadyReducedShortPosition = COUNTOFSHORTSHARES < startPositionShort
    
    // long position conditions
    l1 = signalline CROSSES OVER monthlyHigh
    l2 = signalline CROSSES OVER weeklyHigh
    l3 = signalline CROSSES OVER dailyHigh
    l4 = signalline CROSSES OVER monthlyLow
    
    // short position conditions
    s1 = signalline CROSSES UNDER monthlyHigh
    s2 = signalline CROSSES UNDER dailyLow
    
    // long entry with order cumulation
    IF ( (l1 OR l4 OR l2 OR (l3 AND f2)) AND NOT alreadyReducedLongPosition) THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier > 0 THEN
    IF (COUNTOFPOSITION + (positionSize * saisonalPatternMultiplier)) <= maxPositionSizeLong THEN
    BUY positionSize * saisonalPatternMultiplier CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    BUY positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossLong
    takeProfit = takeProfitLong
    
    ENDIF
    
    // short entry without order cumulation
    IF NOT SHORTONMARKET AND ( (s1 AND f3) OR (s2 AND f1) ) AND NOT alreadyReducedShortPosition THEN
    
    // check saisonal booster setup and max position size
    IF saisonalPatternMultiplier < 0 THEN
    IF (COUNTOFPOSITION + (positionSize * ABS(saisonalPatternMultiplier))) <= maxPositionSizeShort THEN
    SELLSHORT positionSize * ABS(saisonalPatternMultiplier) CONTRACT AT MARKET
    ENDIF
    ELSIF saisonalPatternMultiplier <> 0 THEN
    IF (COUNTOFPOSITION + positionSize) <= maxPositionSizeLong THEN
    SELLSHORT positionSize CONTRACT AT MARKET
    ENDIF
    ENDIF
    
    stopLoss = stopLossShort
    takeProfit = takeProfitShort
    
    ENDIF
    
    // stop and profit management
    posProfit = (((close - positionprice) * pointvalue) * countofposition) / pipsize
    
    numberCandles = (BarIndex - TradeIndex)
    
    m1 = posProfit > 0 AND numberCandles >= maxCandlesLongWithProfit
    m2 = posProfit > 0 AND numberCandles >= maxCandlesShortWithProfit
    m3 = posProfit < 0 AND numberCandles >= maxCandlesLongWithoutProfit
    m4 = posProfit < 0 AND numberCandles >= maxCandlesShortWithoutProfit
    
    // take profit after max candles
    IF LONGONMARKET AND (m1 OR m3) THEN
    SELL AT MARKET
    ENDIF
    IF SHORTONMARKET AND (m2 OR m4) THEN
    EXITSHORT AT MARKET
    ENDIF
    
    // trailing stop function (convert % to pips)
    trailingStartLongInPoints = tradeprice(1) * trailingStartLong / 100
    trailingStartShortInPoints = tradeprice(1) * trailingStartShort / 100
    trailingStepLongInPoints = tradeprice(1) * trailingStepLong / 100
    trailingStepShortInPoints = tradeprice(1) * trailingStepShort / 100
    
    // reset the stoploss value
    IF NOT ONMARKET THEN
    newSL = 0
    ENDIF
    
    // manage long positions
    IF LONGONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND close - tradeprice(1) >= trailingStartLongInPoints * pipsize THEN
    newSL = tradeprice(1) + trailingStepLongInPoints * pipsize
    stopLoss = stopLossLong * 0.1
    takeProfit = takeProfitLong * 2
    ENDIF
    // next moves
    IF newSL > 0 AND close - newSL >= trailingStepLongInPoints * pipsize THEN
    newSL = newSL + trailingStepLongInPoints * pipsize
    ENDIF
    ENDIF
    
    // manage short positions
    IF SHORTONMARKET THEN
    // first move (breakeven)
    IF newSL = 0 AND tradeprice(1) - close >= trailingStartShortInPoints * pipsize THEN
    newSL = tradeprice(1) - trailingStepShortInPoints * pipsize
    ENDIF
    // next moves
    IF newSL > 0 AND newSL - close >= trailingStepShortInPoints * pipsize THEN
    newSL = newSL - trailingStepShortInPoints * pipsize
    ENDIF
    ENDIF
    
    // stop order to exit the positions
    IF newSL > 0 THEN
    IF LONGONMARKET THEN
    SELL AT newSL STOP
    ENDIF
    IF SHORTONMARKET THEN
    EXITSHORT AT newSL STOP
    ENDIF
    ENDIF
    
    // superordinate stop and take profit
    SET STOP %LOSS stopLoss
    SET TARGET %PROFIT takeProfit
    
    ENDIF
    Reiner thanked this post
    #18916 quote
    MichiM
    Participant
    Senior

    Hallo

    In the attachement the CAC 40 daily V2 only long from 1987 until today.

    All the best.

    MichiM

    Pfeiler thanked this post
    #18934 quote
    Pere
    Participant
    Veteran

    Hi Reiner.

    Signalline crossed over the weekly high today in the candle of 5 o’clock, and that should mean to start the trade at 9 o’clock.

    I tried to test it with real money with a modified V6B2, changing the saisonal multiplier of December from 3 to 1, and also the maximum number of contracts from 15 to 4. However, the system did not start at 9.

    Is there a minimum capital needed to use Pathfinder? Because I tried it live with 3600€ and did not work. After that, I tried it in demo with the same result. Only with 3800€ it seems to start to work. Which can be the reason?

    Or asking you it otherwise, which parameters shall I change to use Pathfinder with 3600€?

    Thanks in advance

    #18938 quote
    pranik
    Participant
    Master

    Hi Petrus,

    I confirm 3 long positions on mini dax (1€) at 9.00 at 11.448. I use V6B2. I haven’t changed any parameters.

    #18939 quote
    Reiner
    Participant
    Veteran

    Hi MichiM,

    Thanks for your contribution. Your backtest has a drawdown of over 80% since you have mainly focused on the performance. I recommend to focus more on the drawdown. I rated a lot of instruments to find out the best underlyings for Pathfinder. I have two quality requirements: better than 70% profitable trades and a drawdown not higher than 25%. Please find attached the CAC version from my comparision.

    Best, Reiner

    #18945 quote
    Reiner
    Participant
    Veteran

    Hi Petrus,

    I can confirm a 2x long trade (3x with V6B2) of Pathfinder DAX 4H V6 at 10448. To my knowledge there isn’t an account limit but the smallest account size which I had ever traded this system was 6k.

    Best, Reiner

    #18957 quote
    MichiM
    Participant
    Senior

    Thanks Reiner, the next time I will make it better with lower drawdown.

    Liebe Grüsse

    MichiM

Viewing 15 posts - 466 through 480 (of 1,835 total)
  • You must be logged in to reply to this topic.

Pathfinder Trading System


ProOrder support

New Reply
Author
author-avatar
Reiner @reiner Participant
Summary

This topic contains 1,834 replies,
has 139 voices, and was last updated by CFD AutoTrading
2 years, 6 months ago.

Topic Details
Forum: ProOrder support
Language: English
Started: 09/22/2016
Status: Active
Attachments: 435 files
Logo Logo
Loading...