Fix Dollar Amout of Equity固定金额交易一手合约
Fix Dollar Amout of Equity固定金额交易一口合约
一种资金管理的模式
Fix Dollar Amount of Equity,固定金额交易一口合约。 设定我们有多少钱才能够交易一口合约。这个资金管理是很多人使用的模式。
市场 S&P
(美国股票市场)
目前 价位约 1000点,10点 为 1%
期货 minis&P
保证金 5000
一点
50
合约价值 约 50000
设 一位操作者
资金
100000
胜率笔 65%
平均赢 700 , 约1.4%
平均输 900 , 约1.8%
盈亏比 0.7778
期望值 0.65* 700 / (700+900)-0.35*900/(700+900) =0.0875
(normalize 归一化 0 到 1)
依这些条件 ,编写一程式, 追踪 400次的交易,
在不同金额操作下 ,获利多少, 回测多少。
测试结果大概如下表
50---pass
固定金额
累积金额
回测 20%以上的次数
平均 %
最大回测 %
死亡-pass
5000
1258885
67
36
76
15
10000
766311
91
36
74
5
25000
310235
57
26
47
0
30000
329519
37
26
40
0
50000
220482
10
22
34
0
1- pass 表400次的交易
50—pass
交易 50 次的 1---pass。
VB你懂 有兴趣 可看下面程式
'command1 commandbutton
'label1 label
'label2 label
'label3 label
'label4 label
'text1 textbox
'list1 listbox
'list2 listbox
程式内容
'==============================================
Dim wr, wfr, p, op, maxlost, tm, tn, tnn, wma, fma, fdollar, lostbroke
Dim wrp(801), wm(801), fm(801), n(801), twm, tfm, twn, tfn, sm(800)
Dim winprice(10000), failprice(10000), allp, sp, sv, x, w, i, v, pri, wcv, fcv
Dim pass_sm(100), pass_ret(1000)
Private Sub Command1_Click()
'test 11
testn = 51
kkk = 1
ttt = 1
fdollar = Val(Text1.Text)
223344:
If kkk = testn Then GoTo 112233
'op = (( 0.7778 + 1 ) * 0.65 - 1 ) / 0.7778 = 0.20 = 20.0%
'10 0000 本金
'wma=700..1.4%..fma=900....1.8%1point 50$美金10point=500 mini S&P 1000点 合约价值5万美金
'期望值 0.0875 0.087*1000= 87
tm = 100000
wr = 0.65
wfr = 0.7778
op = ((wfr + 1) * wr - 1) / wfr'kelly
wma = 700
fma = 900
maxlost = 7000'14%
bn = Int(tm / fdollar)
'求机率分布
Call pd
tnn = 400 '笔数
twm = 1
tfm = 1
i = 1
List1.Clear
t_wfr = 1
'一回测试
'Do While Abs(t_wr - wr) > 0.005 Or Abs(t_wfr - wfr) > 0.005 Or Abs(t_wma - wma) > 5 Or Abs(t_fma - fma) > 5
wrt = 0
tfm = 0
twm = 0
twn = 0
tfn = 0
i = 1
s = tm
bnp = bn
Do While i <= tnn
q = Int(Rnd * 10000) + 1
If q <= 10000 - 10000 * wr Then
wrp(i) = -1
'm = Int(Rnd * fma * 2)
x = Int(Rnd * allp)
m = failprice(x) / fcv
fm(i) = -m * bnp
n(i) = bnp
tfm = tfm + m * bnp
tfn = tfn + bnp
s = s - m * bnp
Else
wrp(i) = 1
'm = Int(Rnd * wma * 2)
x = Int(Rnd * allp)
m = winprice(x) / wcv
wm(i) = m * bnp
n(i) = bnp
twm = twm + m * bnp
twn = twn + bnp
s = s + m * bnp
End If
'======================================================
bnp = Int(s / fdollar)
List1.AddItem i & "" & s & " " & bnp
i = i + 1
Loop
t_wr = twn / (twn + tfn)
If twn <> 0 Then t_wma = twm / twn
If tfn <> 0 Then t_fma = tfm / tfn
If t_fma <> 0 Then t_wfr = Abs(t_wma / t_fma)
'Loop
lostbroke = 0
s = tm
s_max = tm
s_min = tm
twm = 0
tfm = 0
tn = 0
twn = 0
tfn = 0
For i = 1 To tnn
If wrp(i) = 1 Then
s = s + wm(i)
twm = twm + wm(i)
twn = twn + n(i)
sm(i) = s
Else
s = s + fm(i)
tfm = tfm + fm(i)
tfn = tfn + n(i)
sm(i) = s
End If
List1.AddItem " i= " & i & "total money= " & Int(s) & "number= " & n(i)
If s < tm * 0.3 Then
i = 800
lostbroke = 1
End If
Next
List1.ListIndex = List1.ListCount - 1
tn = twn + tfn
If twn <> 0 Then t1 = twm / (twn)
If tfn <> 0 Then t2 = tfm / (tfn)
If t2 <> 0 Then t3 = Abs(t1 / t2)
pass_sm(kkk) = Int(s)
kkk = kkk + 1
If lostbroke = 1 Then
List2.AddItem "" & kkk - 1 & "pass money= " & Int(s) & " " & "lost die"
Else
List2.AddItem "" & kkk - 1 & "pass money= " & Int(s) & " " & " wr=" & Int(twn / tn * 100) / 100 & " wfr= " & Int(t3 * 100) / 100 & " wma= " & Int(t1) & " fma= " & Int(t2) & " total operate number=" & tn
End If
'====================================== find maxdrawdown
If lostbroke = 0 Then
s_max = sm(1)
s_min = sm(1)
timemax = 1
timemin = 1
midv = 0.2 '20%
For i = 2 To tnn
If sm(i) > s_max Then
s_max = sm(i)
timemax = i
End If
If sm(i) < s_min Then
s_min = sm(i)
timemin = i
End If
If (s_max - s_min) / s_max >= midv And timemax > timemin Then 'up motion
If timemax + 11 < i Then '7 min 没创新高
'List2.AddItem 1
s_min = sm(i)
timemin = i
End If
End If
If Abs(s_max - s_min) / s_max >= midv And timemax < timemin Then 'down motion
If timemin + 11 < i Then '7 min 没创新高
List2.AddItem Int(s_max) & "" & Int(s_min) & " " & Int(Abs(s_max - s_min) / s_max * 100) & "% " & timemax & " " & timemin
pass_ret(ttt) = Int(Abs(s_max - s_min) / s_max * 100)
ttt = ttt + 1
s_max = sm(i)
timemax = i
End If
End If
Next
End If
'==========================================================================
GoTo 223344
112233:
'================统计
s = 0
s_max = 0
s_min = 1E+30
s_maxret = 0
s_minret = 1E+21
qqq = 0
For i = 1 To testn - 1
s = s + pass_sm(i)
If pass_sm(i) > s_max Then s_max = pass_sm(i)
If pass_sm(i) < s_min Then s_min = pass_sm(i)
If pass_sm(i) <= tm * 0.3 Then qqq = qqq + 1
Next
List2.AddItem "===================================== "
List2.AddItem "total " & testn - 1 & " pass "
List2.AddItem "average total money= " & Int(s / (testn - 1))
List2.AddItem "max total money= " & Int(s_max)
List2.AddItem "min total money= " & Int(s_min)
List2.AddItem "===================================== "
List2.AddItem "die total= " & qqq & " pass "
s = 0
s_maxret = 0
s_minret = 1E+21
For i = 1 To ttt - 1
s = s + pass_ret(i)
If pass_ret(i) > s_maxret Then s_maxret = pass_ret(i)
Next
List2.AddItem "===================================== "
List2.AddItem "return up 20% total " & ttt - 1 & " 次 "
If ttt <> 1 Then List2.AddItem "average return" & Int(s / (ttt - 1)) & "% "
List2.AddItem "max return" & Int(s_maxret) & "% "
'======================================
End Sub
Private Sub Form_Load()
Randomize
End Sub
Sub pd()
sp = 0
sv = 0
w = 1
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
sp = sp + p
v = Int(200 * x * p)
sv = sv + v
Next
'List1.AddItem sp & " " & " " & sv & " " & sv / sp
fma = 900
wma = 700
wcv = (sv / sp) / wma
fcv = (sv / sp) / fma
allp = sp'所有的状况
sp = 0
sv = 0
w = 0
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
If p <> 0 Then
For k = 1 To p
failprice(w + k) = x * 200
Next
w = w + p
End If
sp = sp + p
v = Int((200 * x * p) / fcv)
sv = sv + v
Next
'List1.AddItem "fail ====>>>> " & sp & " " & sv & " " & Int(sv / sp)
sp = 0
sv = 0
w = 0
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
If p <> 0 Then
For k = 1 To p
winprice(w + k) = x * 200
Next
w = w + p
End If
sp = sp + p
v = Int((200 * x * p) / wcv)
sv = sv + v
Next
'List1.AddItem "win====>>>" & sp & " " & sv & " " & Int(sv / sp)
End Sub
[ 本帖最后由 fengyang2 于 2011-1-29 16:02 编辑 ] 太数学的东西没多少人喜欢 人生大盖就是如此
在我买房子的经验里
我讶异的发现
多数人不会真实的告诉你 他买多少钱
譬如 真实价格 买100W
他会加上30万 跟你说130多W吧
我不懂这心态 这样会粉爽吗 认为自己增加粉多吗了
如此乱搞数学我超不喜欢的
这一篇 文章 好像挺冷的 让我胡乱--乱七八糟的 联想到此....
发这一篇文 我有目的 -----再乱数模似的过程--- 就表达清楚的??过程----
还是不想说 能经过 自己的认知 想通了最后那答案 会跟随着你比较久 那才会成为你的东西~~~ 谢谢风扬兄的分享:)
风扬兄还会编程,实在太牛了:)
很多人可能是以为要自己导入代码,就没尝试了。
而剩下的不少人可能是没有耐心细看软件就关掉了。
疯兄----
我会发这篇---最主要是因为你上一篇文---#*22*# 呵呵
您要不要整个原始程式文件阿~~~^_^
[ 本帖最后由 fengyang2 于 2011-1-24 08:35 编辑 ] 要啊:)我VB6都装好了:)
谢谢风扬兄啊:) 疯兄------fd_source.rar....放好了...
程式中 说明的部分可能会变成乱码..因为简体 与繁体 冲突的关系
不影响程式的执行..说明的部分..就看这个帖----的简体说明
程式若部分看不懂...没关系....提出来..我有空会说明^_^ 谢谢风扬兄分享:)
我已经下了附件:)今晚研究一下:)VB只学过一点点皮毛。不过我老婆是拿VB考过证的:)有不明白的地方再请教风扬兄#*19*# #*)*# 这是什么模型?一笔数据就能做回归分析?你们也太牛了,呵呵 改了一下描述,也不知道改对了没有:)
[ 本帖最后由 清醒疯子 于 2011-1-28 02:18 编辑 ] 初始资金 10 0000
最大10 0000
****
都对阿~~~*d1*# ^_^
...
..
右边的 LISTBOX
只保留 最后 一个 PASS的明细资料 如果没有改错的话,就有疑问了,3万开一口,比如图中第386笔,27.5万,是不是应该开9口才对呢?而不是5手。
看了两天,还是猜不出源码的意思:)
比如SUB PD中的这段计算:
Sub pd()
sp = 0
sv = 0
w = 1
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
sp = sp + p
v = Int(200 * x * p)
sv = sv + v
Next
它究竟是用来完成什么功能的呢?:) '哈 犯了太有自信的错
'疯兄 细心 与 利害哦 ^_^
'更正如下
If q <= 10000 - 10000 * wr Then
wrp(i) = -1
'm = Int(Rnd * fma * 2)
x = Int(Rnd * allp)
m = failprice(x) / fcv
fm(i) = -m * bnp
n(i) = bnp
tfm = tfm + m * bnp
tfn = tfn + bnp
s = s - m * bnp '错在这一行 原来是 S=S-M 改成 S=S-M*BNP
Else
wrp(i) = 1
'm = Int(Rnd * wma * 2)
x = Int(Rnd * allp)
m = winprice(x) / wcv
wm(i) = m * bnp
n(i) = bnp
twm = twm + m * bnp
twn = twn + bnp
s = s + m * bnp '错在这一行 原来是 S=S+M 改成 S=S+M*BNP
End If
'第2个错误
PD() 函属中
更正成
fma = 900
wma = 700
这2行 是垃圾码 可以删掉
' 利用乱数模似 WMA 与FMA
' 这一行的功能
'm = Int(Rnd * fma * 2)
' 等于这二行
x = Int(Rnd * allp)
m = failprice(x) / fcv
'm = Int(Rnd * fma * 2)
模似 4百个整数 数值落在 0到 2*FMA 之间 此范围的任一值 机率一样
所以 4百个乱数的总合 / 400此值会接近 FMA
x = Int(Rnd * allp)
m = failprice(x) / fcv
这二行功能同上的一行数学式子模似 FMA
利用 常态分布(normal distribution),高斯分布(Gaussian distribution)
模似 FMA
我印象
模似 4百个整数 数值落在 0到 3.2*FMA 之间, 此范围的任一值 机率符合高斯的自然分
布 机率都不一样
PD()这函数所写的就是 利用高斯的自然分布 模似 FMA
高斯的数学繁体网站
http://tw.knowledge.yahoo.com/question/question?qid=1507010110720
**
注...模似的范围 跟实际 不一样的地方 在于输的金额 会更大 10倍的FMA 都有可能
虽然 机率 粉低........在重挫就有机率发生.....
下面的资料 供你参考
去年 实战 在输的单子平均输 约在1377元
(市场约8000点 1点 200 双边手续费总共 约200 单位台币)
第一列第一栏 0到 200第2列 第2栏 200到 400
第一列 第二栏 共出现 6337手 输在 0到 200 之间
第二列 第二栏 共出现 5373手 输在 200到 400之间
其他列 依此类推....符合高斯自然分布...看起来有点像..数学的比对 我就没做了...
200 6337
400 5373
600 4280
800 2916
1000 2253
1200 1598
1400 1423
1600 975
1800 844
2000 632
2200 622
2400 486
2600 459
2800 382
3000 354
3200 281
3400 300
3600 205
3800 252
4000 188
4200 200
4400 169
4600 160
4800 126
5000 138
5200 99
5400 133
5600 79
5800 110
6000 82
6200 90
6400 70
6600 81
6800 51
7000 62
7200 41
7400 66
7600 45
7800 52
8000 44
8200 48
8400 24
8600 52
8800 26
9000 39
9200 36
9400 29
9600 21
9800 29
10000 19
10200 21
10400 13
10600 21
10800 17
11000 20
11200 13
11400 22
11600 12
11800 17
12000 13
12200 19
12400 11
12600 11
12800 10
13000 10
13200 5
13400 12
13600 6
13800 8
14000 7
14200 16
14400 4
14600 12
14800 3
15000 9
15200 6
15400 9
15600 5
15800 11
16000 2
16200 3
16400 5
16600 4
16800 7
17000 5
17200 2
17400 6
17600 2
17800 8
18000 1
18200 5
18400 1
18600 5
18800 1
19000 4
19200 0
19400 4
19600 1
19800 11
20000 0
20200 3
20400 1
20600 5
20800 0
21000 0
21200 3
21400 5
21600 2
21800 2
22000 1
22200 2
22400 0
22600 3
[ 本帖最后由 fengyang2 于 2011-1-29 15:54 编辑 ] 非常感谢风扬兄的耐心讲解:)
回老婆娘家的几天,继续看风扬兄这个代码。再添加了一些中文描述。本来想着回来就发的,不知道为什么回来后又忘了:)
话说,以后都不背本本回老婆娘家了,没座位,背得重死。以后会买个10吋小本本:)
下面的,是我加了中文描述的代码。嗯,一些变量名也改成汉语拼音了。同样的,不知道改错了没有:)
Dim shenlv, yinkuibi, p, zhuijiacangwei, maxlost, chushizijin, jiaoyichishu, xujiaoyibishu, meibiyinli, meibikuisun, gudincangbi, lostbroke
Dim peilv(801), biyinlijine(801), bikuisunjine(801), kaichangshoushushuzhu(801), zongyinlijine, zongkuisunjine, yinlichishu, kuisunchishu, shijijineshuzhu(800)
Dim winprice(10000), failprice(10000), allp, sp, sv, x, w, i, v, pri, wcv, fcv
Dim shilunjineshuzhu(100), pass_ret(1000)
'Fix Dollar Amount of Equity,固定金额交易一口合约。 设定我们有多少钱才能够交易一口合约。
Private Sub Command1_Click()
'test 11
chaobiaolunshu = 51
shichelunshu = 1
shiechishujiayi = 1
gudincangbi = Val(Text1.Text)
223344:
If shichelunshu = chaobiaolunshu Then GoTo 112233
'zhuijiacangwei = (( 0.7778 + 1 ) * 0.65 - 1 ) / 0.7778 = 0.20 = 20.0%
'10 0000 本金
'meibiyinli=700..1.4%..meibikuisun=900....1.8%1point 50$美金10point=500 mini S&P 1000点 合约价值5万美金
'期望值 0.079 0.079*1000= 79
chushizijin = 100000
shenlv = 0.65
yinkuibi = 0.7778
zhuijiacangwei = ((yinkuibi + 1) * shenlv - 1) / yinkuibi'kelly
meibiyinli = 700
meibikuisun = 900
maxlost = 7000'14%
shou = Int(chushizijin / gudincangbi)
'求机率分布
Call jilvfenbu
xujiaoyibishu = 400'笔数
zongyinlijine = 1
zongkuisunjine = 1
i = 1
List1.Clear
zongyinkuibi = 1
'一回测试
'Do While Abs(zongshenlv - shenlv) > 0.005 Or Abs(zongyinkuibi - yinkuibi) > 0.005 Or Abs(zongmeibiyinli - meibiyinli) > 5 Or Abs(zongmeibikuisun - meibikuisun) > 5
shenlvt = 0
zongkuisunjine = 0
zongyinlijine = 0
yinlichishu = 0
kuisunchishu = 0
i = 1
s = chushizijin 's为实时资金总额
shizhikaichang = shou
Do While i <= xujiaoyibishu
' 利用乱数模似 WMA 与FMA
q = Int(Rnd * 10000) + 1
If q <= 10000 - 10000 * shenlv Then
peilv(i) = -1
'm = Int(Rnd * pinjunkuisun * 2)
x = Int(Rnd * allp)
m = failprice(x) / fcv
bikuisunjine(i) = -m * shizhikaichang
kaichangshoushushuzhu(i) = shizhikaichang
zongkuisunjine = zongkuisunjine + m * shizhikaichang
kuisunchishu = kuisunchishu + shizhikaichang
s = s - m * shizhikaichang '错在这一行 原来是 S=S-M 改成 S=S-M*shizhikaichang
Else
peilv(i) = 1
'm = Int(Rnd * yinlijinea * 2)
x = Int(Rnd * allp)
m = winprice(x) / wcv
biyinlijine(i) = m * shizhikaichang
kaichangshoushushuzhu(i) = shizhikaichang
zongyinlijine = zongyinlijine + m * shizhikaichang
yinlichishu = yinlichishu + shizhikaichang
s = s + m * shizhikaichang '错在这一行 原来是 S=S+M 改成 S=S+M*shizhikaichang
End If
'======================================================
shizhikaichang = Int(s / gudincangbi)
i = i + 1
Loop
zongshenlv = yinlichishu / (yinlichishu + kuisunchishu)
If yinlichishu <> 0 Then zongmeibiyinli = zongyinlijine / yinlichishu
If kuisunchishu <> 0 Then zongmeibikuisun = zongkuisunjine / kuisunchishu
If zongmeibikuisun <> 0 Then zongyinkuibi = Abs(zongmeibiyinli / zongmeibikuisun)
'Loop
lostbroke = 0
s = chushizijin
shifenehuichefenzhi = chushizijin
shifenehuicheguzhi = chushizijin
zongyinlijine = 0
zongkuisunjine = 0
jiaoyichishu = 0
yinlichishu = 0
kuisunchishu = 0
For i = 1 To xujiaoyibishu
If peilv(i) = 1 Then
s = s + biyinlijine(i)
zongyinlijine = zongyinlijine + biyinlijine(i)
yinlichishu = yinlichishu + kaichangshoushushuzhu(i)
shijijineshuzhu(i) = s
Else
s = s + bikuisunjine(i)
zongkuisunjine = zongkuisunjine + bikuisunjine(i)
kuisunchishu = kuisunchishu + kaichangshoushushuzhu(i)
shijijineshuzhu(i) = s
End If
List1.AddItem "第 " & i & "笔资金= " & Int(s) & "手= " & kaichangshoushushuzhu(i)
If s < chushizijin * 0.3 Then
i = 800
lostbroke = 1
End If
Next
List1.ListIndex = List1.ListCount - 1
jiaoyichishu = yinlichishu + kuisunchishu
If yinlichishu <> 0 Then t1 = zongyinlijine / (yinlichishu)
If kuisunchishu <> 0 Then t2 = zongkuisunjine / (kuisunchishu)
If t2 <> 0 Then t3 = Abs(t1 / t2)
shilunjineshuzhu(shichelunshu) = Int(s)
shichelunshu = shichelunshu + 1
If lostbroke = 1 Then
List2.AddItem "第" & shichelunshu - 1 & "轮 资金= " & Int(s) & " " & "破产"
Else
List2.AddItem "第" & shichelunshu - 1 & "轮 资金= " & Int(s) & " " & " 胜率=" & Int(yinlichishu / jiaoyichishu * 100) / 100 & " 盈亏比= " & Int(t3 * 100) / 100 & " 平均盈利= " & Int(t1) & " 平均亏损= " & Int(t2) & " 交易次数=" & jiaoyichishu
End If
'====================================== find maxdrawdown发现最大回撤
If lostbroke = 0 Then
shifenehuichefenzhi = shijijineshuzhu(1)
shifenehuicheguzhi = shijijineshuzhu(1)
fenzhibi = 1
guzhibi = 1
midv = 0.2 '20%
For i = 2 To xujiaoyibishu
If shijijineshuzhu(i) > shifenehuichefenzhi Then
shifenehuichefenzhi = shijijineshuzhu(i)
fenzhibi = i
End If
If shijijineshuzhu(i) < shifenehuicheguzhi Then
shifenehuicheguzhi = shijijineshuzhu(i)
guzhibi = i
End If
If (shifenehuichefenzhi - shifenehuicheguzhi) / shifenehuichefenzhi >= midv And fenzhibi > guzhibi Then 'up motion
If fenzhibi + 11 < i Then '7 min 没创新高
'List2.AddItem 1
shifenehuicheguzhi = shijijineshuzhu(i)
guzhibi = i
End If
End If
If Abs(shifenehuichefenzhi - shifenehuicheguzhi) / shifenehuichefenzhi >= midv And fenzhibi < guzhibi Then 'down motion
If guzhibi + 11 < i Then '7 min 没创新高
List2.AddItem "资金峰值" & "" & "资金谷值" & " " & "回撤" & "% " & "峰值笔" & " " & "谷值笔"
List2.AddItem Int(shifenehuichefenzhi) & "" & Int(shifenehuicheguzhi) & " " & Int(Abs(shifenehuichefenzhi - shifenehuicheguzhi) / shifenehuichefenzhi * 100) & "% " & fenzhibi & " " & guzhibi
pass_ret(shiechishujiayi) = Int(Abs(shifenehuichefenzhi - shifenehuicheguzhi) / shifenehuichefenzhi * 100)
shiechishujiayi = shiechishujiayi + 1
shifenehuichefenzhi = shijijineshuzhu(i)
fenzhibi = i
End If
End If
Next
End If
'==========================================================================
GoTo 223344
112233:
'================统计
s = 0
shifenehuichefenzhi = 0
shifenehuicheguzhi = 1E+30
shifenehuichefenzhiret = 0
shifenehuicheguzhiret = 1E+21
pochan = 0
For i = 1 To chaobiaolunshu - 1
s = s + shilunjineshuzhu(i)
If shilunjineshuzhu(i) > shifenehuichefenzhi Then shifenehuichefenzhi = shilunjineshuzhu(i)
If shilunjineshuzhu(i) < shifenehuicheguzhi Then shifenehuicheguzhi = shilunjineshuzhu(i)
If shilunjineshuzhu(i) <= chushizijin * 0.3 Then pochan = pochan + 1
Next
List2.AddItem "===================================== "
List2.AddItem "总共 " & chaobiaolunshu - 1 & " 轮 "
List2.AddItem "平均资金: " & Int(s / (chaobiaolunshu - 1))
List2.AddItem "资金峰值: " & Int(shifenehuichefenzhi)
List2.AddItem "资金谷值: " & Int(shifenehuicheguzhi)
List2.AddItem "===================================== "
List2.AddItem "破产次数= " & pochan & " 轮 "
s = 0
shifenehuichefenzhiret = 0
shifenehuicheguzhiret = 1E+21
For i = 1 To shiechishujiayi - 1
s = s + pass_ret(i)
If pass_ret(i) > shifenehuichefenzhiret Then shifenehuichefenzhiret = pass_ret(i)
Next
List2.AddItem "===================================== "
List2.AddItem "回撤20%以上: " & shiechishujiayi - 1 & " 次"
If shiechishujiayi <> 1 Then List2.AddItem "平均回撤:" & Int(s / (shiechishujiayi - 1)) & "% "
List2.AddItem "最大回撤:" & Int(shifenehuichefenzhiret) & "% "
'======================================
End Sub
Private Sub Form_Load()
Randomize
Command1.Caption = "点击运行"
Text2.Text = "初始资金:100000美元 胜率:65%盈亏比:0.7778 平均盈利:700 平均亏损:900"
Text3.Text = "(最小5000,最大100000)固定仓比:"
End Sub
Sub jilvfenbu() '利用高斯的自然分布 模似 FMA
'模似 4百个整数 数值落在 0到 2*FMA 之间 此范围的任一值 机率一样
'所以 4百个乱数的总合 / 400此值会接近 FMA
'x = Int(Rnd * allp)
'm = failprice(x) / fcv
'这二行功能同上的一行数学式子模似 FMA
'利用 常态分布(normal distribution),高斯分布(Gaussian distribution)模似 FMA
'模似 4百个整数 数值落在 0到 3.2*FMA 之间, 此范围的任一值 机率符合高斯的自然分布 机率都不一样
sp = 0
sv = 0
w = 1
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
sp = sp + p
v = Int(200 * x * p)
sv = sv + v
Next
'List1.AddItem sp & " " & " " & sv & " " & sv / sp
meibikuisun = 900
meibiyinli = 700
wcv = (sv / sp) / meibiyinli
fcv = (sv / sp) / meibikuisun
allp = sp'所有的状况
sp = 0
sv = 0
w = 0
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
If p <> 0 Then
For k = 1 To p
failprice(w + k) = x * 200
Next
w = w + p
End If
sp = sp + p
v = Int((200 * x * p) / fcv)
sv = sv + v
Next
'List1.AddItem "fail ====>>>> " & sp & " " & sv & " " & Int(sv / sp)
sp = 0
sv = 0
w = 0
For x = 0 To 10.4 Step 0.1
p = (1 / (Sqr(2 * 3.1416) * 3)) * Exp(-((x - 1) ^ 2 / (2 * 3 * 3)))
p = Int(p * 1000)
If p <> 0 Then
For k = 1 To p
winprice(w + k) = x * 200
Next
w = w + p
End If
sp = sp + p
v = Int((200 * x * p) / wcv)
sv = sv + v
Next
'List1.AddItem "win====>>>" & sp & " " & sv & " " & Int(sv / sp)
End Sub 都是牛人#*d1*# ,我竟然看不懂#*27*# 疯兄~~~哇 还背老婆回家 恩爱哦 羡慕哦
~~我回想我背过吗? 20多年前刚认识时,粉激情时 可能背过吧 那为了好玩 哈!哈。
操作结果同就好 ..汉语拼音我不会..所以..看也看不懂..偷懒不看了..#*29*#
[ 本帖最后由 fengyang2 于 2011-2-12 10:31 编辑 ] 哈哈哈哈哈,我是背本本啦:)
再次感谢风扬兄的分享:)
页:
[1]