読者です 読者をやめる 読者になる 読者になる

PU-METALのブログ

日銀にはウンザリなのでポンドル専になりました

損益累計曲線

曜日ごとで相場の癖みたいなもの出ないかとやってみた

駄目だ~

フォアード期間水平

f:id:kohnodechu:20170209170230p:plain

条件付き書式

EXcel2007から簡単にセルの色付けが出来るようになり

フィルターを検討するのにそれを使っている

こんな感じ

f:id:kohnodechu:20170208110136p:plain

取り敢えず条件にもよるが、水曜日はトレンドが出にくいのかブレイクアウトには向いてない気がした。今日も下に行くのかと思いきや戻ったものね

良い条件を探すが

今日のポンドルまた21時間線に跳ね返されるだろうと適当に売り上がりつつ、使えるパターンを求めてを求めてマクロ動かしてみた

前日高値安値ブレイクは取り敢えず正義ということは判ったが、どのパターンも勝率が60%行かない。DDはまだ計算してないが大きいことが予想され・・・

時間、曜日フィルターでも使ってみて、駄目だったら損益の比率を変えてみるかってところなのです

 

ここまでの表とプロシージャ

f:id:kohnodechu:20170207124318p:plain

Sub それぞれ()
Dim P As Long '行
Dim Q As Long '列
Dim Rp As Range
Set Rp = Range("a21")
Dim Tk As Long, Ys As Long, Jg As Long, Ds As Long '条件一致
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Rp
For Q = 12 To 75 '買い
For P = 29 To Range("a1048576").End(xlUp).Row
If .Offset(, Q) = "" Or .Offset(, Q).Value = Range("c" & P).Value Then
Tk = 1
End If
If .Offset(1, Q) = "" Or .Offset(1, Q).Value = Range("d" & P).Value Then
Ys = 1
End If
If .Offset(2, Q) = "" Or .Offset(2, Q).Value = Range("e" & P).Value Then
Jg = 1
End If
If .Offset(3, Q) = "" Or .Offset(3, Q).Value = Range("f" & P).Value Then
Ds = 1
End If
If Tk * Ys * Jg * Ds = 1 And Range("i" & P) <> "" Then
.Offset(P - 21, Q).Value = .Offset(P - 21, 8).Value
End If
Tk = 0: Ys = 0: Jg = 0: Ds = 0
Next
Next
For Q = 76 To 139 '売り
For P = 29 To Range("a1048576").End(xlUp).Row
If .Offset(, Q) = "" Or .Offset(, Q).Value = Range("c" & P).Value Then
Tk = 1
End If
If .Offset(1, Q) = "" Or .Offset(1, Q).Value = Range("d" & P).Value Then
Ys = 1
End If
If .Offset(2, Q) = "" Or .Offset(2, Q).Value = Range("e" & P).Value Then
Jg = 1
End If
If .Offset(3, Q) = "" Or .Offset(3, Q).Value = Range("f" & P).Value Then
Ds = 1
End If
If Tk * Ys * Jg * Ds = 1 And Range("l" & P) <> "" Then
.Offset(P - 21, Q).Value = .Offset(P - 21, 11).Value
End If
Tk = 0: Ys = 0: Jg = 0: Ds = 0
Next
Next
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

 

フィルターを検討する準備

今日はタカシヤマで恵方巻き買って帰らあかんのにさっき少し売ってみたらハマったかも?

 

あんな何十万行も有るデータ扱いにくいので、フィルターを検討する前に別シートを作り日ごとに戦績をまとめてみました

 

こんな感じ

f:id:kohnodechu:20170203165558p:plain

Sub 最適化準備()
Dim Rp As Range 'rpは日付
Dim Rq As Range
Dim St As Worksheet, Ss As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set St = Worksheets("test")
Set Ss = Worksheets("sai")
For Each Rp In Selection
With Rp
If .Offset(, 1).Value = 84500 Then
Set Rq = Ss.Range("a" & Ss.Range("a1048576").End(xlUp).Row + 1)
Rq.Value = .Value
Rq.Offset(, 1).Value = .Offset(, 2).Value
Rq.Offset(, 2).Value = .Offset(, 13).Value
Rq.Offset(, 3).Value = .Offset(, 14).Value
Rq.Offset(, 4).Value = .Offset(, 15).Value
Rq.Offset(, 5).Value = Sgn(.Offset(, 12).Value - .Offset(, 11).Value)
End If
If .Offset(, 16).Value = 0 And .Offset(, 16).Value <> "" Then
Rq.Offset(, 6).Value = .Offset(, 1).Value / 100
ElseIf .Offset(, 16).Value <> 0 Then
Rq.Offset(, 7).Value = .Offset(, 1).Value / 100
Rq.Offset(, 8).Value = .Offset(, 16).Value * 10000
End If
If .Offset(, 17).Value = 0 And .Offset(, 17).Value <> "" Then
Rq.Offset(, 9).Value = .Offset(, 1).Value / 100
ElseIf .Offset(, 17).Value <> 0 Then
Rq.Offset(, 10).Value = .Offset(, 1).Value / 100
Rq.Offset(, 11).Value = .Offset(, 17).Value * 10000
End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

