[Backtest] Chiến lược Novecento - cũ mà mới.

[Backtest] Chiến lược Novecento - cũ mà mới.

[Backtest] Chiến lược Novecento - cũ mà mới.
@Trương Nhật mình cho khoảng xấp xỉ là 0.01 có gì bạn tự điều chỉnh nhé, 2 dòng 138 và 147 :D
Mã:
//@version=4
//BO Novecento @TruongNhat
//author: anhnguyen14

strategy(title="BO TDF @TruongNhat", overlay=false, pyramiding=10)

// === INPUT BACKTEST RANGE ===
Date   = input(true, title = "=== Date Option ===")
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)

ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === DATE RANGE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === Trading Time ===
CTimeDvM   = input(true, title = "=== Trading Time ===")
FromHourDvM   = input(defval = 05, title = "From Hour", minval = 00, maxval = 23)
FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59)
ToHourDvM   = input(defval = 04, title = "To Hour", minval = 00, maxval = 23)
ToMinuteDvM = input(defval = 59, title = "To Minute", minval = 00, maxval = 59)
GMT_FHDvM=FromHourDvM<7?FromHourDvM-7+24:FromHourDvM-7
GMT_THDvM=ToHourDvM<7?ToHourDvM-7+24:ToHourDvM-7
fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM))
fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM))
thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM))
tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM))
WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM
t0_DvM = time(timeframe.period, WorkingHourDvM)
//bgcolor(CTimeDvM? t0_DvM? color.gray : na:na, title="Trading Time", transp=90)

//The Vostro Indicator
period156 = 100
level = input(8, title="Vostro Level")
gd120 = sum(hl2, 5)
gd128 = gd120 * .2
gd121 = sum(high - low, 5)
gd136 = gd121 * .2 * .2

ibuff116 = (low - gd128) / gd136
ibuff112 = (high - gd128) / gd136


ibuff108 = iff(ibuff112 > level and high > wma(hl2, period156), 90, iff(ibuff116 < -level and low < wma(hl2, period156), -90, 0))
ibuff109 = iff(ibuff112 > level and ibuff112[1] > level or ibuff116 < -level and ibuff116[1] < -8, 0, ibuff108)
plot((ibuff109/100), title="The VosTro", color=color.blue, linewidth=2, transp=40)
//plot(80)
//plot(-80)

//Trend Direction Force Index
filterHigh = 0.5
filterMid = 0
filterLow = -0.5
price = close

//TDF5
lookback5 = input(5, title="TDF Fast")
mma5 = ema(price * 1000, lookback5)
smma5 = ema(mma5, lookback5)

impetmma5 = mma5 - mma5[1]
impetsmma5 = smma5 - smma5[1]
divma5 = abs(mma5 - smma5)
averimpet5 = (impetmma5 + impetsmma5) / 2

number5 = averimpet5
pow5 = 3
result5 = float(na)

for i = 1 to pow5 - 1 by 1
    if i == 1
        result5 := number5
        result5
    result5 := result5 * number5
    result5

tdf5 = divma5 * result5
ntdf5 = tdf5 / highest(abs(tdf5), lookback5 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf5, title="TDF5", linewidth=2, color=color.red, transp=40)

//TFD20
lookback20 = input(20, title="TDF Slow")
mma20 = ema(price * 1000, lookback20)
smma20 = ema(mma20, lookback20)
impetmma20 = mma20 - mma20[1]
impetsmma20 = smma20 - smma20[1]
divma20 = abs(mma20 - smma20)
averimpet20 = (impetmma20 + impetsmma20) / 2

number20 = averimpet20
pow20 = 3
result20 = float(na)

for i = 1 to pow20 - 1 by 1
    if i == 1
        result20 := number20
        result20
    result20 := result20 * number20
    result20

tdf20 = divma20 * result20
ntdf20 = tdf20 / highest(abs(tdf20), lookback20 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf20, title="TDF5", linewidth=2, color=color.yellow, transp=40)

hline(filterHigh, color=color.black)
//hline(filterMid, color=color.black)
hline(filterLow, color=color.black)
hline(1, linewidth=2)
hline(-1, linewidth=2)

