更新:(思考讨论阶段,并未上线)
去掉了i=0.9i的设置,避免干扰积分项起作用。
为i设定上下限, Ti提高到1.
Pdex:内盘bitCNY价格
Pf: 当前喂价
premium:溢价百分比
Premium0: 一小时前的溢价百分比
Ti=1; Td=1;p=4 ##Ti=1使得当premium>2%时,i在20小时内可从0增加到最大值。
get Pdex, Pf, premium;
premium0=premium;
k=1+p*premium;
d=0, i= Pf/Pdex-k; ##设置初始值使得初始喂价等于当前喂价
while True:
get Pdex, Pf, premium;
if (上次执行后计时器已过去一小时):
i+=premium/Ti;
if i>0.4: ##给i设定上下限,因为有总体调整幅度的限制,i太大或太小时已经起不到什么作用,反而会延缓回调的速度
i=0.4;
if i<-0.3:
i=-0.3;
d=Td*(premium-premium0);
premium0=premium;
k=1+p*pemium;
if i+k+d>1:
feed price = Pdex*min(i+k+d, 1.5, 1.2*Pf/Pdex) ##向上调价时,喂价不超过内盘价1.5倍,不超过当前喂价1.2倍
else:
feed price = Pdex*max(i+k+d, 0.91*Pf/Pdex)##向下调价时,喂价不得低于当前喂价0.91倍。