日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

c语言资金管理系统,拉布谢尔资金管理系统的统计学验证

發布時間:2024/5/8 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言资金管理系统,拉布谢尔资金管理系统的统计学验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有三種謊言: 謊言, 可惡的謊言, 以及統計.

簡介

在很多周末, 我都在深度瀏覽互聯網, 偶然間我碰到了一個之前從來沒有聽說過的資金管理系統. 它被稱為拉布謝爾, 或者取消系統(使用拉布謝爾的外匯交易真空清除系統, 俄語版). 英文版描述可以在這里找到. 此系統是馬丁格爾的變種, 因為您在失誤以后需要加大您的投注然后在獲利中小贏. 然而,它是一個不大激進的版本, 因為下注并非雙倍, 而是增加一定數量.

下面這些段落描述了讓我非常好奇的系統屬性:

"所以, 請注意獲利交易的數量應該超過33-40%, 這樣才能保證此系統正常工作并獲利!!!"– 這是非常重要的說明. 然而, 為什么初始百分比范圍如此之大并不清楚 – 從 33% 到 40%.

"記住, 這種方法可以認為是游戲場中的欺騙性陰謀".? –真的嗎?那么, 它真的能有用?!

"但是原則還是一樣的 – 獲勝 33% 可以抵消 66% 的失敗. 所以, 如果您在實際外匯交易中應用此資金管理方法的話, 您需要一個獲勝幾率在50%以上并且利潤因子>=1的系統".

實際上, 提到的文章聲明了您需要一個輸贏數量差不多的系統, 勝率大約是50%(或者說"比33%要多"). 如果您有這樣一個系統, 拉布謝爾方法可以很容易使您盈利!所以, 既然我們有方法把它應用到不錯的領域, 我們還有必要去尋找其他的數學方法嗎?畢竟, 開發一個取勝率47%的系統應該并不難...

讓我們看看拉布謝爾系統變化的風險.

最小的下注通常假定為等于1. 如果我們贏了, 我們的交易規模保持不變, 而我們的交易余額略有增加.

如果我們輸了, 我們的下注大小增加1, 變成2, 而我們把輸的注數加到一行記錄上:

-1

如果這次我們贏了, 我們應該把2加到記錄上:

-1 2

然后我們回顧這兩個數字, 因為我們已經把輸的贏回來了(換句話說, 我們已經通過兩次下注又讓我們的余額增加了1).

現在, 讓我們考慮一個更長的失敗序列.

-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

這樣, 我們去掉"-1", "-6"和"+7", 因為我們的贏盤抵消了兩次失敗的下注. 下面一次下注是記錄中剩下的第一個和最后一個數值的和, 也就是, 仍然是7. 如果我們贏了:

-2 -3 -4 -5 +7

我們去掉 "-2", "-5" 和 "+7". 我們下一次的下注大小還是記錄中剩下的第一個和最后一個之和. 是的, 仍然是7 (一些使用者推薦為下注再增加1, 這樣如果我們走運就能夠得到一個最小利潤而不是0). 如果我們贏了:

-3 -4 +7

我們把記錄中全部數字去掉, 因為我們已經把我們輸掉的贏回來了.

如果我們在中間階段輸掉了, 輸掉的下注大小也被記錄, 下一次下注還是等于記錄中第一個和最后一個數值之和.

所以, 我們最初的結論是什么?

連續6次失敗只需要3次獲勝就能抵消掉(然而, 應該是連續獲勝; 我們晚點再討論). 乍一看來, 這個系統很容易讓我們在市場上所向披靡.

下注大小的增長和馬丁格爾相比明顯變慢. 如果我們把這一序列用在馬丁格爾系統中, 我們最后的那次下注, 大小是最初的64倍.

在上述例子中, 總的存款回撤(輸掉的下注之和)只有21, 而使用馬丁格爾的話, 就應該是63了.

通過簡單計算顯示, 如果每次下注使用1%的存款, 我們一連輸掉13次才會輸光我們的資金. 而如果每次用0.1%, 則需要連輸44次. 你可能會想, "在50/50比例下連輸44次!?這種可能性幾乎沒有!這就像被隕石砸到一樣!這種可能性對我不錯!", 等等.).

