PU-METALのブログ

日銀にはウンザリなので外貨専になりました

ブローカー替えてバックテスト

エクセルとメタエディター見直しても悪いところ見当たらず

楽天MT4があかんのでは?ともう1社使ってる外為ファイネストでやってみた

f:id:kohnodechu:20170323131630p:plain

利益減ったけどMDDが予定通りの840ドルに。それと直近に最高値更新してるのにも好感が持てました。

やっぱ楽天MT4おかしいわ。見てたら昼間何も無い時に急落?と思ったらスプレッドが広がっただけだったり・・・

 

分解してエクセルと比較

f:id:kohnodechu:20170323132114p:plain

薄利なのは変わりないがまあ納得行くかな

エクセルでデータ貰ってるForexciteって良いブローカーなのかも?

これで完成と云うことにしといたります

 

外為ファイネストのヒストリカルデータは香港時間と以前書いたがもうひとつ

サマータイム制。香港にサマータイム有ったっけ?と調べましたわw

グローバル企業ってもんでしょうか

ドル円8時間足システムEA化完了

取り敢えず

成績表

f:id:kohnodechu:20170322130128p:plain

予想より利益減ってるしMDDが1200ドルに増えてるし。15時から動かすのと23時から動かすのと2システムだからまあ良い方とは思うが

2万円千通貨の複利運用って感じか

 

しかし納得いかんのでエクセルで作った時と何が違うのか考え中

f:id:kohnodechu:20170322130740p:plain

上がテスターの結果を分解したもの下がエクセルで作った時の

似てるけど何か違うのね

動作はおかしく無さそう

f:id:kohnodechu:20170322152132p:plain

 

もう1回エクセルとメタエディターよく見直してみよう

 

 

お彼岸2日悩んだ

金曜の夕方何となく完成した?EA

どうも挙動がおかしいと土曜にお墓参りと土筆採り済ませて昨日出て来た

ああじゃ無いこうじゃ無いと試行錯誤しても解決出来ず今日も・・・

やっと判った

 

指値を求める関数の宣言をdoubleでしないといけないところをintにしてたのね

変数の方は何十回と見直してるんだけどこの関数の頭には目が行きませんでしてん

ど素人ってもんですな

 

これから注意するようここに

f:id:kohnodechu:20170320170405p:plain

 

くたびれ果てたから直すの明日にして飲んで帰るわ

 

ドル円8時間足ブレイクアウトⅡ

出来た

今までで最強かも

これは2日間だけの値動きを見てエントリーするシステム

東京時間はお休み

ロンドン時間とNY時間でエントリー条件が違って最大2枚エントリーするんだけど

2003年から動かしてMAXDDは842円。1枚あたりにすると極上です

 

損益累計曲線

f:id:kohnodechu:20170316131329p:plain

こいつをこいつをEA化するぞ

難儀するのは目に見えてるけど

ドル円8時間足ブレイクアウト

取り敢えず損益累計曲線

f:id:kohnodechu:20170315125352p:plain

駄目だ

ただロンドン時間の安値ブレイクだけは逸品。薄利だけど

4時間のEA作る前に下書きとしてこれ作ってみよ

 

5分足から8時間足作ってテストするところまで一連のプロシージャ

進化したので置いとこう

f:id:kohnodechu:20170315130904p:plain

Sub 番() '8時間足に1-3の番号をふる
Dim Rp As Range 'rpは日付
Dim Kai As Long '80000or70000サマータイム
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each Rp In Selection
With Rp
If .Offset(-1).Value <> .Value Then
If .Offset(, 1).Value = 70000 Then
Kai = 70000
ElseIf .Offset(, 1).Value = 80000 Then
Kai = 80000
End If
End If
If .Offset(, 1).Value - Kai >= 0 Then
.Offset(, 2).Value = Int((.Offset(, 1).Value - Kai) / 80000) + 1
Else
.Offset(, 2).Value = Int((240000 + .Offset(, 1).Value - Kai) / 80000) + 1
End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

 

