c语言资金管理系统,拉布谢尔资金管理系统的统计学验证
有三種謊言: 謊言, 可惡的謊言, 以及統(tǒng)計(jì).
簡(jiǎn)介
在很多周末, 我都在深度瀏覽互聯(lián)網(wǎng), 偶然間我碰到了一個(gè)之前從來(lái)沒(méi)有聽(tīng)說(shuō)過(guò)的資金管理系統(tǒng). 它被稱(chēng)為拉布謝爾, 或者取消系統(tǒng)(使用拉布謝爾的外匯交易真空清除系統(tǒng), 俄語(yǔ)版). 英文版描述可以在這里找到. 此系統(tǒng)是馬丁格爾的變種, 因?yàn)槟谑д`以后需要加大您的投注然后在獲利中小贏. 然而,它是一個(gè)不大激進(jìn)的版本, 因?yàn)橄伦⒉⒎请p倍, 而是增加一定數(shù)量.
下面這些段落描述了讓我非常好奇的系統(tǒng)屬性:
"所以, 請(qǐng)注意獲利交易的數(shù)量應(yīng)該超過(guò)33-40%, 這樣才能保證此系統(tǒng)正常工作并獲利!!!"– 這是非常重要的說(shuō)明. 然而, 為什么初始百分比范圍如此之大并不清楚 – 從 33% 到 40%.
"記住, 這種方法可以認(rèn)為是游戲場(chǎng)中的欺騙性陰謀".? –真的嗎?那么, 它真的能有用?!
"但是原則還是一樣的 – 獲勝 33% 可以抵消 66% 的失敗. 所以, 如果您在實(shí)際外匯交易中應(yīng)用此資金管理方法的話(huà), 您需要一個(gè)獲勝幾率在50%以上并且利潤(rùn)因子>=1的系統(tǒng)".
實(shí)際上, 提到的文章聲明了您需要一個(gè)輸贏數(shù)量差不多的系統(tǒng), 勝率大約是50%(或者說(shuō)"比33%要多"). 如果您有這樣一個(gè)系統(tǒng), 拉布謝爾方法可以很容易使您盈利!所以, 既然我們有方法把它應(yīng)用到不錯(cuò)的領(lǐng)域, 我們還有必要去尋找其他的數(shù)學(xué)方法嗎?畢竟, 開(kāi)發(fā)一個(gè)取勝率47%的系統(tǒng)應(yīng)該并不難...
讓我們看看拉布謝爾系統(tǒng)變化的風(fēng)險(xiǎn).
最小的下注通常假定為等于1. 如果我們贏了, 我們的交易規(guī)模保持不變, 而我們的交易余額略有增加.
如果我們輸了, 我們的下注大小增加1, 變成2, 而我們把輸?shù)淖?shù)加到一行記錄上:
-1
如果這次我們贏了, 我們應(yīng)該把2加到記錄上:
-1 2
然后我們回顧這兩個(gè)數(shù)字, 因?yàn)槲覀円呀?jīng)把輸?shù)内A回來(lái)了(換句話(huà)說(shuō), 我們已經(jīng)通過(guò)兩次下注又讓我們的余額增加了1).
現(xiàn)在, 讓我們考慮一個(gè)更長(zhǎng)的失敗序列.
-1
讓我們下2注. 輸了:
-1 -2
讓我們下3注. 輸了:
-1 -2 -3
讓我們下4注. 輸了:
-1 -2 -3 -4
讓我們下5注. 輸了:
-1 -2 -3 -4 -5
讓我們下6注. 又輸了:
-1 -2 -3 -4 -5 -6
讓我們下7注. 我們終于贏了:
-1 -2 -3 -4 -5 -6 +7
這樣, 我們?nèi)サ?#34;-1", "-6"和"+7", 因?yàn)槲覀兊内A盤(pán)抵消了兩次失敗的下注. 下面一次下注是記錄中剩下的第一個(gè)和最后一個(gè)數(shù)值的和, 也就是, 仍然是7. 如果我們贏了:
-2 -3 -4 -5 +7
我們?nèi)サ?"-2", "-5" 和 "+7". 我們下一次的下注大小還是記錄中剩下的第一個(gè)和最后一個(gè)之和. 是的, 仍然是7 (一些使用者推薦為下注再增加1, 這樣如果我們走運(yùn)就能夠得到一個(gè)最小利潤(rùn)而不是0). 如果我們贏了:
-3 -4 +7
我們把記錄中全部數(shù)字去掉, 因?yàn)槲覀円呀?jīng)把我們輸?shù)舻内A回來(lái)了.
如果我們?cè)谥虚g階段輸?shù)袅? 輸?shù)舻南伦⒋笮∫脖挥涗? 下一次下注還是等于記錄中第一個(gè)和最后一個(gè)數(shù)值之和.
所以, 我們最初的結(jié)論是什么?
連續(xù)6次失敗只需要3次獲勝就能抵消掉(然而, 應(yīng)該是連續(xù)獲勝; 我們晚點(diǎn)再討論). 乍一看來(lái), 這個(gè)系統(tǒng)很容易讓我們?cè)谑袌?chǎng)上所向披靡.
下注大小的增長(zhǎng)和馬丁格爾相比明顯變慢. 如果我們把這一序列用在馬丁格爾系統(tǒng)中, 我們最后的那次下注, 大小是最初的64倍.
在上述例子中, 總的存款回撤(輸?shù)舻南伦⒅?只有21, 而使用馬丁格爾的話(huà), 就應(yīng)該是63了.
通過(guò)簡(jiǎn)單計(jì)算顯示, 如果每次下注使用1%的存款, 我們一連輸?shù)?3次才會(huì)輸光我們的資金. 而如果每次用0.1%, 則需要連輸44次. 你可能會(huì)想, "在50/50比例下連輸44次!?這種可能性幾乎沒(méi)有!這就像被隕石砸到一樣!這種可能性對(duì)我不錯(cuò)!", 等等.).
你可以很容易地找到許多關(guān)于馬丁格爾系統(tǒng)回撤和危險(xiǎn)的研究. 實(shí)際上, 你只要用紙和筆自己簡(jiǎn)單算算就能夠知道回撤可能多厲害了. 但是, 我沒(méi)有找到針對(duì)拉布謝爾系統(tǒng)的類(lèi)似研究.
這個(gè)下注系統(tǒng)看起來(lái)非常復(fù)雜, 也就阻礙了其數(shù)學(xué)期望的計(jì)算.
但是讓我們回頭看看在下注中我們輸?shù)舻? 讓我們假定, 我們連輸了6次然后只是贏回兩次而不是3次. 則我們的記錄數(shù)據(jù)看起來(lái)如下:
-3 -4
我們下注7, 然后又輸了:
-3 -4 -7
我們下注10(注意: 當(dāng)我們輸?shù)臅r(shí)候, 下注的大小已經(jīng)從3開(kāi)始增長(zhǎng)而不是1了, 這使我們的存款變得不那么安全了). 我們又輸了:
-3 -4 -7 -10
我們必須下注13了.
所以, 如果我們出現(xiàn)重復(fù)性的失敗, 該系統(tǒng)會(huì)讓我們的加注超過(guò)1. 這看起來(lái)是完全戰(zhàn)勝回撤的唯一方法. 這就是我們的存款真正地陷入危機(jī)了, 因?yàn)槲覀冃枰幌盗袆倮麃?lái)抵消回撤. 在紙上計(jì)算還是看起來(lái)太復(fù)雜了或者至少太麻煩了...
你是否還對(duì)這個(gè)系統(tǒng)能做什么感興趣?如果是的話(huà), 讓我們?cè)僭敿?xì)研究.
設(shè)定任務(wù): 主題與方法
最重要的問(wèn)題就是, 拉布謝爾資金管理系統(tǒng)是否真的能夠把一個(gè)數(shù)學(xué)期望轉(zhuǎn)化為真正的盈利方法. 當(dāng)然, 引用的段落中提到的大約 33% 的勝率就輸贏臨界點(diǎn)聽(tīng)起來(lái)有些不可思議. 但是, 也許49% 或者 50% 的勝率就足夠了?如果不是的話(huà), 拉布謝爾系統(tǒng)有哪些其他優(yōu)勢(shì)呢?
我們將會(huì)使用統(tǒng)計(jì)學(xué), 也就是說(shuō)我們需要開(kāi)發(fā)一個(gè)MQL程序(本例中是MQL4, 我還沒(méi)有完全掌握MQL5). 讓我們的程序來(lái)進(jìn)行數(shù)以百萬(wàn)計(jì)的交易, 并且"清空"成千上萬(wàn)的存款 - 我們將會(huì)在不損壞我們真正資金的情況下分析結(jié)果. 如果程序可以盈利, 將有可能在真實(shí)交易中實(shí)現(xiàn)這算法.
拉布謝爾系統(tǒng)的開(kāi)發(fā)是基于輸贏比率相同的假定的. 其他比率情況下也可以采用此系統(tǒng), 但是這看起來(lái)不大合理. 如果此系統(tǒng)可以影響輸贏比率相同的數(shù)學(xué)期望, 它也應(yīng)該影響其他的比率. 如果不能的話(huà), 我們只是簡(jiǎn)單地浪費(fèi)時(shí)間思考了一個(gè)合適的適應(yīng)方案.
另外, 我們可以把輸贏相同的系統(tǒng)想像成50%贏率的系統(tǒng), 這樣考慮就簡(jiǎn)單多了, 因?yàn)槲覀儗?duì)拋硬幣非常熟悉. 因此, 讓我們把我們的程序叫做硬幣測(cè)試(CoinTest).
首先, 我們應(yīng)該描述我們未來(lái)程序的主要特性:
我們應(yīng)該能夠改變獲勝可能性. 50/50比率只是一個(gè)特殊的平衡條件.
我們應(yīng)該能夠設(shè)置風(fēng)險(xiǎn)水平. 拉布謝爾系統(tǒng)有一個(gè)固定下注大小. 如果我們根據(jù)我們的存款規(guī)模來(lái)擴(kuò)大初始賭注, 我們的存款將永遠(yuǎn)不會(huì)回到最初的狀態(tài), 因?yàn)樗械臄?shù)值都比最初有所改變. 在有回撤退出后, 我們可以重新計(jì)算下注大小, 但是, 這將會(huì)引出難以處理的分?jǐn)?shù). 所以, 我們使用兩個(gè)變量來(lái)設(shè)置風(fēng)險(xiǎn) - 初始存款和初始下注.
有必要設(shè)置每筆存款的最大交易次數(shù). 它應(yīng)該被設(shè)置得足夠大, 這樣我們就能知道, 就算初始風(fēng)險(xiǎn)非常低的時(shí)候我們是否會(huì)損失全部存款. 畢竟, 如果存款持續(xù)增長(zhǎng), 這個(gè)過(guò)程可能是無(wú)限的, 我們可能永遠(yuǎn)都不知道結(jié)果.
我們應(yīng)該有能力檢查一個(gè)單一的存款的交易序列的結(jié)果, 這既是為了程序的調(diào)試, 也是為了我們可以改變交易邏輯. 把結(jié)果輸出到文件中可以很好滿(mǎn)足我們的目標(biāo).
在我們完成任務(wù), 為單一存款過(guò)程寫(xiě)完代碼后, 我們因該繼續(xù)收集一系列獨(dú)立的存款中(最好)使用不同參數(shù)過(guò)程的統(tǒng)計(jì)數(shù)據(jù). 你要知道, 單一的試驗(yàn)幾乎是沒(méi)有意義的. 統(tǒng)計(jì)結(jié)果也被發(fā)送到文件中. 我們不需要每一個(gè)單獨(dú)存款的歷史.
我們的下注規(guī)模選擇系統(tǒng)可能可以用于真實(shí)交易, 所以我們應(yīng)該把它做成一個(gè)類(lèi).
對(duì)我們來(lái)說(shuō), 現(xiàn)階段在MetaTrader中真的做交易沒(méi)有必要, 因?yàn)闀?huì)耗用很多計(jì)算資源. 我們只需要使用所需的規(guī)模和一個(gè)給定的勝率來(lái)得到隨機(jī)交易的結(jié)果. 使用這種想法, 我們將會(huì)開(kāi)發(fā)一個(gè)腳本程序, 因?yàn)檫@種MQL程序和EA交易或指標(biāo)相比非常適合單獨(dú)運(yùn)行一次.
偽隨機(jī)數(shù)生成器質(zhì)量的統(tǒng)計(jì)學(xué)驗(yàn)證
偽隨機(jī)數(shù)生成器(PRNG)的質(zhì)量對(duì)我們非常重要, 因?yàn)樗鼘⒂糜诙x每個(gè)交易的結(jié)果(贏/輸). 一個(gè)很長(zhǎng)的贏/輸序列分布的準(zhǔn)確性是最重要的. 晚些時(shí)候我們會(huì)嘗試不使用復(fù)雜的數(shù)學(xué)和統(tǒng)計(jì)學(xué)理論對(duì)它進(jìn)行評(píng)估.
這篇文章的目的不是對(duì)PRNG的質(zhì)量做詳細(xì)的研究(否則, 我們必須進(jìn)行15個(gè)不同的測(cè)試). 我們所感興趣的PRNG特點(diǎn)是它不會(huì)影響拉布謝爾系統(tǒng)的測(cè)試結(jié)果, 并不需要復(fù)雜的驗(yàn)證過(guò)程.
MetaTrader 有標(biāo)準(zhǔn)的 MathRand() PRNG 函數(shù). PRNG 序列使用MathSrand() 函數(shù)進(jìn)行初始化.
讓我們寫(xiě)一個(gè)小的腳本程序 (RandFile) 來(lái)檢查標(biāo)準(zhǔn) PRNG 的質(zhì)量. 此腳本程序?qū)⒂袃蓚€(gè)參數(shù):
它應(yīng)該可以生成數(shù)以百萬(wàn)計(jì)的32位隨機(jī)數(shù)(每個(gè)32位隨機(jī)數(shù)通過(guò)3次調(diào)用MathRand()函數(shù), 每個(gè)函數(shù)可以提供15位). 測(cè)量單位通常是10進(jìn)制的二不是2到2的20次方, 因?yàn)槲覀冃枰吹綔y(cè)試的結(jié)果.
CalcSeries 邏輯參數(shù)(是否應(yīng)該計(jì)算相同位序列長(zhǎng)度的分布).
對(duì)位序列長(zhǎng)度分布的計(jì)算是非常耗費(fèi)資源的(增加腳本執(zhí)行時(shí)間十倍). 因而, 它被設(shè)為一個(gè)獨(dú)立的選項(xiàng).
該腳本程序生成如下結(jié)果:
計(jì)算時(shí)間 (顯示于日志中);
全部生成位中1 位 的數(shù)量 (顯示于日志中);
RandFile.bin 文件 — PRNG 運(yùn)行結(jié)果的二進(jìn)制文件;
RandStat.csv 文件 — 包含某些字節(jié)出現(xiàn)頻率的記錄文件;
RandOnesSeries.csv 文件 — 包含"1"位序列長(zhǎng)度的記錄文件;
RandZerosSeries.csv 文件 — 包含"0"位序列長(zhǎng)度的記錄文件.
讓我們生成3個(gè)不同長(zhǎng)度的測(cè)試集:
1000萬(wàn)個(gè)測(cè)試數(shù), 每個(gè)數(shù)字4個(gè)字節(jié)(一共4000萬(wàn)字節(jié));
1億個(gè)測(cè)試數(shù), 每個(gè)數(shù)字4個(gè)字節(jié)(一共4億個(gè)字節(jié));
10億個(gè)測(cè)試數(shù), 每個(gè)數(shù)字4字節(jié)(一共40億個(gè)字節(jié)).
現(xiàn)在讓我們檢查以下參數(shù):
使用WinRAR最大壓縮設(shè)置進(jìn)行壓縮, 包含隨機(jī)數(shù)文件的壓縮率. 高質(zhì)量的隨機(jī)數(shù)據(jù)是很難壓縮的. 當(dāng)然, 文件不能壓縮的程度也不一定表示它們包含隨機(jī)數(shù)的質(zhì)量高. 但是如果它們很容易壓縮, 這表明數(shù)據(jù)具有統(tǒng)計(jì)上的相似性.
"1" 位的數(shù)量:
平衡值
真實(shí)
絕對(duì)偏差
偏差百分率
10М
160 000 000
160 004 431
4 431
0,0027694
100М
1 600 000 000
1 599 978 338
21 662
0,0013539
1000М
16 000 000 000
15 999 996 180
3 820
0,0000239
某些字節(jié)的數(shù)值在隨機(jī)數(shù)文件中出現(xiàn)的頻率:
相同位序列的長(zhǎng)度. 我們將對(duì)每個(gè)大小的樣本生成兩個(gè)圖表:
第一個(gè)顯示某確定長(zhǎng)度相同位的實(shí)際數(shù)量, 以及該系列的長(zhǎng)度(在對(duì)數(shù)刻度)的平衡值;
第二個(gè)顯示實(shí)際量的百分比偏離檢測(cè)到的相同的位序列(在對(duì)數(shù)刻度)的平衡值.
線(xiàn)性圖表是不符合我們要求的, 因?yàn)槲覀儞碛械臄?shù)據(jù)非常分散(在同一圖表上, 數(shù)值從1到4,000,000,000或者從0.00001到6000)另外, 對(duì)數(shù)標(biāo)度的長(zhǎng)系列的平衡值的圖表顯示為直線(xiàn), 而序列長(zhǎng)度增加1,其發(fā)生的概率減少了一半。
所以, 結(jié)論是什么呢?
標(biāo)準(zhǔn)PRNG的效率對(duì)我們的任務(wù)來(lái)說(shuō)是可以接受的.
把包含PRNG運(yùn)行結(jié)果的文件進(jìn)行歸檔, 并不能壓縮它們.
位數(shù)中0和1的數(shù)量基本相同. 當(dāng)樣本規(guī)模增長(zhǎng)時(shí), 距離平衡點(diǎn)的偏差(百分率)會(huì)下降.
PRNG 運(yùn)行中某些字節(jié)出現(xiàn)頻率的分布只在平衡點(diǎn)附近小范圍之內(nèi)波動(dòng). 當(dāng)樣本規(guī)模增加時(shí), 出現(xiàn)頻率的離散程度會(huì)減小.
只有在序列相當(dāng)長(zhǎng)的時(shí)候(非常罕見(jiàn)), 相同位的出現(xiàn)頻率才會(huì)偏離平衡值. 當(dāng)樣本長(zhǎng)度增加時(shí), 實(shí)際發(fā)生率的"偏差點(diǎn)"移動(dòng)才會(huì)遠(yuǎn)離平衡對(duì)增加的序列長(zhǎng)度, 并始終位于周?chē)闹档?00個(gè)夾雜物的整個(gè)序列.
這樣, 我們?cè)跇?biāo)準(zhǔn)PRNG中沒(méi)有發(fā)現(xiàn)大的統(tǒng)計(jì)學(xué)缺陷, 即使一連生成30億次(每個(gè)32位數(shù)字要生成3次), 我們的測(cè)試結(jié)果也沒(méi)有問(wèn)題.
寫(xiě) CLabouchere 類(lèi)的代碼用于管理倉(cāng)位大小
CLabouchere 類(lèi)已經(jīng)寫(xiě)得足夠小了. 它的接口只包含兩個(gè)封裝函數(shù), 用于設(shè)置/接收初始手?jǐn)?shù), 以及兩個(gè)真正工作的函數(shù) - 用于設(shè)置交易結(jié)果和獲得當(dāng)前倉(cāng)位大小, 以及重設(shè)到初始狀態(tài):
// 拉布謝爾資金管理.
// 獲利/止損假定為 1/1.
class CLabouchere
{
private:
protected:
// 初始手?jǐn)?shù). 默認(rèn) - 0.1.
double p_dStartLot;
// 根據(jù)拉布謝爾系統(tǒng)原則, 包含手?jǐn)?shù)數(shù)字的數(shù)組
double p_dLotsString[];
public:
void CLabouchere();
void ~CLabouchere();
double GetStartLot() {return p_dStartLot;};
void SetStartLot(double a_dStartLot) {p_dStartLot = a_dStartLot;};
// 返回下一次進(jìn)入市場(chǎng)的手?jǐn)?shù)
double GetCurrentLot();
// 記下當(dāng)前交易結(jié)果 - 贏 (true) 或輸 (false)
void SetResult(bool a_bResult);
// 回到初始狀態(tài), 除了初始手?jǐn)?shù)
void Init() {ArrayResize(p_dLotsString, 0);};
};
寫(xiě)腳本程序. 初步評(píng)估
現(xiàn)在, 是時(shí)候?qū)懸粋€(gè)簡(jiǎn)單的差不多100個(gè)字的腳本程序了. 輸入?yún)?shù)如下:
//--- 輸入?yún)?shù)
input int RepeatsCount=100000;
input int StartBalance = 10000;
input int Take = 50;
input double SuccessPercent = 50.0;
// 如果為 true, SuccessPercent 被忽略
input bool FiftyFifty = true;
該腳本會(huì)進(jìn)行一系列交易, 直到存款輸光或者交易數(shù)量達(dá)到了RepeatsCount.
此例中贏/輸比例 = 50/50, 它是一個(gè)獨(dú)立參數(shù). 在后面的例子中, 使用了偽隨機(jī)數(shù)的一位作為擲硬幣的結(jié)果. 否則, 計(jì)算一個(gè)利潤(rùn)/損失邊界值后, 用一個(gè)隨機(jī)數(shù)與之作比較. 針對(duì)50/50例子的參數(shù)已經(jīng)單獨(dú)實(shí)現(xiàn)好了, 因?yàn)槭褂肞RNG進(jìn)行一位的循環(huán)很符合我們的需要, 盡管我們還沒(méi)有評(píng)估這個(gè)循環(huán)出現(xiàn)值是否會(huì)超出邊界值.
默認(rèn)設(shè)置:
存款規(guī)模 – 10 000;
初始下注 – 50 (初始存款的0.5%).
大約在第十次運(yùn)行腳本的時(shí)候, 我們收到了一個(gè)驚人的結(jié)果 - 存款在第2335步達(dá)到了46 300 . 然而, 在第2372步已經(jīng)出現(xiàn)了回撤:
這就是圖表上看起來(lái)的樣子:
我們可以看到, 存款余額在最后被清零之前曾經(jīng)有兩次下跌得很?chē)?yán)重.
有些情況下, 存款只在最初的幾十次交易后就輸光了, 甚至沒(méi)有一個(gè)例子顯示帳戶(hù)達(dá)到了生命期的最大值, 100000次交易.
在我嘗試各種不同參數(shù)時(shí), 我想到了如下修改方式:
這樣做將是合理的: 增加一個(gè)參數(shù)來(lái)定義交易賬戶(hù)中資金回撤的數(shù)量. 如果我們可以在初始存款輸光之前取回更多的資金, 我們的初始存款就可以被看成是可預(yù)見(jiàn)的損失. 就這樣, 實(shí)現(xiàn)了新的叫做PocketPercent的參數(shù). 它定義了在成功的交易之后我們從賬戶(hù)中取回資金并把它們放到"口袋"中. 不允許使用"口袋"中的錢(qián), 只有交易賬戶(hù)中的錢(qián)可以用于風(fēng)險(xiǎn)的交易. 畢竟, 這和我們實(shí)際生活中發(fā)生的一樣.
當(dāng)然, 存款過(guò)程應(yīng)該是在一個(gè)循環(huán)中運(yùn)行多次(如果我們?nèi)斯み\(yùn)行數(shù)百次的話(huà)就太繁瑣了). 我們應(yīng)該修改一些參數(shù) – PocketPercent 和 Take (初始下注大小), 以及計(jì)算平均結(jié)果 ("口袋"中的資金和賬戶(hù)中的存款, 因?yàn)橘~戶(hù)存款永遠(yuǎn)不會(huì)下降到0, 它只會(huì)降低到無(wú)法進(jìn)行下一次交易的程度).
我們應(yīng)該有了兩個(gè)版本的腳本程序: 第一個(gè)循環(huán)重復(fù)運(yùn)行而不把交易的詳細(xì)信息記錄到文件中, 而第二個(gè)則相反. 循環(huán)運(yùn)行表示我們應(yīng)該使用面向?qū)ο蟮拇a. 因而, 我們把"運(yùn)行代碼"開(kāi)發(fā)為CCoinTest 類(lèi), 而腳本程序代碼則制作得盡可能簡(jiǎn)單.
運(yùn)行一次的代碼很短, 我可以把它在這里全部顯示出來(lái) (所有的工作, 包括把交易詳情記入文件, 也是在CCoinTest類(lèi)中完成的):
#include
//--- 輸入?yún)?shù)
input int RepeatsCount=100000;
input int StartBalance = 10000;
input int Take = 50;
input int PocketPercent = 10;
input double SuccessPercent = 50.0;
input string S2 = "如果為true, SuccessPercent 被忽略";
input bool FiftyFifty = true;
input string S3 = "如果為 true, 使用固定手?jǐn)?shù)而不是拉布謝爾";
input bool FixedLot = false;
void OnStart()
{
MathSrand(GetTickCount());
CCoinTest Coin;
Coin.SetRepeatsCount(RepeatsCount);
Coin.SetStartBalance(StartBalance);
Coin.SetTake(Take);
Coin.SetPocketPercent(PocketPercent);
Coin.SetSuccessPercent(SuccessPercent);
Coin.SetFiftyFifty(FiftyFifty);
Coin.SetFileName("Coin.csv");
Coin.SetFixedLot(FixedLot);
Coin.Go();
}
在我們?cè)黾恿?#34;口袋"之后, 系統(tǒng)的運(yùn)行圖表看起來(lái)有些不同了(在下面的例子中我們?nèi)』亓?40% 的利潤(rùn)):
紫色線(xiàn)("口袋"余額)和每個(gè)交易者夢(mèng)想的理想交易非常相近. 但是事實(shí)上, 我們應(yīng)該更關(guān)注黃色線(xiàn)(交易賬戶(hù)與"口袋"的總額), 它看起來(lái)不大好. 另外, 以下圖表更為常見(jiàn):
以下是我們現(xiàn)階段的結(jié)論:
此系統(tǒng)真正演示了作者期望的表現(xiàn): 回撤經(jīng)常被抵消, 而存款傾向于進(jìn)一步增長(zhǎng).
有些時(shí)候, 這樣的嘗試會(huì)以完全失敗結(jié)束. 實(shí)際上, 系統(tǒng)在陷入回撤后只有兩個(gè)選擇 - 可能會(huì)戰(zhàn)勝回撤, 或者把老本賠光.
存款的生命越長(zhǎng), 增長(zhǎng)的高度就越高.
這些例子中的初始下注是存款初值的0.5%(10000中下注50). 在第一個(gè)例子中, 基本風(fēng)險(xiǎn)水平減少到0.1% (存款增長(zhǎng)了4.5倍, 初始下注相同). 然而, 這些考量都沒(méi)能保住存款, 還是輸光了.
不同可能性的最終評(píng)估. 拉布謝爾系統(tǒng)與固定下注系統(tǒng)的比較結(jié)果
現(xiàn)在, 讓我們轉(zhuǎn)移到最激動(dòng)人心的部分 - 把多個(gè)實(shí)驗(yàn)結(jié)果收集起來(lái). 我們將會(huì)發(fā)現(xiàn), 贏下的部分是否能蓋過(guò)輸?shù)舻牟糠? 也許算法可以證實(shí), 初始下注量是降低一些(這樣可以為存款提供更多保護(hù))還是提高一些才更加有效?我們從交易賬戶(hù)取出利潤(rùn)的百分比應(yīng)該是多少呢?拉布謝爾系統(tǒng)和固定下注系統(tǒng)會(huì)有什么顯著不同嗎?如果初始系統(tǒng)有積極的數(shù)學(xué)期望("拋硬幣"贏得多一些), 會(huì)發(fā)生什么呢?你看, 我們有很多不清楚的問(wèn)題.
使用不同參數(shù)循環(huán)處理存款的腳本程序大約有100字. 我只展示其中的一部分.
輸入?yún)?shù):
//--- 輸入?yún)?shù)
input int RepeatsCount=100000;
input int StartBalance = 10000;
input string S1 = "虧損資金";
input int Deposits = 100;
input double SuccessPercent = 50.0;
input string S2 = "如果為true, SuccessPercent 被忽略";
input bool FiftyFifty = true;
input string S3 = "如果為 true, 使用固定手?jǐn)?shù)而不是拉布謝爾";
input bool FixedLot = false;
數(shù)組內(nèi)包含著初始下注值和獲勝后放到"口袋"中的百分?jǐn)?shù):
// 放到口袋百分比 數(shù)組
int iPocketPercents[24] = {1, 2, 3, 5, 7, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 75, 80, 85, 90, 95, 97, 98, 99};
// 初始下注數(shù)組
int iTakes[15] = {5, 10, 15, 20, 50, 75, 100, 150, 200, 300, 400, 500, 1000, 2000, 3000};
你可以看到, 初始下注量的范圍是5 (初始存款的0.05%) 到 3 000 (初始存款的30%). 放到"口袋"中的資金百分比是從1%到99%. 這些參數(shù)在兩個(gè)方向上都覆蓋并超出了其合理的范圍.
就這樣, 搜索的空間也是雙向的. 在此空間內(nèi)選了360 (24 * 15) 個(gè)分離點(diǎn). 基于序列的結(jié)果, 每個(gè)點(diǎn)都計(jì)算了平均總余額 ("口袋"資金 + 交易賬戶(hù)資金) 和賬戶(hù)虧光(存款生命期)前的交易量. 每個(gè)序列的存款數(shù)都記錄在Deposits參數(shù)中.
此二維空間計(jì)算的結(jié)果是三維的, 也就是說(shuō)很難使用二維方式顯示它們. 為了解決這個(gè)問(wèn)題, 我們?cè)诋?huà)二維圖表的時(shí)候會(huì)使用x軸作為搜索空間內(nèi)點(diǎn)的序列號(hào)(從0到359). 如果有必要, 某些 Takes 和 PocketPercent的值會(huì)獨(dú)立提供.
在運(yùn)行了100種存款數(shù)額之后, 平均余額如下:
以下為存款生命期圖表 (使用對(duì)數(shù)刻度):
當(dāng)初始風(fēng)險(xiǎn)為0.05%時(shí), 存款生命期超過(guò)10000次交易, 而當(dāng)初始風(fēng)險(xiǎn)為30%時(shí), 存款生命期穩(wěn)定下降到低于10次交易. 而高PocketPercent值也同樣減少了虧光存款的平均交易次數(shù). 這正是期待的結(jié)果.
我們可以在圖表上選擇幾個(gè)點(diǎn), 它們顯示了"口袋"和余額的平均內(nèi)容. 有四個(gè)點(diǎn)之間的距離非常接近, 所以希望我們能夠找到最佳范圍. 現(xiàn)在讓我們計(jì)算Deposits = 1 000的結(jié)果, 并且把它們附加到同一圖表上:
我們可以看到, 在足夠大的統(tǒng)計(jì)數(shù)據(jù)的壓力下, 想象中的最優(yōu)區(qū)域也消失了. 不論使用什么參數(shù), 圖表只是在最初的余額10000附近隨機(jī)波動(dòng).
因此, Deposits = 100 是不夠的. 更多的試驗(yàn)將會(huì)使用Deposits = 1 000來(lái)做.
讓我們?cè)谝粡垐D表上顯示拉布謝爾系統(tǒng)和固定下注系統(tǒng)的結(jié)果:
拉布謝爾系統(tǒng)和固定下注系同的存款生命期圖表:
結(jié)論:
拉布謝爾系統(tǒng)和固定下注系統(tǒng)的財(cái)務(wù)結(jié)果完全不一樣.
和拉布謝爾系統(tǒng)不一樣, 固定下注系統(tǒng)顯示的增長(zhǎng)數(shù)據(jù)散布在平均值附近. 看起來(lái)固定的存款數(shù)和固定下注系統(tǒng)的統(tǒng)計(jì)行為不大相符.
使用拉布謝爾系統(tǒng)的存款的生命期明顯更短(大多數(shù)參數(shù)要低10多倍, 某些參數(shù)相差甚至超過(guò)100倍). 如果使用低風(fēng)險(xiǎn)水平, 我們可以看到圖表達(dá)到了極限, 它是使用RepeatsCount 參數(shù)設(shè)置的 (默認(rèn)值為 100 000). 這些結(jié)果部分確認(rèn)了常見(jiàn)的觀點(diǎn), 即增加風(fēng)險(xiǎn)水平對(duì)存款來(lái)說(shuō)是危險(xiǎn)的. 這樣的系統(tǒng)減少了存款的生命期, 盡管我們還沒(méi)有發(fā)現(xiàn)存款上的風(fēng)險(xiǎn) (至少平均來(lái)看有一部分盈利被取回了).
讓我們引入一個(gè)新的腳本程序參數(shù), 它使我們收集高風(fēng)險(xiǎn)區(qū)域的數(shù)據(jù):
input string S2 = "每對(duì)參數(shù)的最小交易數(shù).";
input int MinDeals = 10000000;
如果我們每1000次虧光存款而交易數(shù)少于1千萬(wàn)次, 我們應(yīng)該繼續(xù).
結(jié)果, 圖表數(shù)據(jù)變得不那么分散了:
現(xiàn)在, 讓我們使用初始系統(tǒng)勝率不等于50/50的參數(shù)檢查系統(tǒng)的運(yùn)行.
存款生命期:
我們?cè)谶@些圖表上能看到什么呢?
如果系統(tǒng)勝率是49%, 兩個(gè)系統(tǒng)都明顯不能盈利了.
固定下注系統(tǒng)的財(cái)務(wù)結(jié)果明顯較差, 這說(shuō)明在勝率低于50%的情況下, 取出利潤(rùn)放到"口袋"的策略更加適用于拉布謝爾系統(tǒng).. 只有在退出回撤的情況下, 資金才會(huì)被轉(zhuǎn)移到"口袋"中.
和固定下注系統(tǒng)不同, 即使是勝率為49%, 拉布謝爾系統(tǒng)能夠不斷刷新記錄(只要前還夠做另一次交易). 如果它們的存款快速減少, 直到輸光之前, 人類(lèi)交易者不大可能進(jìn)行10萬(wàn)次或者甚至1萬(wàn)次交易. 他們肯定會(huì)早些停止交易. 而固定下注系統(tǒng)算法不能做到這一點(diǎn). 在這個(gè)方面看, 拉布謝爾系統(tǒng)算法和人類(lèi)更加接近. 因?yàn)樗男袨楦褚粋€(gè)人被新紀(jì)錄所鼓舞, 然后不斷交易直到暴倉(cāng).
你還記得我在簡(jiǎn)介部分提到的那篇誘導(dǎo)性的文章嗎?它說(shuō)的是系統(tǒng)即使在"33-40%"的勝率也可以工作. 讓我們檢查次范圍的上限(40%):
現(xiàn)在, 讓我們考慮初始系統(tǒng)的數(shù)學(xué)期望為正的情況(勝率超過(guò)50%).
我們必須在對(duì)數(shù)刻度上顯示余額圖表, 甚至勝率只是51%.
結(jié)論:
兩個(gè)系統(tǒng)都變得可以盈利了.
如果風(fēng)險(xiǎn)水平低, 固定手?jǐn)?shù)系統(tǒng)顯示出無(wú)盡的"生命力". 換句話(huà)說(shuō), 幾乎不可能輸錢(qián).
然而, 拉布謝爾系統(tǒng)還是可能會(huì)暴倉(cāng) (但是別忘了我們還有"口袋").
在大多數(shù)參數(shù)的情況下, 固定手?jǐn)?shù)系統(tǒng)都會(huì)創(chuàng)造比拉布謝爾系統(tǒng)多十倍以上的利潤(rùn)(有些時(shí)候使用某些參數(shù)甚至達(dá)到了17倍).
大多數(shù)讀者可能會(huì)想, 固定下注系統(tǒng)是全面超過(guò)拉布謝爾系統(tǒng)的. 不光它能更好地保護(hù)存款, 也能夠創(chuàng)造10倍以上的利潤(rùn)!不幸的是, 他們被統(tǒng)計(jì)學(xué)給騙了.
固定手?jǐn)?shù)系統(tǒng)碰巧有每份存款10萬(wàn)次交易的限制. 如果 RepeatsCount 參數(shù)設(shè)為200000, 系統(tǒng)就會(huì)創(chuàng)造2倍以上的利潤(rùn). "但是這很好啊!" – 被統(tǒng)計(jì)學(xué)欺騙的讀者會(huì)說(shuō). 他們又錯(cuò)了.
看一下每個(gè)系統(tǒng)(在對(duì)數(shù)刻度上)每次交易的平均利潤(rùn):
每次交易利潤(rùn)與初始下注的百分比圖表使整個(gè)狀況更加清晰:
結(jié)論:
固定下注系統(tǒng)每次交易的利潤(rùn)是初始下注的2%. 這和理論相符, 因?yàn)橼A/輸比率是51/49. 換句話(huà)說(shuō), 贏比輸多2.
拉布謝爾系統(tǒng)即使使用最不好的參數(shù)也能獲得更多的利潤(rùn). 如果參數(shù)設(shè)置得好, 它可能獲得6到7倍以上的利潤(rùn).
所以看起來(lái), 如果你有無(wú)限的時(shí)間, 不使用拉布謝爾系統(tǒng), 你可以做得很好.
你也許可以爭(zhēng)辯, 固定下注系統(tǒng)可以用固定風(fēng)險(xiǎn)百分?jǐn)?shù)系統(tǒng)來(lái)替代, 這樣每次交易的利潤(rùn)就會(huì)增加(事實(shí)上, 利潤(rùn)會(huì)持續(xù)增長(zhǎng), 但是我們應(yīng)該使用相同的距離來(lái)比較). 但是, 如果使用拉布謝爾系統(tǒng)作同樣的改變, 結(jié)果也是這樣.
所以, 拉布謝爾系統(tǒng)看起來(lái)更能盈利, 是嗎?
如果您說(shuō)是, 統(tǒng)計(jì)學(xué)又一次欺騙了您.
看一下表格:
下注
大小
百分比
轉(zhuǎn)移到
"口袋"
"口袋" 和余額
平均內(nèi)容,
拉布謝爾系統(tǒng)
平均
交易數(shù)量,
拉布謝爾系統(tǒng)
"口袋" 和余額
平均內(nèi)容,
固定下注
系統(tǒng)
平均
交易數(shù)量,
固定下注
系統(tǒng)
利潤(rùn)
每次交易,
拉布謝爾系統(tǒng)
利潤(rùn)
每次交易,
固定下注
系統(tǒng)
利潤(rùn)
每次交易,
初始下注百分比,
拉布謝爾系統(tǒng)
利潤(rùn)
每次交易,
初始下注
百分比, 固定下注
系統(tǒng)
75
10
51 177.34
3 728.62
160 489.6
99 530.41
11.04
1.51
14.72
2.02
500
45
14 016.36
127.27
349 479
33 771.46
31.56
10.05
6.31
2.01
實(shí)際上, 我們使用固定下注系統(tǒng)也可以輕易取得同樣的利潤(rùn). 我們只是需要簡(jiǎn)單地7次提高下注 (在本例中從0.75% 到 5% ). 當(dāng)然, 5% 是一個(gè)非常高風(fēng)險(xiǎn)的水平. 但是在本例中固定下注系統(tǒng)還是更"堅(jiān)強(qiáng)"10倍.
所以, 看起來(lái)固定下注系統(tǒng)更加有利, 是嗎?
我想, 統(tǒng)計(jì)學(xué)再次背叛了你.
事實(shí)上, 不論您的存款可以在生存多少次交易 (當(dāng)然是平均值), 因?yàn)槲覀円呀?jīng)把部分利潤(rùn)放到"口袋"中了. 如果"口袋"中的總資金超過(guò)了起初的賬戶(hù)余額數(shù)倍, 存款賠光并不是個(gè)大問(wèn)題.
也許, 從這些計(jì)算中得出的最有用的結(jié)論應(yīng)該如下: "如果勝率是51%, 拉布謝爾系統(tǒng)和固定下注系統(tǒng)的利潤(rùn)基本上是一樣的, 前者的初始下注是存款的0.75%而從賬戶(hù)的最大回撤是10%, 而后者使用固定下注為初始存款的5%, 回撤為賬戶(hù)資金的45%. 拉布謝爾系統(tǒng)通過(guò)在運(yùn)行中增加倉(cāng)位大小達(dá)到了相同的獲利水平".
另外, 請(qǐng)記住任何統(tǒng)計(jì)學(xué)的結(jié)論都是建立在進(jìn)行大量試驗(yàn)的基礎(chǔ)上的. 一個(gè)單獨(dú)的虛擬帳戶(hù)可以被虛擬分為多筆存款. 損失了虛擬存款說(shuō)明失去了交易賬戶(hù)的部分存款, 并且當(dāng)風(fēng)險(xiǎn)級(jí)別達(dá)到某種程度時(shí)回到初始下注水平. 然而, 本文顯示, 即使模擬了100次存款, 得到的結(jié)果數(shù)據(jù)還是很分散的. 如果我們把一個(gè)普通交易者的存款分成100分, 通常就沒(méi)有辦法進(jìn)行交易了.
那個(gè)系統(tǒng)更好?這很難說(shuō). 選擇是根據(jù)交易者喜好, 初始系統(tǒng)的數(shù)學(xué)期望在這里至關(guān)重要. 文章中的代碼允許任何人在他們自己的交易系統(tǒng)中模擬拉布謝爾系統(tǒng).
讓我們查看一下 55% 勝率下兩個(gè)系統(tǒng)的圖表:
勝率為55%的話(huà), 兩個(gè)系統(tǒng)都可以盈利.
每次交易的平均利潤(rùn)已經(jīng)從6到7倍(51%勝率)下降到3.7倍(55%勝率). 發(fā)生這種情況的原因是, 初始系統(tǒng)的勝率提高后, 拉布謝爾系統(tǒng)就會(huì)用更少的時(shí)間來(lái)恢復(fù)回撤, 所以就沒(méi)有更加經(jīng)常地增加手?jǐn)?shù)進(jìn)行交易.
結(jié)論
并沒(méi)有奇跡發(fā)生. 拉布謝爾資金管理系統(tǒng)并不能把一個(gè)輸錢(qián)甚至中性的系統(tǒng)變得獲利.
另外, 拉布謝爾系統(tǒng)錯(cuò)覺(jué)的來(lái)源現(xiàn)在也顯而易見(jiàn)了:
復(fù)雜性阻礙了系統(tǒng)結(jié)果的計(jì)算.
在人工測(cè)試中缺乏統(tǒng)計(jì)學(xué)數(shù)據(jù).
就算初始系統(tǒng)的期望為負(fù)面, 系統(tǒng)也可能不斷創(chuàng)造出新的高利潤(rùn)記錄, 然后使得交易者相信它的高效.
拉布謝爾系統(tǒng)是否值得使用正面期望的系統(tǒng)來(lái)嘗試一下呢?選擇是您自己的. 拉布謝爾系統(tǒng)非常復(fù)雜, 而它的效率很難說(shuō)是突出的. 盡管這樣, 我可以給您兩點(diǎn)建議 - 如果您在意您的存款安全, 就不要使用超過(guò)可接受的風(fēng)險(xiǎn)級(jí)別, 另外盡量提高您交易系統(tǒng)的數(shù)學(xué)期望.
總結(jié)
以上是生活随笔為你收集整理的c语言资金管理系统,拉布谢尔资金管理系统的统计学验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习中监督学习是什么?人工智能机器学
- 下一篇: 提取网页文字-免费批量自动提取网页文字软