//Barry Support & Resistance
FractalLen=3
isFractal(x) => highestbars(x,FractalLen*2+1)==-FractalLen
sF=isFractal(-low), support=low, support:=sF ? low[FractalLen] : support[1]
rF=isFractal(high), resistance=high, resistance:=rF ? high[FractalLen] : resistance[1]
//plot(series=support, title="Support", color=color.blue, offset=-FractalLen)
//plot(series=resistance, title="Resistance", color=color.red, offset=-FractalLen)
//plotshape(sF, title="Lower fractal", style=shape.diamond, location=location.belowbar, color=color.black, offset=-FractalLen, size=size.tiny)
//plotshape(rF, title="Upper fractal", style=shape.diamond, location=location.abovebar, color=color.black, offset=-FractalLen, size=size.tiny)

//Put Condition

//Novecento M5 - Put Condition - Novecentas Setup
x1DvM=
     
       //ibuff109>80
       ntdf5==1
       and ntdf20>=0 and ntdf20<0.01
     


//Novecento M5 - Call Condition - Novecentas Setup
y1DvM=
     
       //ibuff109<-80
       ntdf5==-1
       and ntdf20>-0.01 and ntdf20<=0
     

// - /FUNCTIONS

xDvM=
       x1DvM
     

yDvM=
       y1DvM

//--------------------------------------\\

// - /FUNCTIONS

//--------------------------------------\\

//plot Signal
putcol = CTimeDvM?t0_DvM?xDvM? color.red : na:na:na
callcol = CTimeDvM?t0_DvM?yDvM? color.blue : na:na:na
PutSignal= CTimeDvM?t0_DvM?xDvM?-2:na:na:na
CallSignal= CTimeDvM?t0_DvM?yDvM?-2:na:na:na
plot(PutSignal, title='Put Signal', style=plot.style_columns, color=color.red, offset=1, transp=0)
plot(CallSignal, title='Call Signal', style=plot.style_columns, color=color.blue, offset=1, transp=0)
plotshape(PutSignal, title='Put', text="Put", style=shape.labeldown, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
plotshape(CallSignal, title='Call', text="Call", style=shape.labelup, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)

//Trading Time
if (CTimeDvM)
    strategy.entry("Call", strategy.long, when=yDvM and window() and t0_DvM)
if (CTimeDvM)
    strategy.entry("Put", strategy.short, when=xDvM and window() and t0_DvM)

strategy.close_all(when=barstate.isnew)
   
//EOF

code này nè bác @vĩnh0902.
 
 
upload_2020-1-9_0-42-59.png

Nhờ bác @vĩnh0902 test giùm mình con này khung giờ như trên với nghen
day bac oi 2 thang ne
upload_2020-1-9_9-32-45.png
 
 
@Trương Nhật nick bạn Vĩnh là @vĩnh0902 á :D

Tặng 2 bạn @Trương Nhật@vĩnh0902 , lucky trading!
1. Code Alert báo hiệu
Mã:
//@version=4
//BO Novecento Alert @TruongNhat
//author: anhnguyen14

study(title="BO Novecento Alert @TruongNhat", overlay=true)

// === INPUT BACKTEST RANGE ===
Date   = input(true, title = "=== Date Option ===")
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)

ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === DATE RANGE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === Trading Time ===
CTimeDvM   = input(true, title = "=== Trading Time ===")
FromHourDvM   = input(defval = 05, title = "From Hour", minval = 00, maxval = 23)
FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59)
ToHourDvM   = input(defval = 04, title = "To Hour", minval = 00, maxval = 23)
ToMinuteDvM = input(defval = 59, title = "To Minute", minval = 00, maxval = 59)
GMT_FHDvM=FromHourDvM<7?FromHourDvM-7+24:FromHourDvM-7
GMT_THDvM=ToHourDvM<7?ToHourDvM-7+24:ToHourDvM-7
fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM))
fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM))
thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM))
tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM))
WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM
t0_DvM = time(timeframe.period, WorkingHourDvM)
//bgcolor(CTimeDvM? t0_DvM? color.gray : na:na, title="Trading Time", transp=90)