你可以很容易地找到許多關于馬丁格爾系統回撤和危險的研究. 實際上, 你只要用紙和筆自己簡單算算就能夠知道回撤可能多厲害了. 但是, 我沒有找到針對拉布謝爾系統的類似研究.

這個下注系統看起來非常復雜, 也就阻礙了其數學期望的計算.

但是讓我們回頭看看在下注中我們輸掉的. 讓我們假定, 我們連輸了6次然后只是贏回兩次而不是3次. 則我們的記錄數據看起來如下:

-3 -4

我們下注7, 然后又輸了:

-3 -4 -7

我們下注10(注意: 當我們輸的時候, 下注的大小已經從3開始增長而不是1了, 這使我們的存款變得不那么安全了). 我們又輸了:

-3 -4 -7 -10

我們必須下注13了.

所以, 如果我們出現重復性的失敗, 該系統會讓我們的加注超過1. 這看起來是完全戰勝回撤的唯一方法. 這就是我們的存款真正地陷入危機了, 因為我們需要一系列勝利來抵消回撤. 在紙上計算還是看起來太復雜了或者至少太麻煩了...

你是否還對這個系統能做什么感興趣?如果是的話, 讓我們再詳細研究.

設定任務: 主題與方法

最重要的問題就是, 拉布謝爾資金管理系統是否真的能夠把一個數學期望轉化為真正的盈利方法. 當然, 引用的段落中提到的大約 33% 的勝率就輸贏臨界點聽起來有些不可思議. 但是, 也許49% 或者 50% 的勝率就足夠了?如果不是的話, 拉布謝爾系統有哪些其他優勢呢?

我們將會使用統計學, 也就是說我們需要開發一個MQL程序(本例中是MQL4, 我還沒有完全掌握MQL5). 讓我們的程序來進行數以百萬計的交易, 并且"清空"成千上萬的存款 - 我們將會在不損壞我們真正資金的情況下分析結果. 如果程序可以盈利, 將有可能在真實交易中實現這算法.

拉布謝爾系統的開發是基于輸贏比率相同的假定的. 其他比率情況下也可以采用此系統, 但是這看起來不大合理. 如果此系統可以影響輸贏比率相同的數學期望, 它也應該影響其他的比率. 如果不能的話, 我們只是簡單地浪費時間思考了一個合適的適應方案.

另外, 我們可以把輸贏相同的系統想像成50%贏率的系統, 這樣考慮就簡單多了, 因為我們對拋硬幣非常熟悉. 因此, 讓我們把我們的程序叫做硬幣測試(CoinTest).

首先, 我們應該描述我們未來程序的主要特性:

我們應該能夠改變獲勝可能性. 50/50比率只是一個特殊的平衡條件.

我們應該能夠設置風險水平. 拉布謝爾系統有一個固定下注大小. 如果我們根據我們的存款規模來擴大初始賭注, 我們的存款將永遠不會回到最初的狀態, 因為所有的數值都比最初有所改變. 在有回撤退出后, 我們可以重新計算下注大小, 但是, 這將會引出難以處理的分數. 所以, 我們使用兩個變量來設置風險 - 初始存款和初始下注.

有必要設置每筆存款的最大交易次數. 它應該被設置得足夠大, 這樣我們就能知道, 就算初始風險非常低的時候我們是否會損失全部存款. 畢竟, 如果存款持續增長, 這個過程可能是無限的, 我們可能永遠都不知道結果.

我們應該有能力檢查一個單一的存款的交易序列的結果, 這既是為了程序的調試, 也是為了我們可以改變交易邏輯. 把結果輸出到文件中可以很好滿足我們的目標.

在我們完成任務, 為單一存款過程寫完代碼后, 我們因該繼續收集一系列獨立的存款中(最好)使用不同參數過程的統計數據. 你要知道, 單一的試驗幾乎是沒有意義的. 統計結果也被發送到文件中. 我們不需要每一個單獨存款的歷史.

