我可以用未知参数对这个多项式方程进行编码吗?

问题描述

我正在尝试按如下方式编写方程式系列: 从值[0]开始,

id_typeAdh

这有效地将整个系列的损失限制在 Riskpc*Value 上,同时将(乘数 (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 level 数学。

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

编辑

抱歉,我意识到最初的问题太含糊了。 我的 colab 文件here

根据该文件中的认设置,它适用于 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] ,但对于 compoundLength = 2,它只会降低最后一笔交易的风险。

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

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

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

目标是将其扩展到 n (calcRisk()) 笔交易。蒙特卡罗模拟器运行 1,000,000 个可能的交易系列,计算每次获利交易后下一笔交易的累积风险降低,但在 3+ 的系列中,就目前而言,风险降低的所有收益仅在最后一笔交易中实现.

解决方法

这是一个简单的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)]