单次赢的概率是决定性因素,如果赢面大,可以降低盈利的比例
如果赢面小,就需要增大盈利的百分比,这样实际上风险更高,因为等待时间变长了,等待时间越长,资金的效率越低
所以核心就是提高单次交易的胜率,如果单次能提高到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()