我們的下注規模選擇系統可能可以用于真實交易, 所以我們應該把它做成一個類.

對我們來說, 現階段在MetaTrader中真的做交易沒有必要, 因為會耗用很多計算資源. 我們只需要使用所需的規模和一個給定的勝率來得到隨機交易的結果. 使用這種想法, 我們將會開發一個腳本程序, 因為這種MQL程序和EA交易或指標相比非常適合單獨運行一次.

偽隨機數生成器質量的統計學驗證

偽隨機數生成器(PRNG)的質量對我們非常重要, 因為它將用于定義每個交易的結果(贏/輸). 一個很長的贏/輸序列分布的準確性是最重要的. 晚些時候我們會嘗試不使用復雜的數學和統計學理論對它進行評估.

這篇文章的目的不是對PRNG的質量做詳細的研究(否則, 我們必須進行15個不同的測試). 我們所感興趣的PRNG特點是它不會影響拉布謝爾系統的測試結果, 并不需要復雜的驗證過程.

MetaTrader 有標準的 MathRand() PRNG 函數. PRNG 序列使用MathSrand() 函數進行初始化.

讓我們寫一個小的腳本程序 (RandFile) 來檢查標準 PRNG 的質量. 此腳本程序將有兩個參數:

它應該可以生成數以百萬計的32位隨機數(每個32位隨機數通過3次調用MathRand()函數, 每個函數可以提供15位). 測量單位通常是10進制的二不是2到2的20次方, 因為我們需要看到測試的結果.

CalcSeries 邏輯參數(是否應該計算相同位序列長度的分布).

對位序列長度分布的計算是非常耗費資源的(增加腳本執行時間十倍). 因而, 它被設為一個獨立的選項.

該腳本程序生成如下結果:

計算時間 (顯示于日志中);

全部生成位中1 位 的數量 (顯示于日志中);

RandFile.bin 文件 — PRNG 運行結果的二進制文件;

RandStat.csv 文件 — 包含某些字節出現頻率的記錄文件;

RandOnesSeries.csv 文件 — 包含"1"位序列長度的記錄文件;

RandZerosSeries.csv 文件 — 包含"0"位序列長度的記錄文件.

讓我們生成3個不同長度的測試集:

1000萬個測試數, 每個數字4個字節(一共4000萬字節);

1億個測試數, 每個數字4個字節(一共4億個字節);

10億個測試數, 每個數字4字節(一共40億個字節).

現在讓我們檢查以下參數:

使用WinRAR最大壓縮設置進行壓縮, 包含隨機數文件的壓縮率. 高質量的隨機數據是很難壓縮的. 當然, 文件不能壓縮的程度也不一定表示它們包含隨機數的質量高. 但是如果它們很容易壓縮, 這表明數據具有統計上的相似性.

"1" 位的數量:

平衡值

真實

絕對偏差

偏差百分率

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

某些字節的數值在隨機數文件中出現的頻率:

相同位序列的長度. 我們將對每個大小的樣本生成兩個圖表:

第一個顯示某確定長度相同位的實際數量, 以及該系列的長度(在對數刻度)的平衡值;

第二個顯示實際量的百分比偏離檢測到的相同的位序列(在對數刻度)的平衡值.

線性圖表是不符合我們要求的, 因為我們擁有的數據非常分散(在同一圖表上, 數值從1到4,000,000,000或者從0.00001到6000)另外, 對數標度的長系列的平衡值的圖表顯示為直線, 而序列長度增加1,其發生的概率減少了一半。

所以, 結論是什么呢?

標準PRNG的效率對我們的任務來說是可以接受的.

把包含PRNG運行結果的文件進行歸檔, 并不能壓縮它們.

位數中0和1的數量基本相同. 當樣本規模增長時, 距離平衡點的偏差(百分率)會下降.

PRNG 運行中某些字節出現頻率的分布只在平衡點附近小范圍之內波動. 當樣本規模增加時, 出現頻率的離散程度會減小.