//The Vostro Indicator
period156 = 100
level = input(8, title="Vostro Level")
gd120 = sum(hl2, 5)
gd128 = gd120 * .2
gd121 = sum(high - low, 5)
gd136 = gd121 * .2 * .2

ibuff116 = (low - gd128) / gd136
ibuff112 = (high - gd128) / gd136


ibuff108 = iff(ibuff112 > level and high > wma(hl2, period156), 90, iff(ibuff116 < -level and low < wma(hl2, period156), -90, 0))
ibuff109 = iff(ibuff112 > level and ibuff112[1] > level or ibuff116 < -level and ibuff116[1] < -8, 0, ibuff108)
//plot((ibuff109/100), title="The VosTro", color=color.blue, linewidth=2, transp=40)
//plot(80)
//plot(-80)

//Trend Direction Force Index
filterHigh = 0.5
filterMid = 0
filterLow = -0.5
price = close

//TDF5
lookback5 = input(5, title="TDF Fast")
mma5 = ema(price * 1000, lookback5)
smma5 = ema(mma5, lookback5)

impetmma5 = mma5 - mma5[1]
impetsmma5 = smma5 - smma5[1]
divma5 = abs(mma5 - smma5)
averimpet5 = (impetmma5 + impetsmma5) / 2

number5 = averimpet5
pow5 = 3
result5 = float(na)

for i = 1 to pow5 - 1 by 1
    if i == 1
        result5 := number5
        result5
    result5 := result5 * number5
    result5

tdf5 = divma5 * result5
ntdf5 = tdf5 / highest(abs(tdf5), lookback5 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
//plot(ntdf5, title="TDF5", linewidth=2, color=color.red, transp=40)

//TFD20
lookback20 = input(20, title="TDF Slow")
mma20 = ema(price * 1000, lookback20)
smma20 = ema(mma20, lookback20)

impetmma20 = mma20 - mma20[1]
impetsmma20 = smma20 - smma20[1]
divma20 = abs(mma20 - smma20)
averimpet20 = (impetmma20 + impetsmma20) / 2

number20 = averimpet20
pow20 = 3
result20 = float(na)

for i = 1 to pow20 - 1 by 1
    if i == 1
        result20 := number20
        result20
    result20 := result20 * number20
    result20

tdf20 = divma20 * result20
ntdf20 = tdf20 / highest(abs(tdf20), lookback20 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
//plot(ntdf20, title="TDF5", linewidth=2, color=color.yellow, transp=40)

//hline(filterHigh, color=color.black)
//hline(filterMid, color=color.black)
//hline(filterLow, color=color.black)
//hline(1, linewidth=2)
//hline(-1, linewidth=2)

//Barry Support & Resistance
FractalLen=3
isFractal(x) => highestbars(x,FractalLen*2+1)==-FractalLen
sF=isFractal(-low), support=low, support:=sF ? low[FractalLen] : support[1]
rF=isFractal(high), resistance=high, resistance:=rF ? high[FractalLen] : resistance[1]
//plot(series=support, title="Support", color=color.blue, offset=-FractalLen)
//plot(series=resistance, title="Resistance", color=color.red, offset=-FractalLen)
plotshape(sF, title="Lower fractal", style=shape.diamond, location=location.belowbar, color=color.black, offset=-FractalLen, size=size.tiny)
plotshape(rF, title="Upper fractal", style=shape.diamond, location=location.abovebar, color=color.black, offset=-FractalLen, size=size.tiny)

//Put Condition

//Novecento M5 - Put Condition - Novecentas Setup
x1DvM=
    
       ibuff109>80
       and ntdf5==1
       and ntdf20<0.5
    


//Novecento M5 - Call Condition - Novecentas Setup
y1DvM=
    
       ibuff109<-80
       and ntdf5==-1
       and ntdf20>-0.5
    

// - /FUNCTIONS

xDvM=
       x1DvM
    

yDvM=
       y1DvM

//--------------------------------------\\

// - /FUNCTIONS

//--------------------------------------\\


// Alert
CputcolDvM = xDvM ? color.red : na
CcallcolDvM = yDvM ? color.blue : na
plotshape(CTimeDvM?t0_DvM?xDvM:na:na, title='Put Alert', text="Put Alert", style=shape.labeldown, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
plotshape(CTimeDvM?t0_DvM?yDvM:na:na, title='Call Alert', text="Call Alert", style=shape.labelup, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
bgcolor(CTimeDvM?t0_DvM?CputcolDvM:na:na, transp=50, offset=1, title="Put Signal")
bgcolor(CTimeDvM?t0_DvM?CcallcolDvM:na:na, transp=50, offset=1, title="Call Signal")

// Alert
mms1="Signal alert"
PutAlert=
       (CTimeDvM and t0_DvM and xDvM)
    
CallAlert=
       (CTimeDvM and t0_DvM and yDvM)
    

alertcondition(PutAlert or CallAlert, title="Signal alert", message=mms1)

  
//EOF

2. Code backtest và copy lệnh
Mã:
//@version=4
//BO Novecento @TruongNhat
//author: anhnguyen14

strategy(title="BO Novecento @TruongNhat", overlay=false, pyramiding=10)

// === INPUT BACKTEST RANGE ===
Date   = input(true, title = "=== Date Option ===")
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)

ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === DATE RANGE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === Trading Time ===
CTimeDvM   = input(true, title = "=== Trading Time ===")
FromHourDvM   = input(defval = 05, title = "From Hour", minval = 00, maxval = 23)
FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59)
ToHourDvM   = input(defval = 04, title = "To Hour", minval = 00, maxval = 23)
ToMinuteDvM = input(defval = 59, title = "To Minute", minval = 00, maxval = 59)
GMT_FHDvM=FromHourDvM<7?FromHourDvM-7+24:FromHourDvM-7
GMT_THDvM=ToHourDvM<7?ToHourDvM-7+24:ToHourDvM-7
fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM))
fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM))
thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM))
tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM))
WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM
t0_DvM = time(timeframe.period, WorkingHourDvM)
//bgcolor(CTimeDvM? t0_DvM? color.gray : na:na, title="Trading Time", transp=90)

