我能用未知参数来编码这个多项式方程吗?

2024-05-19 10:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个方程系列编码如下: 从值[0]开始

the first result (Return[1]) = RR * Riskpc * Value[0], Value[1] = Value[0] + Return[1]
Return[2] = RR * ((k * Riskpc * Value[1]) + Return[1]), Value[2] = Value[1] + Return[2]
...
Return[n] = RR * ((k * Riskpc * Value[n-1]) + Return[n-1]), Value[n] = Value[n-1] + Return[n]

这有效地将整个系列的损失限制为Riskpc*值,同时将(乘数(k)*上一次收益的全部)添加到风险金额上

我需要能够在python以及mql4和mql5中对此进行编码,以便无论n如何,Value[n]==m*Value[0],m都是一个常量>;1.在当前问题中,m=1.101,RR=3,Riskpc=1

我知道解是一个几何方程,对于任意给定的长度为n(n>;1)且常数为RR Riskpc和m的序列,k是RR、Riskpc、n和m的函数,但这远远超出了我30岁的a级数学

我曾尝试探索matlab和sympy,但迷路了

编辑

对不起,我意识到原来的问题太模糊了。 我的colab文件是here

根据该文件中的默认值,它适用于compoundLength = 2,但对于compoundLength = 3+它只会降低最后一笔交易的风险

在这里,我试图对calcRisk()函数进行编程,以替换第56行和第51行中的逻辑,从而使先前收益的部分保留分布在整个系列中(不包括第一笔交易),而不仅仅发生在最后一笔交易中

最初的问题是:回报:风险比为3,将第一笔交易的回报加上新账户价值的1%,作为第二笔交易的风险(以便增加上行潜力,同时在两笔交易中损失不超过最初的1%),我如何将第二笔交易的风险限制在达到10.1%的目标所必需的范围内

这是通过第56行的逻辑在一系列2中实现的,并保留了交易1的约50%(取决于以前的提取)

目标是将其扩展到n(compoundLength)个交易。monte-carlo模拟器运行1000000个可能的交易序列,计算每次盈利交易后下一次交易的降低累积风险,但在3+系列上,目前为止,风险降低的所有好处仅在最后一次交易中实现


Tags: 文件函数gt编码returnvaluerr序列
1条回答
网友
1楼 · 发布于 2024-05-19 10:24:13

下面是一个简单的python实现:

def f(n):
  from sympy import symbols, Tuple
  assert n > 0
  v0, RR, Riskpc, k = symbols('v0 RR Riskpc k')
  Value = v0
  _Return = RR * Riskpc * v0
  for i in range(1, n + 1):
    Return = _Return
    Value += Return
    _Return = RR * ((k * Riskpc * Value) + Return)
  return Tuple(Value, Return)

它返回ValueReturn的第n项的符号值;您可以用来替换已知值,例如

>>> f(3).subs({RR: 3, Riskpc: 1})
(48*k*v0 + 3*k*(12*k*v0 + 13*v0) + 40*v0, 36*k*v0 + 3*k*(12*k*v0 + 13*v0) + 27*v0)
>>> from sympy import factor
>>> list(map(factor, _))
[v0*(36*k**2 + 87*k + 40), 3*v0*(12*k**2 + 25*k + 9)]

相关问题 更多 >

    热门问题