只有在序列相當長的時候(非常罕見), 相同位的出現頻率才會偏離平衡值. 當樣本長度增加時, 實際發生率的"偏差點"移動才會遠離平衡對增加的序列長度, 并始終位于周圍的值的100個夾雜物的整個序列.

這樣, 我們在標準PRNG中沒有發現大的統計學缺陷, 即使一連生成30億次(每個32位數字要生成3次), 我們的測試結果也沒有問題.

寫 CLabouchere 類的代碼用于管理倉位大小

CLabouchere 類已經寫得足夠小了. 它的接口只包含兩個封裝函數, 用于設置/接收初始手數, 以及兩個真正工作的函數 - 用于設置交易結果和獲得當前倉位大小, 以及重設到初始狀態:

// 拉布謝爾資金管理.

// 獲利/止損假定為 1/1.

class CLabouchere

{

private:

protected:

// 初始手數. 默認 - 0.1.

double p_dStartLot;

// 根據拉布謝爾系統原則, 包含手數數字的數組

double p_dLotsString[];

public:

void CLabouchere();

void ~CLabouchere();

double GetStartLot() {return p_dStartLot;};

void SetStartLot(double a_dStartLot) {p_dStartLot = a_dStartLot;};

// 返回下一次進入市場的手數

double GetCurrentLot();

// 記下當前交易結果 - 贏 (true) 或輸 (false)

void SetResult(bool a_bResult);

// 回到初始狀態, 除了初始手數

void Init() {ArrayResize(p_dLotsString, 0);};

};

寫腳本程序. 初步評估

現在, 是時候寫一個簡單的差不多100個字的腳本程序了. 輸入參數如下:

//--- 輸入參數

input int RepeatsCount=100000;

input int StartBalance = 10000;

input int Take = 50;

input double SuccessPercent = 50.0;

// 如果為 true, SuccessPercent 被忽略

input bool FiftyFifty = true;

該腳本會進行一系列交易, 直到存款輸光或者交易數量達到了RepeatsCount.

此例中贏/輸比例 = 50/50, 它是一個獨立參數. 在后面的例子中, 使用了偽隨機數的一位作為擲硬幣的結果. 否則, 計算一個利潤/損失邊界值后, 用一個隨機數與之作比較. 針對50/50例子的參數已經單獨實現好了, 因為使用PRNG進行一位的循環很符合我們的需要, 盡管我們還沒有評估這個循環出現值是否會超出邊界值.

默認設置:

存款規模 – 10 000;

初始下注 – 50 (初始存款的0.5%).

大約在第十次運行腳本的時候, 我們收到了一個驚人的結果 - 存款在第2335步達到了46 300 . 然而, 在第2372步已經出現了回撤:

這就是圖表上看起來的樣子:

我們可以看到, 存款余額在最后被清零之前曾經有兩次下跌得很嚴重.

有些情況下, 存款只在最初的幾十次交易后就輸光了, 甚至沒有一個例子顯示帳戶達到了生命期的最大值, 100000次交易.

在我嘗試各種不同參數時, 我想到了如下修改方式:

這樣做將是合理的: 增加一個參數來定義交易賬戶中資金回撤的數量. 如果我們可以在初始存款輸光之前取回更多的資金, 我們的初始存款就可以被看成是可預見的損失. 就這樣, 實現了新的叫做PocketPercent的參數. 它定義了在成功的交易之后我們從賬戶中取回資金并把它們放到"口袋"中. 不允許使用"口袋"中的錢, 只有交易賬戶中的錢可以用于風險的交易. 畢竟, 這和我們實際生活中發生的一樣.

當然, 存款過程應該是在一個循環中運行多次(如果我們人工運行數百次的話就太繁瑣了). 我們應該修改一些參數 – PocketPercent 和 Take (初始下注大小), 以及計算平均結果 ("口袋"中的資金和賬戶中的存款, 因為賬戶存款永遠不會下降到0, 它只會降低到無法進行下一次交易的程度).