//The Vostro Indicator
period156 = 100
level = input(8, title="Vostro Level")
gd120 = sum(hl2, 5)
gd128 = gd120 * .2
gd121 = sum(high - low, 5)
gd136 = gd121 * .2 * .2

ibuff116 = (low - gd128) / gd136
ibuff112 = (high - gd128) / gd136


ibuff108 = iff(ibuff112 > level and high > wma(hl2, period156), 90, iff(ibuff116 < -level and low < wma(hl2, period156), -90, 0))
ibuff109 = iff(ibuff112 > level and ibuff112[1] > level or ibuff116 < -level and ibuff116[1] < -8, 0, ibuff108)
plot((ibuff109/100), title="The VosTro", color=color.blue, linewidth=2, transp=40)
//plot(80)
//plot(-80)

//Trend Direction Force Index
filterHigh = 0.5
filterMid = 0
filterLow = -0.5
price = close

//TDF5
lookback5 = input(5, title="TDF Fast")
mma5 = ema(price * 1000, lookback5)
smma5 = ema(mma5, lookback5)

impetmma5 = mma5 - mma5[1]
impetsmma5 = smma5 - smma5[1]
divma5 = abs(mma5 - smma5)
averimpet5 = (impetmma5 + impetsmma5) / 2

number5 = averimpet5
pow5 = 3
result5 = float(na)

for i = 1 to pow5 - 1 by 1
    if i == 1
        result5 := number5
        result5
    result5 := result5 * number5
    result5

tdf5 = divma5 * result5
ntdf5 = tdf5 / highest(abs(tdf5), lookback5 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf5, title="TDF5", linewidth=2, color=color.red, transp=40)

//TFD20
lookback20 = input(20, title="TDF Slow")
mma20 = ema(price * 1000, lookback20)
smma20 = ema(mma20, lookback20)

impetmma20 = mma20 - mma20[1]
impetsmma20 = smma20 - smma20[1]
divma20 = abs(mma20 - smma20)
averimpet20 = (impetmma20 + impetsmma20) / 2

number20 = averimpet20
pow20 = 3
result20 = float(na)