Sub 時間足()
Dim Rp As Range 'rpは日付
Dim Hh1 As Single, Th1 As Single, Yh1 As Single, Oh1 As Single '前日8時間足
Dim Hk1 As Single, Tk1 As Single, Yk1 As Single, Ok1 As Single '8時間足計算中
Dim Hh2 As Single, Th2 As Single, Yh2 As Single, Oh2 As Single
Dim Hk2 As Single, Tk2 As Single, Yk2 As Single, Ok2 As Single
Dim Hh3 As Single, Th3 As Single, Yh3 As Single, Oh3 As Single
Dim Hk3 As Single, Tk3 As Single, Yk3 As Single, Ok3 As Single
Dim Wa1 As Single, Wb1 As Single '値幅a前々b前
Dim Wa2 As Single, Wb2 As Single
Dim Wa3 As Single, Wb3 As Single
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each Rp In Selection
With Rp
Select Case .Offset(, 2).Value
Case Is = 1
If .Offset(-1, 2).Value = 3 Then
Hh1 = Hk1: Th1 = Tk1: Yh1 = Yk1: Oh1 = Ok1
Hk1 = .Offset(, 3).Value
Tk1 = .Offset(, 4).Value
Yk1 = .Offset(, 5).Value
Wa1 = Wb1
Wb1 = Th1 - Yh1
Else
If .Offset(, 4).Value > Tk1 Then
Tk1 = .Offset(, 4).Value
End If
If .Offset(, 5).Value < Yk1 Then
Yk1 = .Offset(, 5).Value
End If
If .Offset(1, 2).Value = 2 Then '最後に終値
Ok1 = .Offset(, 6).Value
End If
End If
.Offset(, 7).Value = Hh1
.Offset(, 8).Value = Th1
.Offset(, 9).Value = Yh1
.Offset(, 10).Value = Oh1
.Offset(, 11).Value = Wa1
.Offset(, 12).Value = Wb1
If Tk3 > Tk2 Then '前足と前々足の比較
.Offset(, 13).Value = 1
Else
.Offset(, 13).Value = 0
End If
If Yk3 < Yk2 Then
.Offset(, 14).Value = 1
Else
.Offset(, 14).Value = 0
End If
If Hk3 < Ok3 Then '前足の上下
.Offset(, 15).Value = 1
Else
.Offset(, 15).Value = -1
End If
Case Is = 2
If .Offset(-1, 2).Value = 1 Then
Hh2 = Hk2: Th2 = Tk2: Yh2 = Yk2: Oh2 = Ok2
Hk2 = .Offset(, 3).Value
Tk2 = .Offset(, 4).Value
Yk2 = .Offset(, 5).Value
Wa2 = Wb2
Wb2 = Th2 - Yh2
Else
If .Offset(, 4).Value > Tk2 Then
Tk2 = .Offset(, 4).Value
End If
If .Offset(, 5).Value < Yk2 Then
Yk2 = .Offset(, 5).Value
End If
If .Offset(1, 2).Value = 3 Then '最後に終値
Ok2 = .Offset(, 6).Value
End If
End If
.Offset(, 7).Value = Hh2
.Offset(, 8).Value = Th2
.Offset(, 9).Value = Yh2
.Offset(, 10).Value = Oh2
.Offset(, 11).Value = Wa2
.Offset(, 12).Value = Wb2
If Tk1 > Tk3 Then '前足と前々足の比較
.Offset(, 13).Value = 1
Else
.Offset(, 13).Value = 0
End If
If Yk1 < Yk3 Then
.Offset(, 14).Value = 1
Else
.Offset(, 14).Value = 0
End If
If Hk1 < Ok1 Then '前足の上下
.Offset(, 15).Value = 1
Else
.Offset(, 15).Value = -1
End If
Case Is = 3
If .Offset(-1, 2).Value = 2 Then
Hh3 = Hk3: Th3 = Tk3: Yh3 = Yk3: Oh3 = Ok3
Hk3 = .Offset(, 3).Value
Tk3 = .Offset(, 4).Value
Yk3 = .Offset(, 5).Value
Wa3 = Wb3
Wb3 = Th3 - Yh3
Else
If .Offset(, 4).Value > Tk3 Then
Tk3 = .Offset(, 4).Value
End If
If .Offset(, 5).Value < Yk3 Then
Yk3 = .Offset(, 5).Value
End If
If .Offset(1, 2).Value = 1 Then '最後に終値
Ok3 = .Offset(, 6).Value
End If
End If
.Offset(, 7).Value = Hh3
.Offset(, 8).Value = Th3
.Offset(, 9).Value = Yh3
.Offset(, 10).Value = Oh3
.Offset(, 11).Value = Wa3
.Offset(, 12).Value = Wb3
If Tk2 > Tk1 Then '前足と前々足の比較
.Offset(, 13).Value = 1
Else
.Offset(, 13).Value = 0
End If
If Yk2 < Yk1 Then
.Offset(, 14).Value = 1
Else
.Offset(, 14).Value = 0
End If
If Hk2 < Ok2 Then '前足の上下
.Offset(, 15).Value = 1
Else
.Offset(, 15).Value = -1
End If
End Select
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

 