我們應該有了兩個版本的腳本程序: 第一個循環重復運行而不把交易的詳細信息記錄到文件中, 而第二個則相反. 循環運行表示我們應該使用面向對象的代碼. 因而, 我們把"運行代碼"開發為CCoinTest 類, 而腳本程序代碼則制作得盡可能簡單.

運行一次的代碼很短, 我可以把它在這里全部顯示出來 (所有的工作, 包括把交易詳情記入文件, 也是在CCoinTest類中完成的):

#include

//--- 輸入參數

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, 使用固定手數而不是拉布謝爾";

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();

}

在我們增加了"口袋"之后, 系統的運行圖表看起來有些不同了(在下面的例子中我們取回了 40% 的利潤):

紫色線("口袋"余額)和每個交易者夢想的理想交易非常相近. 但是事實上, 我們應該更關注黃色線(交易賬戶與"口袋"的總額), 它看起來不大好. 另外, 以下圖表更為常見:

以下是我們現階段的結論:

此系統真正演示了作者期望的表現: 回撤經常被抵消, 而存款傾向于進一步增長.

有些時候, 這樣的嘗試會以完全失敗結束. 實際上, 系統在陷入回撤后只有兩個選擇 - 可能會戰勝回撤, 或者把老本賠光.

存款的生命越長, 增長的高度就越高.

這些例子中的初始下注是存款初值的0.5%(10000中下注50). 在第一個例子中, 基本風險水平減少到0.1% (存款增長了4.5倍, 初始下注相同). 然而, 這些考量都沒能保住存款, 還是輸光了.

不同可能性的最終評估. 拉布謝爾系統與固定下注系統的比較結果

現在, 讓我們轉移到最激動人心的部分 - 把多個實驗結果收集起來. 我們將會發現, 贏下的部分是否能蓋過輸掉的部分. 也許算法可以證實, 初始下注量是降低一些(這樣可以為存款提供更多保護)還是提高一些才更加有效?我們從交易賬戶取出利潤的百分比應該是多少呢?拉布謝爾系統和固定下注系統會有什么顯著不同嗎?如果初始系統有積極的數學期望("拋硬幣"贏得多一些), 會發生什么呢?你看, 我們有很多不清楚的問題.

使用不同參數循環處理存款的腳本程序大約有100字. 我只展示其中的一部分.

輸入參數:

//--- 輸入參數

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, 使用固定手數而不是拉布謝爾";

input bool FixedLot = false;

數組內包含著初始下注值和獲勝后放到"口袋"中的百分數:

// 放到口袋百分比 數組

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};

// 初始下注數組

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%. 這些參數在兩個方向上都覆蓋并超出了其合理的范圍.

就這樣, 搜索的空間也是雙向的. 在此空間內選了360 (24 * 15) 個分離點. 基于序列的結果, 每個點都計算了平均總余額 ("口袋"資金 + 交易賬戶資金) 和賬戶虧光(存款生命期)前的交易量. 每個序列的存款數都記錄在Deposits參數中.

此二維空間計算的結果是三維的, 也就是說很難使用二維方式顯示它們. 為了解決這個問題, 我們在畫二維圖表的時候會使用x軸作為搜索空間內點的序列號(從0到359). 如果有必要, 某些 Takes 和 PocketPercent的值會獨立提供.

在運行了100種存款數額之后, 平均余額如下:

以下為存款生命期圖表 (使用對數刻度):

當初始風險為0.05%時, 存款生命期超過10000次交易, 而當初始風險為30%時, 存款生命期穩定下降到低于10次交易. 而高PocketPercent值也同樣減少了虧光存款的平均交易次數. 這正是期待的結果.

我們可以在圖表上選擇幾個點, 它們顯示了"口袋"和余額的平均內容. 有四個點之間的距離非常接近, 所以希望我們能夠找到最佳范圍. 現在讓我們計算Deposits = 1 000的結果, 并且把它們附加到同一圖表上:

我們可以看到, 在足夠大的統計數據的壓力下, 想象中的最優區域也消失了. 不論使用什么參數, 圖表只是在最初的余額10000附近隨機波動.

因此, Deposits = 100 是不夠的. 更多的試驗將會使用Deposits = 1 000來做.

讓我們在一張圖表上顯示拉布謝爾系統和固定下注系統的結果:

拉布謝爾系統和固定下注系同的存款生命期圖表:

結論:

拉布謝爾系統和固定下注系統的財務結果完全不一樣.

和拉布謝爾系統不一樣, 固定下注系統顯示的增長數據散布在平均值附近. 看起來固定的存款數和固定下注系統的統計行為不大相符.

使用拉布謝爾系統的存款的生命期明顯更短(大多數參數要低10多倍, 某些參數相差甚至超過100倍). 如果使用低風險水平, 我們可以看到圖表達到了極限, 它是使用RepeatsCount 參數設置的 (默認值為 100 000). 這些結果部分確認了常見的觀點, 即增加風險水平對存款來說是危險的. 這樣的系統減少了存款的生命期, 盡管我們還沒有發現存款上的風險 (至少平均來看有一部分盈利被取回了).

讓我們引入一個新的腳本程序參數, 它使我們收集高風險區域的數據:

input string S2 = "每對參數的最小交易數.";

input int MinDeals = 10000000;

如果我們每1000次虧光存款而交易數少于1千萬次, 我們應該繼續.

結果, 圖表數據變得不那么分散了:

現在, 讓我們使用初始系統勝率不等于50/50的參數檢查系統的運行.

存款生命期:

我們在這些圖表上能看到什么呢?

如果系統勝率是49%, 兩個系統都明顯不能盈利了.

固定下注系統的財務結果明顯較差, 這說明在勝率低于50%的情況下, 取出利潤放到"口袋"的策略更加適用于拉布謝爾系統.. 只有在退出回撤的情況下, 資金才會被轉移到"口袋"中.

和固定下注系統不同, 即使是勝率為49%, 拉布謝爾系統能夠不斷刷新記錄(只要前還夠做另一次交易). 如果它們的存款快速減少, 直到輸光之前, 人類交易者不大可能進行10萬次或者甚至1萬次交易. 他們肯定會早些停止交易. 而固定下注系統算法不能做到這一點. 在這個方面看, 拉布謝爾系統算法和人類更加接近. 因為它的行為更像一個人被新紀錄所鼓舞, 然后不斷交易直到暴倉.

你還記得我在簡介部分提到的那篇誘導性的文章嗎?它說的是系統即使在"33-40%"的勝率也可以工作. 讓我們檢查次范圍的上限(40%):

現在, 讓我們考慮初始系統的數學期望為正的情況(勝率超過50%).

我們必須在對數刻度上顯示余額圖表, 甚至勝率只是51%.

結論:

兩個系統都變得可以盈利了.

如果風險水平低, 固定手數系統顯示出無盡的"生命力". 換句話說, 幾乎不可能輸錢.

然而, 拉布謝爾系統還是可能會暴倉 (但是別忘了我們還有"口袋").

在大多數參數的情況下, 固定手數系統都會創造比拉布謝爾系統多十倍以上的利潤(有些時候使用某些參數甚至達到了17倍).

大多數讀者可能會想, 固定下注系統是全面超過拉布謝爾系統的. 不光它能更好地保護存款, 也能夠創造10倍以上的利潤!不幸的是, 他們被統計學給騙了.

固定手數系統碰巧有每份存款10萬次交易的限制. 如果 RepeatsCount 參數設為200000, 系統就會創造2倍以上的利潤. "但是這很好啊!" – 被統計學欺騙的讀者會說. 他們又錯了.

看一下每個系統(在對數刻度上)每次交易的平均利潤:

每次交易利潤與初始下注的百分比圖表使整個狀況更加清晰:

結論:

固定下注系統每次交易的利潤是初始下注的2%. 這和理論相符, 因為贏/輸比率是51/49. 換句話說, 贏比輸多2.

拉布謝爾系統即使使用最不好的參數也能獲得更多的利潤. 如果參數設置得好, 它可能獲得6到7倍以上的利潤.

所以看起來, 如果你有無限的時間, 不使用拉布謝爾系統, 你可以做得很好.