for i = 1 to pow20 - 1 by 1
    if i == 1
        result20 := number20
        result20
    result20 := result20 * number20
    result20

tdf20 = divma20 * result20
ntdf20 = tdf20 / highest(abs(tdf20), lookback20 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf20, title="TDF5", linewidth=2, color=color.yellow, transp=40)

hline(filterHigh, color=color.black)
//hline(filterMid, color=color.black)
hline(filterLow, color=color.black)
hline(1, linewidth=2)
hline(-1, linewidth=2)

//Barry Support & Resistance
FractalLen=3
isFractal(x) => highestbars(x,FractalLen*2+1)==-FractalLen
sF=isFractal(-low), support=low, support:=sF ? low[FractalLen] : support[1]
rF=isFractal(high), resistance=high, resistance:=rF ? high[FractalLen] : resistance[1]
//plot(series=support, title="Support", color=color.blue, offset=-FractalLen)
//plot(series=resistance, title="Resistance", color=color.red, offset=-FractalLen)
//plotshape(sF, title="Lower fractal", style=shape.diamond, location=location.belowbar, color=color.black, offset=-FractalLen, size=size.tiny)
//plotshape(rF, title="Upper fractal", style=shape.diamond, location=location.abovebar, color=color.black, offset=-FractalLen, size=size.tiny)

//Put Condition

//Novecento M5 - Put Condition - Novecentas Setup
x1DvM=
    
       ibuff109>80
       and ntdf5==1
       and ntdf20<0.5
    


//Novecento M5 - Call Condition - Novecentas Setup
y1DvM=
    
       ibuff109<-80
       and ntdf5==-1
       and ntdf20>-0.5
    

// - /FUNCTIONS

xDvM=
       x1DvM
    

yDvM=
       y1DvM

//--------------------------------------\\

// - /FUNCTIONS

//--------------------------------------\\

//plot Signal
putcol = CTimeDvM?t0_DvM?xDvM? color.red : na:na:na
callcol = CTimeDvM?t0_DvM?yDvM? color.blue : na:na:na
PutSignal= CTimeDvM?t0_DvM?xDvM?-2:na:na:na
CallSignal= CTimeDvM?t0_DvM?yDvM?-2:na:na:na
plot(PutSignal, title='Put Signal', style=plot.style_columns, color=color.red, offset=1, transp=0)
plot(CallSignal, title='Call Signal', style=plot.style_columns, color=color.blue, offset=1, transp=0)
plotshape(PutSignal, title='Put', text="Put", style=shape.labeldown, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
plotshape(CallSignal, title='Call', text="Call", style=shape.labelup, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)

//Trading Time
if (CTimeDvM)
    strategy.entry("Call", strategy.long, when=yDvM and window() and t0_DvM)
if (CTimeDvM)
    strategy.entry("Put", strategy.short, when=xDvM and window() and t0_DvM)

strategy.close_all(when=barstate.isnew)
  
//EOF

Nhờ bác @vĩnh0902 test giùm mình EU, UJ, EJ m15 với, hy vọng đừng bèo quá
 
 
@Trương Nhật nick bạn Vĩnh là @vĩnh0902 á :D

Tặng 2 bạn @Trương Nhật@vĩnh0902 , lucky trading!
1. Code Alert báo hiệu
Mã:
//@version=4
//BO Novecento Alert @TruongNhat
//author: anhnguyen14

study(title="BO Novecento Alert @TruongNhat", overlay=true)

// === INPUT BACKTEST RANGE ===
Date   = input(true, title = "=== Date Option ===")
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)

ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === DATE RANGE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === Trading Time ===
CTimeDvM   = input(true, title = "=== Trading Time ===")
FromHourDvM   = input(defval = 05, title = "From Hour", minval = 00, maxval = 23)
FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59)
ToHourDvM   = input(defval = 04, title = "To Hour", minval = 00, maxval = 23)
ToMinuteDvM = input(defval = 59, title = "To Minute", minval = 00, maxval = 59)
GMT_FHDvM=FromHourDvM<7?FromHourDvM-7+24:FromHourDvM-7
GMT_THDvM=ToHourDvM<7?ToHourDvM-7+24:ToHourDvM-7
fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM))
fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM))
thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM))
tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM))
WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM
t0_DvM = time(timeframe.period, WorkingHourDvM)
//bgcolor(CTimeDvM? t0_DvM? color.gray : na:na, title="Trading Time", transp=90)