スプレッドの扱い

テスト結果に少しおかしいところが見つかり

原因はスプレッドの扱い

ややこしいので図にして残しときます。自分用

f:id:kohnodechu:20170202163806p:plain

フィボナッチは効く

今日のポンドルは朝から売って行ってます

161.8%ラインに跳ね返されるだろうと思って

抜けたら1.27で損切りってとこでしょうか

 

メイ首相のユーロ離脱演説で出た上昇から引いたフィボナッチが、ここのところ見事に決まってるのでチャート貼っときます

f:id:kohnodechu:20170202103027p:plain

ポンドル前日高値安値ブレイクアウトシステム

単純に前日レンジをブレイクして、前日レンジか5日間レンジ平均の半値行ったら勝ち、戻ったら負け

 2001年から2011年迄動かしたら使い物になりそう

 あと負けやすいパターンを見つけそれをパスして、フォアードに取ってある2012年から2017年まで動かしてみて、ドローダウンも小さく儲かるようならこれからも行けるだろうと云うことで使い出します

 

表とプロシージャ一応

f:id:kohnodechu:20170203133738p:plain

Sub テスト()
Dim Rp As Range 'rpは日付
Dim Ek As Single, Eu As Single '前日半値エントリー -1はエントリーしない
Dim Ek1 As Single, Eu1 As Single '平均半値エントリー
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each Rp In Selection
With Rp
If .Offset(, 1).Value = 83000 Then '8:45決済
If Ek > 0 Then
.Offset(, 16).Value = .Offset(, 6).Value - Ek
End If
If Ek1 > 0 Then
.Offset(, 18).Value = .Offset(, 6).Value - Ek1
End If
If Eu > 0 Then
.Offset(, 17).Value = Eu - .Offset(, 6).Value - 0.0002
End If
If Eu1 > 0 Then
.Offset(, 19).Value = Eu1 - .Offset(, 6).Value - 0.0002
End If
Ek = 0: Ek1 = 0: Eu = 0: Eu1 = 0
If .Offset(, 6).Value > .Offset(, 8).Value Then '8:45に超してたらやらない
Ek = -1: Ek1 = -1
End If
If .Offset(, 6).Value < .Offset(, 9).Value Then
Eu = -1: Eu1 = -1
End If
ElseIf .Offset(, 1).Value < 83000 And .Offset(, 1).Value > 64500 Then
'あさ8:30まではエントリーしない
If Ek = 0 Then
Ek = -1
End If
If Ek1 = 0 Then
Ek1 = -1
End If
If Eu = 0 Then
Eu = -1
End If
If Eu1 = 0 Then
Eu1 = -1
End If
Else
'勝ち
If Ek > 0 And Ek + .Offset(, 12).Value / 2 < .Offset(, 4).Value Then
.Offset(, 16).Value = .Offset(, 12).Value / 2
Ek = -1
End If
If Ek1 > 0 And Ek1 + .Offset(, 11).Value / 2 < .Offset(, 4).Value Then
.Offset(, 18).Value = .Offset(, 11).Value / 2
Ek1 = -1
End If
If Eu > 0 And Eu - .Offset(, 12).Value / 2 - 0.0002 > .Offset(, 5).Value Then
.Offset(, 17).Value = .Offset(, 12).Value / 2
Eu = -1
End If
If Eu1 > 0 And Eu1 - .Offset(, 11).Value / 2 - 0.0002 > .Offset(, 5).Value Then
.Offset(, 19).Value = .Offset(, 11).Value / 2
Eu1 = -1
End If
'負け
If Ek > 0 And Ek - .Offset(, 12).Value / 2 > .Offset(, 5).Value Then
.Offset(, 16).Value = -.Offset(, 12).Value / 2
Ek = -1
End If
If Ek1 > 0 And Ek1 - .Offset(, 11).Value / 2 > .Offset(, 5).Value Then
.Offset(, 18).Value = -.Offset(, 11).Value / 2
Ek1 = -1
End If
If Eu > 0 And Eu + .Offset(, 12).Value / 2 - 0.0002 < .Offset(, 4).Value Then
.Offset(, 17).Value = -.Offset(, 12).Value / 2
Eu = -1
End If
If Eu1 > 0 And Eu1 + .Offset(, 11).Value / 2 - 0.0002 < .Offset(, 4).Value Then
.Offset(, 19).Value = -.Offset(, 11).Value / 2
Eu1 = -1
End If
'エントリー
If Ek = 0 And Ek <> -1 And Ek1 <> -1 And .Offset(, 8).Value < .Offset(, 4).Value Then
Ek = .Offset(, 8).Value + 0.0002: Ek1 = .Offset(, 8).Value + 0.0002
.Offset(, 16).Value = 0: .Offset(, 18).Value = 0
End If
If Eu = 0 And Eu <> -1 And Eu1 <> -1 And .Offset(, 9).Value > .Offset(, 5).Value Then
Eu = .Offset(, 9).Value: Eu1 = .Offset(, 9).Value
.Offset(, 17).Value = 0: .Offset(, 19).Value = 0
End If
End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub