일단 C++로 코드를 간단하게 짰음.
굳이 메르센 트위스터 써가면서 번거롭게 한 건 rand 함수가 안습이기 때문임.

#include <conio.h>
#include <iostream>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <array>
#include <random>

//#define PRINT_META

using namespace std;

using Event = struct {
size_t event1 = 0;
bool event2 = 0;
bool event3 = 0;
bool event4 = 0;
};

using PlayInfo = struct {
size_t money = 0;
size_t win = 0;
size_t lose = 0;
vector<Event> history;
};

bool generateRandom() { 
static mt19937_64 rng(time(NULL));
static uniform_int_distribution<size_t> dist(0, 1);
return dist(rng);
}

void updateEvent(Event& e) {
e.event1 = 7;
size_t temp = generateRandom();
e.event4 = temp;
e.event1 += 1 - 2*temp;
for (int i = 0; i < 4; ++i) {
temp = generateRandom();
e.event1 += 1 - 2*temp;
}
e.event1 /= 2;
e.event2 = (e.event1 <= 3 ? 0 : 1);
e.event3 = (e.event1 % 2 == 1 ? 0 : 1);
}

int main() {
size_t n = 0;
start:
PlayInfo pInfo;
Event evt;
size_t turn = 1;
for (int i = 0; i < 100000; ++i) {
updateEvent(evt);
pInfo.history.push_back(evt);
#ifdef PRINT_META
cout << "[" << turn++ << "회차]"
<< "  슬롯:" << evt.event1
<< "  소대:" << (!evt.event2 ? "1~3" : "4~6")
<< "  홀짝:" << (!evt.event3 ? "홀" : "짝")
<< "  좌우:" << (evt.event4 ? "좌" : "우") << endl;
#endif
/*while (true)
if (getch() == 13) break;*/
}
size_t cnt = 0, max = 0;
for (const auto& i : pInfo.history) {
if (i.event2 == 0) {
if (cnt > max) max = cnt;
cnt = 0;
continue;
}
++cnt;
}
cout << max << endl;
if (++n == 100) return 0;
goto start;
return 0;
}

여러가지 실험 한다고 쓸데없는 부분도 많음.
어쨌든 이걸로 1/2확률 종목에서 계속 한 가지만 나올 최대확률을 구할 수 있음.
내가 10만회의 경우 시뮬레이션을 100번 돌려서 평균 구해보니까 15.9 정도 나옴.
그러니까 10만번 중에서 한 경우만 계속 나오는 최대 횟수는 대략 16에 가깝다는 소리.
그럼 10만번 이내의 마틴게일 베팅은 최소자본의 계수가 2^16 인데,
100Pt.를 걸고 마틴게일을 한다고 치면 정확히 6553600Pt.가 필요함.

그런데 이게 비현실적인 이유는, 10만번이나 하는 경우이기 때문임.
그래서 조금 더 현실적인 500번을 시뮬레이션 돌리면 8.17 정도 나옴.
넉넉하게 잡아서 2^9=512, 51200Pt.만 있으면 마틴게일의 승률이 거의 99.99%에 가깝게 나옴.