fengyang2 发表于 2011-1-21 20:20

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 编辑 ]

fengyang2 发表于 2011-1-23 17:33

太数学的东西没多少人喜欢 人生大盖就是如此
在我买房子的经验里

我讶异的发现
多数人不会真实的告诉你 他买多少钱
譬如 真实价格 买100W
他会加上30万 跟你说130多W吧
我不懂这心态 这样会粉爽吗 认为自己增加粉多吗了

如此乱搞数学我超不喜欢的

这一篇 文章 好像挺冷的 让我胡乱--乱七八糟的 联想到此....
发这一篇文 我有目的 -----再乱数模似的过程--- 就表达清楚的??过程----
还是不想说 能经过 自己的认知 想通了最后那答案 会跟随着你比较久 那才会成为你的东西~~~

清醒疯子 发表于 2011-1-24 08:03

谢谢风扬兄的分享:)
风扬兄还会编程,实在太牛了:)

很多人可能是以为要自己导入代码,就没尝试了。
而剩下的不少人可能是没有耐心细看软件就关掉了。

fengyang2 发表于 2011-1-24 08:34

疯兄----
我会发这篇---最主要是因为你上一篇文---#*22*#   呵呵
您要不要整个原始程式文件阿~~~^_^

[ 本帖最后由 fengyang2 于 2011-1-24 08:35 编辑 ]

清醒疯子 发表于 2011-1-25 07:31

要啊:)我VB6都装好了:)
谢谢风扬兄啊:)

fengyang2 发表于 2011-1-26 19:40

疯兄------fd_source.rar....放好了...
程式中   说明的部分可能会变成乱码..因为简体 与繁体 冲突的关系
不影响程式的执行..说明的部分..就看这个帖----的简体说明
程式若部分看不懂...没关系....提出来..我有空会说明^_^

清醒疯子 发表于 2011-1-27 07:54

谢谢风扬兄分享:)
我已经下了附件:)今晚研究一下:)VB只学过一点点皮毛。不过我老婆是拿VB考过证的:)有不明白的地方再请教风扬兄#*19*# #*)*#

jetbilly 发表于 2011-1-27 17:09

这是什么模型?一笔数据就能做回归分析?你们也太牛了,呵呵

清醒疯子 发表于 2011-1-28 02:14

改了一下描述,也不知道改对了没有:)



[ 本帖最后由 清醒疯子 于 2011-1-28 02:18 编辑 ]

fengyang2 发表于 2011-1-28 18:01

初始资金 10 0000
最大10 0000
****
都对阿~~~*d1*#   ^_^

...
..
右边的 LISTBOX
只保留   最后 一个 PASS的明细资料

清醒疯子 发表于 2011-1-29 00:46

如果没有改错的话,就有疑问了,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

它究竟是用来完成什么功能的呢?:)

fengyang2 发表于 2011-1-29 04:09

'哈 犯了太有自信的错
'疯兄 细心 与 利害哦 ^_^
'更正如下

      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 编辑 ]

清醒疯子 发表于 2011-2-10 19:50

非常感谢风扬兄的耐心讲解:)
回老婆娘家的几天,继续看风扬兄这个代码。再添加了一些中文描述。本来想着回来就发的,不知道为什么回来后又忘了:)
话说,以后都不背本本回老婆娘家了,没座位,背得重死。以后会买个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

wangye625302 发表于 2011-2-11 10:04

都是牛人#*d1*# ,我竟然看不懂#*27*#

fengyang2 发表于 2011-2-12 09:47

疯兄~~~哇 还背老婆回家 恩爱哦 羡慕哦
~~我回想我背过吗? 20多年前刚认识时,粉激情时 可能背过吧 那为了好玩 哈!哈。

操作结果同就好 ..汉语拼音我不会..所以..看也看不懂..偷懒不看了..#*29*#

[ 本帖最后由 fengyang2 于 2011-2-12 10:31 编辑 ]

清醒疯子 发表于 2011-2-12 21:28

哈哈哈哈哈,我是背本本啦:)

再次感谢风扬兄的分享:)
页: [1]
查看完整版本: Fix Dollar Amout of Equity固定金额交易一手合约