//The Vostro Indicator
period156 = 100
level = input(8, title="Vostro Level")
gd120 = sum(hl2, 5)
gd128 = gd120 * .2
gd121 = sum(high - low, 5)
gd136 = gd121 * .2 * .2

ibuff116 = (low - gd128) / gd136
ibuff112 = (high - gd128) / gd136


ibuff108 = iff(ibuff112 > level and high > wma(hl2, period156), 90, iff(ibuff116 < -level and low < wma(hl2, period156), -90, 0))
ibuff109 = iff(ibuff112 > level and ibuff112[1] > level or ibuff116 < -level and ibuff116[1] < -8, 0, ibuff108)
//plot((ibuff109/100), title="The VosTro", color=color.blue, linewidth=2, transp=40)
//plot(80)
//plot(-80)

//Trend Direction Force Index
filterHigh = 0.5
filterMid = 0
filterLow = -0.5
price = close

//TDF5
lookback5 = input(5, title="TDF Fast")
mma5 = ema(price * 1000, lookback5)
smma5 = ema(mma5, lookback5)

impetmma5 = mma5 - mma5[1]
impetsmma5 = smma5 - smma5[1]
divma5 = abs(mma5 - smma5)
averimpet5 = (impetmma5 + impetsmma5) / 2

number5 = averimpet5
pow5 = 3
result5 = float(na)

for i = 1 to pow5 - 1 by 1
    if i == 1
        result5 := number5
        result5
    result5 := result5 * number5
    result5

tdf5 = divma5 * result5
ntdf5 = tdf5 / highest(abs(tdf5), lookback5 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
//plot(ntdf5, title="TDF5", linewidth=2, color=color.red, transp=40)

//TFD20
lookback20 = input(20, title="TDF Slow")
mma20 = ema(price * 1000, lookback20)
smma20 = ema(mma20, lookback20)

impetmma20 = mma20 - mma20[1]
impetsmma20 = smma20 - smma20[1]
divma20 = abs(mma20 - smma20)
averimpet20 = (impetmma20 + impetsmma20) / 2

number20 = averimpet20
pow20 = 3
result20 = float(na)

for i = 1 to pow20 - 1 by 1
    if i == 1
        result20 := number20
        result20
    result20 := result20 * number20
    result20

tdf20 = divma20 * result20
ntdf20 = tdf20 / highest(abs(tdf20), lookback20 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
//plot(ntdf20, title="TDF5", linewidth=2, color=color.yellow, transp=40)

//hline(filterHigh, color=color.black)
//hline(filterMid, color=color.black)
//hline(filterLow, color=color.black)
//hline(1, linewidth=2)
//hline(-1, linewidth=2)

//Barry Support & Resistance
FractalLen=3
isFractal(x) => highestbars(x,FractalLen*2+1)==-FractalLen
sF=isFractal(-low), support=low, support:=sF ? low[FractalLen] : support[1]
rF=isFractal(high), resistance=high, resistance:=rF ? high[FractalLen] : resistance[1]
//plot(series=support, title="Support", color=color.blue, offset=-FractalLen)
//plot(series=resistance, title="Resistance", color=color.red, offset=-FractalLen)
plotshape(sF, title="Lower fractal", style=shape.diamond, location=location.belowbar, color=color.black, offset=-FractalLen, size=size.tiny)
plotshape(rF, title="Upper fractal", style=shape.diamond, location=location.abovebar, color=color.black, offset=-FractalLen, size=size.tiny)

//Put Condition

//Novecento M5 - Put Condition - Novecentas Setup
x1DvM=
    
       ibuff109>80
       and ntdf5==1
       and ntdf20<0.5
    


//Novecento M5 - Call Condition - Novecentas Setup
y1DvM=
    
       ibuff109<-80
       and ntdf5==-1
       and ntdf20>-0.5
    

// - /FUNCTIONS

xDvM=
       x1DvM
    

yDvM=
       y1DvM

//--------------------------------------\\

// - /FUNCTIONS

//--------------------------------------\\


// Alert
CputcolDvM = xDvM ? color.red : na
CcallcolDvM = yDvM ? color.blue : na
plotshape(CTimeDvM?t0_DvM?xDvM:na:na, title='Put Alert', text="Put Alert", style=shape.labeldown, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
plotshape(CTimeDvM?t0_DvM?yDvM:na:na, title='Call Alert', text="Call Alert", style=shape.labelup, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
bgcolor(CTimeDvM?t0_DvM?CputcolDvM:na:na, transp=50, offset=1, title="Put Signal")
bgcolor(CTimeDvM?t0_DvM?CcallcolDvM:na:na, transp=50, offset=1, title="Call Signal")

// Alert
mms1="Signal alert"
PutAlert=
       (CTimeDvM and t0_DvM and xDvM)
    
CallAlert=
       (CTimeDvM and t0_DvM and yDvM)
    

alertcondition(PutAlert or CallAlert, title="Signal alert", message=mms1)

  
//EOF

2. Code backtest và copy lệnh
Mã:
//@version=4
//BO Novecento @TruongNhat
//author: anhnguyen14

strategy(title="BO Novecento @TruongNhat", overlay=false, pyramiding=10)

// === INPUT BACKTEST RANGE ===
Date   = input(true, title = "=== Date Option ===")
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)

ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === DATE RANGE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === Trading Time ===
CTimeDvM   = input(true, title = "=== Trading Time ===")
FromHourDvM   = input(defval = 05, title = "From Hour", minval = 00, maxval = 23)
FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59)
ToHourDvM   = input(defval = 04, title = "To Hour", minval = 00, maxval = 23)
ToMinuteDvM = input(defval = 59, title = "To Minute", minval = 00, maxval = 59)
GMT_FHDvM=FromHourDvM<7?FromHourDvM-7+24:FromHourDvM-7
GMT_THDvM=ToHourDvM<7?ToHourDvM-7+24:ToHourDvM-7
fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM))
fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM))
thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM))
tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM))
WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM
t0_DvM = time(timeframe.period, WorkingHourDvM)
//bgcolor(CTimeDvM? t0_DvM? color.gray : na:na, title="Trading Time", transp=90)

