Преглед на файлове

add auto match when profit_ratio equal 0 policy

stanley-king преди 3 години
родител
ревизия
5b5893ebeb
променени са 1 файла, в които са добавени 60 реда и са изтрити 18 реда
  1. 60 18
      helper/refill/policy/chctl.php

+ 60 - 18
helper/refill/policy/chctl.php

@@ -162,6 +162,7 @@ class chctl
     const sleep_ratio   = 0.05;
     const timeout_level = 180;
     const sleep_time = 3600;
+    const sleep_count = 10;
 
     private function sleep_item($ctls)
     {
@@ -174,7 +175,7 @@ class chctl
             if(!$fSleep)
             {
                 [$count,$ratio] = $item->notify_ratio();
-                if($count >= 10 && $ratio < self::sleep_ratio) {
+                if($count >= self::sleep_count && $ratio < self::sleep_ratio) {
                     $item->sleep();
                     $sleeps[] = $item;
                 } else {
@@ -245,24 +246,65 @@ class chctl
             [$lCount,$lRatio] = $l->notify_ratio();
             [$rCount,$rRatio] = $r->notify_ratio();
 
-            $lprofit = ($out_price - $l->price()) * $lRatio;
-            $rprofit = ($out_price - $r->price()) * $rRatio;
+            $lProfit = $out_price - $l->price();
+            $rRrofit = $out_price - $r->price();
 
-            $lprofit = ncPriceFormat($lprofit);
-            $rprofit = ncPriceFormat($rprofit);
-            $lRatio = ncPriceFormat($lRatio);
-            $rRatio = ncPriceFormat($rRatio);
+            $lProfitRatio = $lProfit * $lRatio;
+            $rRrofitRatio = $rRrofit * $rRatio;
 
-            if($lprofit > $rprofit) return -1;
-            elseif($lprofit < $rprofit) return 1;
-            elseif($lprofit == 0)
+            $lProfit = ncPriceFormat($lProfit);
+            $rRrofit = ncPriceFormat($rRrofit);
+
+            $lProfitRatio = ncPriceFormat($lProfitRatio);
+            $rRrofitRatio = ncPriceFormat($rRrofitRatio);
+
+            $lRatio  = ncPriceFormat($lRatio);
+            $rRatio  = ncPriceFormat($rRatio);
+
+            if($lProfitRatio > $rRrofitRatio) return -1;
+            elseif($lProfitRatio < $rRrofitRatio) return 1;
+            elseif($lProfitRatio == 0) //利润获得概率为0,说明成功率或者利润可能性为0
             {
-                if($lCount > $rCount) return 1;
-                elseif($lCount < $rCount) return -1;
-                else return 0;
+                if($lCount > $rCount) //此时优先喂单
+                {
+                    if($rCount >= self::sleep_count) //单量都大于阈值,优先利润
+                    {
+                        if($lProfit > $rRrofit) return -1;
+                        elseif($lProfit < $rRrofit) return 1;
+                        else return 0;
+                    }
+                    else {
+                        return 1;
+                    }
+                }
+                elseif($lCount < $rCount)
+                {
+                    if($lCount >= self::sleep_count) //单量都大于阈值,优先利润
+                    {
+                        if($lProfit > $rRrofit) return -1;
+                        elseif($lProfit < $rRrofit) return 1;
+                        else return 0;
+                    }
+                    else {
+                        return -1;
+                    }
+                }
+                else
+                {
+                    $count = $lCount;
+                    if($count >= self::sleep_count) //单量都大于阈值,优先利润
+                    {
+                        if($lProfit > $rRrofit) return -1;
+                        elseif($lProfit < $rRrofit) return 1;
+                        else return 0;
+                    }
+                    else {
+                        return 0;
+                    }
+                }
             }
-            elseif($lRatio > $rRatio) return -1;
-            elseif($lRatio < $rRatio) return 1;
+            elseif ($lRatio > $rRatio) return -1; //以下是利润概率相等,优先成功率保障
+            elseif ($lRatio < $rRatio) return 1;
             else return 0;
         };
 
@@ -271,10 +313,10 @@ class chctl
 
         $desctor = function ($item) use($out_price) {
             $name = $item->name();
-            $in_price = $item->price();
             [$count,$ratio] = $item->notify_ratio();
-            $profit = ncPriceFormat(($out_price - $item->price()) * $ratio);
-            return "{$name} count={$count} profit={$profit} = ({$out_price} - {$in_price}) X {$ratio}";
+            $prifit = $out_price - $item->price();
+            $profit_ratio = ncPriceFormat($prifit * $ratio);
+            return "{$name} count={$count} profit_ratio={$profit_ratio}={$prifit}X{$ratio}";
         };
 
         $feed_names = [];