你也許可以爭辯, 固定下注系統可以用固定風險百分數系統來替代, 這樣每次交易的利潤就會增加(事實上, 利潤會持續增長, 但是我們應該使用相同的距離來比較). 但是, 如果使用拉布謝爾系統作同樣的改變, 結果也是這樣.

所以, 拉布謝爾系統看起來更能盈利, 是嗎?

如果您說是, 統計學又一次欺騙了您.

看一下表格:

下注

大小

百分比

轉移到

"口袋"

"口袋" 和余額

平均內容,

拉布謝爾系統

平均

交易數量,

拉布謝爾系統

"口袋" 和余額

平均內容,

固定下注

系統

平均

交易數量,

固定下注

系統

利潤

每次交易,

拉布謝爾系統

利潤

每次交易,

固定下注

系統

利潤

每次交易,

初始下注百分比,

拉布謝爾系統

利潤

每次交易,

初始下注

百分比, 固定下注

系統

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

實際上, 我們使用固定下注系統也可以輕易取得同樣的利潤. 我們只是需要簡單地7次提高下注 (在本例中從0.75% 到 5% ). 當然, 5% 是一個非常高風險的水平. 但是在本例中固定下注系統還是更"堅強"10倍.

所以, 看起來固定下注系統更加有利, 是嗎?

我想, 統計學再次背叛了你.

事實上, 不論您的存款可以在生存多少次交易 (當然是平均值), 因為我們已經把部分利潤放到"口袋"中了. 如果"口袋"中的總資金超過了起初的賬戶余額數倍, 存款賠光并不是個大問題.

也許, 從這些計算中得出的最有用的結論應該如下: "如果勝率是51%, 拉布謝爾系統和固定下注系統的利潤基本上是一樣的, 前者的初始下注是存款的0.75%而從賬戶的最大回撤是10%, 而后者使用固定下注為初始存款的5%, 回撤為賬戶資金的45%. 拉布謝爾系統通過在運行中增加倉位大小達到了相同的獲利水平".

另外, 請記住任何統計學的結論都是建立在進行大量試驗的基礎上的. 一個單獨的虛擬帳戶可以被虛擬分為多筆存款. 損失了虛擬存款說明失去了交易賬戶的部分存款, 并且當風險級別達到某種程度時回到初始下注水平. 然而, 本文顯示, 即使模擬了100次存款, 得到的結果數據還是很分散的. 如果我們把一個普通交易者的存款分成100分, 通常就沒有辦法進行交易了.

那個系統更好?這很難說. 選擇是根據交易者喜好, 初始系統的數學期望在這里至關重要. 文章中的代碼允許任何人在他們自己的交易系統中模擬拉布謝爾系統.

讓我們查看一下 55% 勝率下兩個系統的圖表:

勝率為55%的話, 兩個系統都可以盈利.

每次交易的平均利潤已經從6到7倍(51%勝率)下降到3.7倍(55%勝率). 發生這種情況的原因是, 初始系統的勝率提高后, 拉布謝爾系統就會用更少的時間來恢復回撤, 所以就沒有更加經常地增加手數進行交易.

結論

并沒有奇跡發生. 拉布謝爾資金管理系統并不能把一個輸錢甚至中性的系統變得獲利.

另外, 拉布謝爾系統錯覺的來源現在也顯而易見了:

復雜性阻礙了系統結果的計算.

在人工測試中缺乏統計學數據.

就算初始系統的期望為負面, 系統也可能不斷創造出新的高利潤記錄, 然后使得交易者相信它的高效.

拉布謝爾系統是否值得使用正面期望的系統來嘗試一下呢?選擇是您自己的. 拉布謝爾系統非常復雜, 而它的效率很難說是突出的. 盡管這樣, 我可以給您兩點建議 - 如果您在意您的存款安全, 就不要使用超過可接受的風險級別, 另外盡量提高您交易系統的數學期望.

總結

以上是生活随笔為你收集整理的c语言资金管理系统,拉布谢尔资金管理系统的统计学验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。