//The Vostro Indicator
period156 = 100
level = input(8, title="Vostro Level")
gd120 = sum(hl2, 5)
gd128 = gd120 * .2
gd121 = sum(high - low, 5)
gd136 = gd121 * .2 * .2

ibuff116 = (low - gd128) / gd136
ibuff112 = (high - gd128) / gd136


ibuff108 = iff(ibuff112 > level and high > wma(hl2, period156), 90, iff(ibuff116 < -level and low < wma(hl2, period156), -90, 0))
ibuff109 = iff(ibuff112 > level and ibuff112[1] > level or ibuff116 < -level and ibuff116[1] < -8, 0, ibuff108)
plot((ibuff109/100), title="The VosTro", color=color.blue, linewidth=2, transp=40)
//plot(80)
//plot(-80)

//Trend Direction Force Index
filterHigh = 0.5
filterMid = 0
filterLow = -0.5
price = close

//TDF5
lookback5 = input(5, title="TDF Fast")
mma5 = ema(price * 1000, lookback5)
smma5 = ema(mma5, lookback5)

impetmma5 = mma5 - mma5[1]
impetsmma5 = smma5 - smma5[1]
divma5 = abs(mma5 - smma5)
averimpet5 = (impetmma5 + impetsmma5) / 2

number5 = averimpet5
pow5 = 3
result5 = float(na)

for i = 1 to pow5 - 1 by 1
    if i == 1
        result5 := number5
        result5
    result5 := result5 * number5
    result5

tdf5 = divma5 * result5
ntdf5 = tdf5 / highest(abs(tdf5), lookback5 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf5, title="TDF5", linewidth=2, color=color.red, transp=40)

//TFD20
lookback20 = input(20, title="TDF Slow")
mma20 = ema(price * 1000, lookback20)
smma20 = ema(mma20, lookback20)