Sub テストTO()
Dim Rp As Range 'rpは日付
Dim T As Single, Y As Single '前日高安
Dim Ek As Single, Eu As Single '-1はエントリーしない
Dim Hk As Single, Hu As Single '勝敗価格
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Ek = -1: Eu = -1
For Each Rp In Selection
With Rp
If .Offset(, 2).Value = 3 And .Offset(1, 2).Value = 1 Then '5min前決済
If Ek > 0 Then
.Offset(, 16).Value = .Offset(, 3).Value - Ek
End If
If Eu > 0 Then
.Offset(, 17).Value = Eu - .Offset(, 3).Value - 0.01
End If
Ek = -1: Eu = -1: Hk = 0: Hu = 0
ElseIf .Offset(-1, 2).Value = 3 And .Offset(, 2).Value = 1 Then '3になった時
T = .Offset(, 8).Value
Y = .Offset(, 9).Value
Hk = .Offset(, 12).Value
Hu = .Offset(, 12).Value
If .Offset(, 3).Value < T Then
Ek = 0
End If
If .Offset(, 3).Value > Y Then
Eu = 0
End If
End If
'勝ち
If Ek > 0 And Ek + Hk < .Offset(, 4).Value Then
.Offset(, 16).Value = Hk
Ek = -1: Hk = 0
End If
If Eu > 0 And Eu - Hu - 0.01 > .Offset(, 5).Value Then
.Offset(, 17).Value = Hu
Eu = -1: Hu = 0
End If
'負け
If Ek > 0 And Ek - Hk > .Offset(, 5).Value Then
.Offset(, 16).Value = -Hk
Ek = -1: Hk = 0
End If
If Eu > 0 And Eu + Hu - 0.01 < .Offset(, 4).Value Then
.Offset(, 17).Value = -Hu
Eu = -1: Hu = 0
End If
'エントリー
If Ek = 0 And T < .Offset(, 4).Value Then
Ek = T + 0.01
.Offset(, 16).Value = 0
End If
If Eu = 0 And Y > .Offset(, 5).Value Then
Eu = Y
.Offset(, 17).Value = 0
End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

 

ドル円4時間足システム

安定のブレイクアウト

東京ロンドンニューヨーク時間でエントリー条件を変えてみて上手く行きました

5分足でやったためエクセルの2の20乗行縛りで2003年から2011年の傾向を見て作ってみました

いつものように使うのはロウソク足だけ

 

取り敢えずグラフ

f:id:kohnodechu:20170313152932p:plain

このまま安定して右肩上がりで行ってくれる気がします

 

でも本当はこっちのグラフ

f:id:kohnodechu:20170313153150p:plain

ロンドン時間の売りシステムが理由は不明ですがここ1年酷いDDに遭い、これから回復するか?でやむを得ず外した結果が上のグラフ

後出しじゃんけんみたいでイヤなのですが

 

あとは逆張り試してみたりしてまたEAかするんです

 

 

Do Loop構文

デスクトプーに有った過去システム探訪も一段落し、日足ブレイクシステムの成功に気をよくして4時間足突入

ただ日足ブレイクEAこの糞レンジで3連敗中。過去15年の最大連敗がなのにも拘わらずwwwまあ平均が2なのですが

確定申告は後回しで今週中にやってやるぞと

 

Do Loop構文で昨日無限Loopにはまり今日って事で完成形置いておこう

いつものようにFor  Eachで上から見ていくわけですが、これは日足と違って決済が足をまたぐ仕様にしたので、エントリーしたらその時間を記録しDo Loopを使って何時にいくらで決済されたかを探しに行きますの。そんなプロシージャ

 

シートtest

f:id:kohnodechu:20170308110524p:plain

 

シートsai

f:id:kohnodechu:20170308110554p:plain

 

Sub 最適化準備()
Dim Gyo As Long
Dim Rp As Range 'rpは日付
Dim Rq As Range
Dim P As Long, Q As Long '損益を探りに行くやつ
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(, 2).Value <> .Offset(-1, 2).Value 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
P = 1
Do While .Offset(P, 16).Value = ""
P = P + 1
Loop
Rq.Offset(, 7).Value = .Offset(P, 1).Value / 100
Rq.Offset(, 8).Value = .Offset(P, 16).Value * 100
End If
If .Offset(, 17).Value = 0 And .Offset(, 17).Value <> "" Then
Rq.Offset(, 9).Value = .Offset(, 1).Value / 100
Q = 1
Do While .Offset(Q, 17).Value = ""
Q = Q + 1
Loop
Rq.Offset(, 10).Value = .Offset(Q, 1).Value / 100
Rq.Offset(, 11).Value = .Offset(Q, 17).Value * 100
End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub