Python 交易次数与胜率的模拟

单次赢的概率是决定性因素,如果赢面大,可以降低盈利的比例

如果赢面小,就需要增大盈利的百分比,这样实际上风险更高,因为等待时间变长了,等待时间越长,资金的效率越低

所以核心就是提高单次交易的胜率,如果单次能提高到70%以上,必然会赢

所以算法应该以单次交易的胜率作为初始关键因素,动态改变交易时间和止盈百分比,获得更大的赢的概率

import random
import pandas as pd
import matplotlib.pyplot as plt

init_money = 100 # 本金100元
profit_ratio = 0.02 # 盈利2%就止盈  跑的快
loss_ratio = -0.02 # 亏损1%就止损   亏的少
loop_count = 1000 # 交易2000次     频率高
profit_count = 0 # 总盈利次数
loss_count = 0 # 总亏损次数
random_ratio = 0.4 # 亏损概率    赢面大,胜率必须高于70%

index_list = []
coin_list = []
money_list= [] 
profit_or_loss_list = []
result_money_list= [] 


# 使用loop_count作为循环次数
for i in range(2, loop_count + 1):
    if random.random() > random_ratio :
        trade_category = 1
        ratio = profit_ratio
        profit_count = profit_count + 1
    else:
        trade_category = 0
        ratio = loss_ratio
        loss_count = loss_count + 1
    result_money = init_money * (1+ratio)

    index_list.append(i)
    coin_list.append('btc')
    money_list.append(init_money)
    profit_or_loss_list.append(trade_category)
    result_money_list.append(result_money)
    init_money = result_money

# 获取最后一位result_money的值
print("profit:")
print(result_money_list[-1])

df = pd.DataFrame({
    "result_money": result_money_list
})

# 创建一个图形对象和子图对象
fig, ax = plt.subplots()

# Plot the DataFrame as a bar chart.
df.plot(kind="bar",ax=ax)

# 手动设置需要显示的刻度位置
# 例如,只显示第1、3、5行的刻度
ticks = [0, 100, 200]
ax.set_xticks(ticks)
# 根据刻度位置设置刻度标签
ax.set_xticklabels(df.index[ticks])

print('win count'+str(profit_count))
print('loss count'+str(loss_count))
# Show the plot.
plt.show()



作者:spike

分类: Python

创作时间:2024-09-29

更新时间:2024-09-29

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1