impetmma20 = mma20 - mma20[1]
impetsmma20 = smma20 - smma20[1]
divma20 = abs(mma20 - smma20)
averimpet20 = (impetmma20 + impetsmma20) / 2

number20 = averimpet20
pow20 = 3
result20 = float(na)

for i = 1 to pow20 - 1 by 1
    if i == 1
        result20 := number20
        result20
    result20 := result20 * number20
    result20

tdf20 = divma20 * result20
ntdf20 = tdf20 / highest(abs(tdf20), lookback20 * 3)

//c = ntdf5 > filterHigh ? color.green : ntdf < filterLow ? color.red : color.gray
plot(ntdf20, title="TDF5", linewidth=2, color=color.yellow, transp=40)

hline(filterHigh, color=color.black)
//hline(filterMid, color=color.black)
hline(filterLow, color=color.black)
hline(1, linewidth=2)
hline(-1, linewidth=2)

//Barry Support & Resistance
FractalLen=3
isFractal(x) => highestbars(x,FractalLen*2+1)==-FractalLen
sF=isFractal(-low), support=low, support:=sF ? low[FractalLen] : support[1]
rF=isFractal(high), resistance=high, resistance:=rF ? high[FractalLen] : resistance[1]
//plot(series=support, title="Support", color=color.blue, offset=-FractalLen)
//plot(series=resistance, title="Resistance", color=color.red, offset=-FractalLen)
//plotshape(sF, title="Lower fractal", style=shape.diamond, location=location.belowbar, color=color.black, offset=-FractalLen, size=size.tiny)
//plotshape(rF, title="Upper fractal", style=shape.diamond, location=location.abovebar, color=color.black, offset=-FractalLen, size=size.tiny)

//Put Condition

//Novecento M5 - Put Condition - Novecentas Setup
x1DvM=
    
       ibuff109>80
       and ntdf5==1
       and ntdf20<0.5
    


//Novecento M5 - Call Condition - Novecentas Setup
y1DvM=
    
       ibuff109<-80
       and ntdf5==-1
       and ntdf20>-0.5
    

// - /FUNCTIONS

xDvM=
       x1DvM
    

yDvM=
       y1DvM

//--------------------------------------\\

// - /FUNCTIONS

//--------------------------------------\\

//plot Signal
putcol = CTimeDvM?t0_DvM?xDvM? color.red : na:na:na
callcol = CTimeDvM?t0_DvM?yDvM? color.blue : na:na:na
PutSignal= CTimeDvM?t0_DvM?xDvM?-2:na:na:na
CallSignal= CTimeDvM?t0_DvM?yDvM?-2:na:na:na
plot(PutSignal, title='Put Signal', style=plot.style_columns, color=color.red, offset=1, transp=0)
plot(CallSignal, title='Call Signal', style=plot.style_columns, color=color.blue, offset=1, transp=0)
plotshape(PutSignal, title='Put', text="Put", style=shape.labeldown, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)
plotshape(CallSignal, title='Call', text="Call", style=shape.labelup, location=location.bottom, color=color.orange, textcolor=color.black, offset=1, transp=0)

//Trading Time
if (CTimeDvM)
    strategy.entry("Call", strategy.long, when=yDvM and window() and t0_DvM)
if (CTimeDvM)
    strategy.entry("Put", strategy.short, when=xDvM and window() and t0_DvM)

strategy.close_all(when=barstate.isnew)
  
//EOF

nhờ bác @vĩnh0902 test giùm mình con này với EU m5, m15 khung thời gian từ 9h đến 23h, đầu vào có thay đổi 1 tí là vostro=7 thì ntn với
 
 

BÌNH LUẬN MỚI NHẤT

AdBlock Detected

We get it, advertisements are annoying!

Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

Back
Bên trên

Miễn trừ trách nhiệm

Tất cả nội dung trên website này đều vì mục đích cung cấp thông tin và không phải lời khuyên đầu tư.

Tại Việt Nam, giao dịch CFD forex có các rủi ro nhất định, trong đó bao gồm rủi ro về pháp lý. Độc giả nên tìm hiểu kỹ trước khi đưa ra quyết định tham gia.