yuya_takahashi_

zigzagストラテジーをつくる④|インジケーターを改良する1

Education
OANDA:USDJPY   U.S. Dollar / Japanese Yen
以前みつけた高勝率のzigzagストラテジーを再現する試みです。

とりあえず、フィボナッチの追加を行ってみました。

他にも少し手を加えています。

・line.newを削除
・コードの整理

と、ここまでやってみたは良いものの、
「変動率を考慮したジグザグ」よりも
「上位足のジグザグ」の方が良い気がしてきました。

なので、security関数を用いない
「上位足のジグザグ」を実装したいと思います。

※ コピペする場合は以下の変更を行ってください
[](全角の角括弧)→(半角の角括弧)
(全角スペース)→(半角スペース)

=====
//@version=4
study("Zig Zag 勉強中", overlay=true)


dev_threshold = input(title="Deviation (%)", type=input.float, defval=.1, minval=0.01, maxval=100)
depth = input(title="Depth", type=input.integer, defval=10, minval=1)

showPatterns = input(true, title='Show Patterns')
showFib0000 = input(title='Display Fibonacci 0.000:', type=input.bool, defval=true)
showFib0236 = input(title='Display Fibonacci 0.236:', type=input.bool, defval=true)
showFib0382 = input(title='Display Fibonacci 0.382:', type=input.bool, defval=true)
showFib0500 = input(title='Display Fibonacci 0.500:', type=input.bool, defval=true)
showFib0618 = input(title='Display Fibonacci 0.618:', type=input.bool, defval=true)
showFib0764 = input(title='Display Fibonacci 0.764:', type=input.bool, defval=true)
showFib1000 = input(title='Display Fibonacci 1.000:', type=input.bool, defval=true)


//**
//* depth -> length -> zero
//* lengthが最高値・最安値であるかを確認
//* trueならbar_indexと価格を返す
//*
pivots(src, length, isHigh) =>
 p = nz(src[length])
 if length == 0
  [bar_index, p]
 else
  isFound = true
  for i = 0 to length - 1
   if isHigh and src[i] > p
    isFound := false
   if not isHigh and src[i] < p
    isFound := false
  for i = length + 1 to 2 * length
   if isHigh and src[i] >= p
    isFound := false
   if not isHigh and src[i] <= p
    isFound := false
  if isFound and length * 2 <= bar_index
   [bar_index[length], p]
  else
   [int(na), float(na)]

[iH, pH] = pivots(high, floor(depth / 2), true)
[iL, pL] = pivots(low, floor(depth / 2), false)



// 変化率を算出する関数
calc_dev(base_price, price) =>
 100 * (price - base_price) / base_price


// 直近のpivotの情報を格納
var line lineLast = na  // lineのid (実際はidではなく識別している何か)
var float pLast = 0   // price
var bool isHighLast = true // High か Low か
var int linesCount = 0



//**
//* Lineを描画する関数
//*
pivotFound(dev, isHigh, index, price) =>
 if linesCount == 0
  [line(na), isHigh, true]
 else
  if abs(dev) >= dev_threshold
   [line(na), isHigh, true]
  else
   [line(na), isHighLast, false]



//**
//* 描画処理
//*
if not na(pH) and not na(pL) and pH == pL
 dev1 = calc_dev(pLast, pH)
 [id2, isHigh2, isNew2] = pivotFound(dev1, true, iH, pH)
 if isNew2
  linesCount := linesCount + 1
  isHighLast := isHigh2
  pLast := pH
 dev2 = calc_dev(pLast, pL)
 [id1, isHigh1, isNew1] = pivotFound(dev2, false, iL, pL)
 if isNew1
  linesCount := linesCount + 1
  isHighLast := isHigh1
  pLast := pL
else
 if not na(pH)
  dev1 = calc_dev(pLast, pH)
  [id, isHigh, isNew] = pivotFound(dev1, true, iH, pH)
  if isNew
   linesCount := linesCount + 1
   isHighLast := isHigh
   pLast := pH
 else
  if not na(pL)
   dev2 = calc_dev(pLast, pL)
   [id, isHigh, isNew] = pivotFound(dev2, false, iL, pL)
   if isNew
    linesCount := linesCount + 1
    isHighLast := isHigh
    pLast := pL



// 追加箇所

zigzag = pLast[1]!=pLast ? pLast : na
plot( zigzag ,color=color.red ,offset=-1*floor(depth / 2) )
plot( isHighLast ? 1 : 0 )

// ジグザグが発生したときのジグザグの値を取得
x = valuewhen(zigzag, zigzag, 4)
a = valuewhen(zigzag, zigzag, 3)
b = valuewhen(zigzag, zigzag, 2) //3つ前
c = valuewhen(zigzag, zigzag, 1) //前々回
d = valuewhen(zigzag, zigzag, 0) //前回

fib_range = abs(d-c)
fib_0000 = not showFib0000 ? na : d > c ? d-(fib_range*0.000):d+(fib_range*0.000)
fib_0236 = not showFib0236 ? na : d > c ? d-(fib_range*0.236):d+(fib_range*0.236)
fib_0382 = not showFib0382 ? na : d > c ? d-(fib_range*0.382):d+(fib_range*0.382)
fib_0500 = not showFib0500 ? na : d > c ? d-(fib_range*0.500):d+(fib_range*0.500)
fib_0618 = not showFib0618 ? na : d > c ? d-(fib_range*0.618):d+(fib_range*0.618)
fib_0764 = not showFib0764 ? na : d > c ? d-(fib_range*0.764):d+(fib_range*0.764)
fib_1000 = not showFib1000 ? na : d > c ? d-(fib_range*1.000):d+(fib_range*1.000)
plot(title='Fib 0.000' ,series=fib_0000 ,offset=-1*floor(depth/2) ,color=fib_0000 != fib_0000[1] ? na : color.black)
plot(title='Fib 0.236' ,series=fib_0236 ,offset=-1*floor(depth/2) ,color=fib_0236 != fib_0236[1] ? na : color.red)
plot(title='Fib 0.382' ,series=fib_0382 ,offset=-1*floor(depth/2) ,color=fib_0382 != fib_0382[1] ? na : color.olive)
plot(title='Fib 0.500' ,series=fib_0500 ,offset=-1*floor(depth/2) ,color=fib_0500 != fib_0500[1] ? na : color.lime)
plot(title='Fib 0.618' ,series=fib_0618 ,offset=-1*floor(depth/2) ,color=fib_0618 != fib_0618[1] ? na : color.teal)
plot(title='Fib 0.764' ,series=fib_0764 ,offset=-1*floor(depth/2) ,color=fib_0764 != fib_0764[1] ? na : color.blue)
plot(title='Fib 1.000' ,series=fib_1000 ,offset=-1*floor(depth/2) ,color=fib_1000 != fib_1000[1] ? na : color.black)
=====
Comment:
次の投稿

小次郎講師公式インジケーターのお申込
bit.ly/2vdSV4Q

小次郎講師のLINE@
bit.ly/2VZQFu3

小次郎講師のチャート情報局
bit.ly/2GvLAEp
Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.