ドル円システムのEA化
ほんと良いのでEA化しようと思った
昔々fx-onがEAプログラミングセミナーをされていてそれを受けさせて頂きました。それから225に集中して触ってなかったのでほとんど忘れたような
でも簡単なロジックなので作れるだろうと、そのセミナー資料引っ張り出して作ってはみたもののどうしてもエントリーしてくれない
それでセミナーに無料質問チケットというのが10枚付いていて全く使ってなかったので使えるか聴いてみたところ、もうセミナーもやってないし・・・
でEAつくーるというソフトを紹介され、月1980円で使えますの、それを使ってみました
ロジック全て実装は出来ませんでしたが改造すれば良いやと
出て来たプログラムが難解・・・僕作ったの150行くらいだったのにこれは500行以上(汗
1日掛けてやっとこういう構造かと分かった程度。まだ改造するためには何日かかかりそうなのです
使えるサイトなんかここにメモしとこうと
ドル円完成
取り敢えずグラフ
ポンドルと同様にやってみたら良いの出来ました
ポンドルはっぱ癖が悪い。ドル円は素直
良いわ~DD小さいから1万で千通貨ってところか
複利でやったら年利100%目指せるかも?
捕らぬ狸の皮算用の可能性大だけどね
引き続きユーロドルやってみよう。きっと素直
追記
日単位でDDを計算してみた
2001ー2016のMAXDD6600円ほど
複利でやるんじゃ余裕見て1万3千円で千通貨てとこか
ついでにDD求めるプロシージャ置いとこう
Sub maxdd() 'MDDの計算。上から下へ横へ
Dim P As Long '縱
Dim Q As Long '横
Dim Pd As Single 'DD
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Q = 1 To 5
For P = 0 To Range("a1048576").End(xlUp).Row - 28 '都度変える
With Range("a28") '初日 都度変える
If .Offset(P, Q).Value <> "" Then
Pd = Pd + .Offset(P, Q).Value
If Pd >= 0 Then
Pd = 0
ElseIf Pd < Range("a15").Offset(, Q).Value Then 'MDD欄。都度変える
Range("a15").Offset(, Q).Value = Pd '都度変える
End If
End If
End With
Next
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
カーブフィッテイング
損益の比率を変えて最適値を探してみた
フィボナッチ使って62、50、38の組み合わせ9通りで1番良いのを使って出来た損益累計曲線
2011年迄は当然上がったのだがフォアード期間がパッとしない
カーブフィッテイングてもんだったのね
スパッと半値で行こう
これ単独では使う気しないので他の通貨ペアでもやってみよう
ポンドルブレイクアウトシステム一応完成
取り敢えず損益累計曲線
2012年からのフォアード期間に入ってもMAXDD更新することも無く横這い
ここ2年なんか年利100%有りそう。150ドルで1000通貨くらい
長い目で見たら年利20~30%でこのまま上がって行くのでは?
使った条件は前日の高値安値更新と上下とレンジの大小
この組み合わせで勝率の高そうなものを使ってみました
基本この方法で損益の比率を変えてみたり時間を変えてみたりして利益の向上を図ってみます
損益累計曲線
曜日ごとで相場の癖みたいなもの出ないかとやってみた
駄目だ~
フォアード期間水平
条件付き書式
EXcel2007から簡単にセルの色付けが出来るようになり
フィルターを検討するのにそれを使っている
こんな感じ
取り敢えず条件にもよるが、水曜日はトレンドが出にくいのかブレイクアウトには向いてない気がした。今日も下に行くのかと思いきや戻ったものね
良い条件を探すが
今日のポンドルまた21時間線に跳ね返されるだろうと適当に売り上がりつつ、使えるパターンを求めてを求めてマクロ動かしてみた
前日高値安値ブレイクは取り敢えず正義ということは判ったが、どのパターンも勝率が60%行かない。DDはまだ計算してないが大きいことが予想され・・・
時間、曜日フィルターでも使ってみて、駄目だったら損益の比率を変えてみるかってところなのです
ここまでの表とプロシージャ
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