更新:(思考讨论阶段,并未上线)
去掉了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倍。