Тип трейда CUSTOM
Полное описание.

CUSTOM - это такой тип трейда, в котором логика раздачи трафика полностью определяется пользователем. То есть Вам самим придется определить критерии, по которым один трейдер лучше другого и соответственно заслуживает большего трафика от Вашего сайта. От Вас потребуются базовые знания языка программирования PHP а также понимание сущности трейда, поэтому новичкам советую быть поосторожней :)

Итак, приступим.

Общие понятия
Для того чтобы активировать тип трейда 'custom' необходимо зайти в Settings ->Out settings -> Out trade type и выбрать 'Custom'. После этого трейд в Протоне идет по пяти основным 'каналам':

  1. Часовые форсы (hourly forces).

  2. Быстрые форсы (forces 'right now').

  3. Вычисляемые поинты P1 (основные).

  4. Вычисляемые поинты P2.

  5. Вычисляемые поинты P3.

В меню редактирования типа трейда 'Custom' Вы можете выставить процент трафика, который пойдет по каждому из каналов:

 В показанном здесь примере 9% от всего трафика, идущего на трейд, будет идти на hourly forces, 9% - на forces 'right now', 15% - на P2, остальное - на P1.
Логика скрипта out.php работает так:
  1. С заданной вероятностью ищется трейдер, которому нужно отдать часовые форсы. Если такого трейдера нет (часовые форсы отданы или никому не установлены) - то переходим к п.2:
  2. С заданной вероятностью ищется трейдер, которому нужно отдать быстрые форсы. Если такого трейдера нет (быстрые форсы отданы или никому не установлены) - то переходим к п.3:
  3. С заданной вероятностью ищется трейдер в P2. Если трейдер там не найден, то переходим к п.4:
  4. С заданной вероятностью ищется трейдер в P3. Если трейдер там не найден, то переходим к п.5:
  5. Ищется трейдер в P1.

Подготовка данных для out.php происходит в 2 этапа.
На первом этапе необходимо вычислить для каждого трейдера некую величину (очки, поинты) - $P1 (обязательно) и $P2  и/или  $P3, оперируя предоставленными переменными (характеристики конкретного трейда).
Вычислять поинты для форсов от Вас не требуется, это делается автоматически.
Далее все трейдеры сортируются по вычисленным значениям поинтов.
Во втором этапе из полученных отсортированных трейдеров нужно отобрать определенное количество лучших - $N1 ($N2, $N3), и назначить конечный процент трафика, который получит каждый трейдер.


Этап 1: Вычисление P1, P2, P3
 Итогом этого шага должно быть как минимум определение переменной $P1 - основные поинты трейдера. Можно дополнительно определить $P2 и $P3, если вы хотите учесть в трейде большее количество составляющих. Для вычисления этих величин Вам предоставлено 27 предварительно вычисленных характеристик трейда (описание см. ниже). По сути необходимо написать небольшой PHP код, который выполняется внутри цикла для каждого трейдера. Вот пример такого кода:

if($Dout>0) $P1=$Dclick/$Dout;
else $P1=0;

Как видно, здесь мы определили величину $P1 для трейдера, основываясь на общем количестве кликов от него и аутов на него за прошедшие 24 часа. В принципе этого кода уже достаточно для того, чтобы все заработало. Но предположим что Вы хотите учесть также другие характеристики трейда, к примеру количество уникальных инов или к примеру параметр 'Click again'. Тогда Вы можете либо усложнить данную формулу для $P1, либо создать новую формулу для $P2 или $P3. Трейд будет идти по всем формулам, которые Вы определите, и количество трафика на ту или иную формулу Вы тоже задаете сами (см. п 'Общие понятия'). Гибкость управления трейдом при этом достигается очень высокая. Хотите - задайте только основную формулу для $P1 - трейд пойдет только по ней (не считая той части трафика, которая уйдет на форсы), хотите - задайте 2 формулы - $P1 и $P2 - трейд пойдет по ним, согласно установленным вероятностям, а хотите - задайте все три формулы! Вот еще пример:

if($Dout>0) $P1=$Dclick/$Dout;
else $P1=0;

$P2=$Dclick-$Duout;

if($Din>150) $P3=$P2*$Ca;
else $P3=$P2*$AverageCa;

if($Din==0){
    if($Duout>0) $P1=$P2=$P3=1/$Duout;
}
elseif($Duout/$Din)>=3) $P2=$P3=0;

Здесь уже заданы все три формулы, и в трейде будут учитываться новые характеристики. Также здесь добавлена защита от перелива трейдера более чем в 3 раза.
Усложнять или упрощать код можно как угодно. Можно придумать супер-мега алгоритм трейда, который нужен именно Вам :)
Теперь опишу подробно какие характеристики трейда, переменные и PHP функции можно использовать на этапе расчета поинтов:
$Din Количество raw инов от трейдера за прошедшие 24 часа
$Hin Количество raw инов от трейдера за прошедший час
$Duin Количество уникальных инов от трейдера за прошедшие 24 часа
$Huin Количество уникальных инов от трейдера за прошедший час
$Dout Количество raw аутов на трейдера за прошедшие 24 часа
$Hout Количество raw аутов на трейдера за прошедший час
$Duout Количество уникальных аутов на трейдера за прошедшие 24 часа
$Huout Количество уникальных аутов на трейдера за прошедший час
$Dclick Количество raw кликов от трейдера за прошедшие 24 часа
$Hclick Количество raw кликов от трейдера за прошедший час
$Duclick Количество уникальных кликов от трейдера за прошедшие 24 часа
$Huclick Количество уникальных кликов от трейдера за прошедший час
$Dproxyin Количество proxy инов от трейдера за прошедшие 24 часа
$Hproxyin Количество proxy инов от трейдера за прошедший час
$Dproxyclick Количество proxy кликов от трейдера за прошедшие 24 часа
$Hproxyclick Количество proxy кликов от трейдера за прошедший час
$Dtradeout Количество raw аутов на трейд от данного трейдера за прошедшие 24 часа
$Htradeout Количество raw аутов на трейд от данного трейдера за прошедший час
$Hin_hours[0-23] * Массив raw инов от трейдера за указанное кол-во часов назад
$Hout_hours[0-23] * Массив raw аутов на трейдера за указанное кол-во часов назад
$Hclick_hours[0-23] * Массив raw кликов от трейдера за указанное кол-во часов назад
$Huin_hours[0-23] * Массив уникальных инов от трейдера за указанное кол-во часов назад
$Huout_hours[0-23] * Массив уникальных аутов на трейдера за указанное кол-во часов назад
$Huclick_hours[0-23] * Массив уникальных кликов от трейдера за указанное кол-во часов назад
$Ca ** Значение Click Again для данного трейдера
$AverageCa ** Среднее значение Click Again по всему сайту
$Ratio Заданное трейдеру Ratio (например 130)
$a Используйте по собственному усмотрению
$b Используйте по собственному усмотрению
$c Используйте по собственному усмотрению
$d Используйте по собственному усмотрению
$P1 Поинты P1. Обязательно должны быть определены!
$P2 Поинты P2
$P3 Поинты P3

Допустимые выражения и функции PHP:
+, -, *, /, if, elseif, else, array_sum, count, round

Значения отмеченные * и ** доступны опционально. Сделано это для экономии ресурсов сервера.

* - Данные доступны только если 'Load expanded stats for the last' установлено > 1, иначе массив будет пустым. Например:
Load expanded stats for the last 3 hours. 
Массив $Hin_hours будут содержать 3 элемента:
   
$Hin_hours[0] - количество raw инов от трейдера за прошедший час (аналог $Hin)
    $Hin_hours[1] - количество raw инов от трейдера за время 2 часа назад - 1 час назад.
    $Hin_hours[2] - количество raw инов от трейдера за время 3 часа назад - 2 часа назад.
Аналогично и с другими массивами. Максимальное кол-во часов для просмотра - 24, то есть по основным характеристикам трейда можно взять почасовые данные за прошедшие сутки.

** - Данные доступны только если включена опция 'Click again' stats needed.



ВАЖНО!
  • Переменные чувствительны к регистру. Употребляйте их именно в таком виде, как они представлены в таблице. Для удобства редактирования кода в админ-зоне щелкните по кнопке с той или иной переменной чтобы она скопировалась в буфер обмена.
  • Если Вы используете дроби, то делайте проверку знаменателя на ноль (как в случае вычисления $P1 в примерах выше), или прибавляйте к знаменателю единицу, во избежание деления на ноль.

Этап 2: Создание Points1, Points2, Points3
Второй этап является опциональным, но при этом очень сильно влияющим на трейд. После того, как мы определили $P1 ($P2, $P3), производится сортировка трейдеров по этому значению. Получается итоговый массив трейдеров $Points1 (соответственно $Points2 и $Points3 если были определены $P2 и $P3). Теперь нам необходимо из этих массивов отобрать несколько первых трейдеров (лучших) чтобы они попали в итоговые аут-листы. Для того чтобы явно задать кол-во трейдеров в том или ином аут-листе используйте переменные $N1, $N2 и $N3. Код во втором этапе выполняется не в цикле, а только один раз. Пример кода для второго этапа:
 
$N1=10;
$N2=5;
$N3=floor($active_trades_hour/2);

здесь мы определили, что в аут-листе для P1 будет ровно 10 трейдеров, в аут-листе для P2 - 5, а в аут-листе для P3 кол-во трейдеров определяется половиной от трейдеров, активных за этот час.
Но это еще не все. Если просто указать количество трейдеров в аут-листе, то конечный процент трафика, получаемый трейдером на той или иной позиции в этом аут-листе будет строго пропорционален поинтам этого трейдера. Но можно и вручную переназначить этот процент (по сути эти действия аналогичны установке параметров 'Use custom rule for outgoing' и процентов в основных настройках аута для всех схем трейда, см. подробней в основном мануале скрипта). Вот пример кода:
 
$N1=10;
$N2=5;
$N3=floor($active_trades_hour/2);

$Points1=array();
$Points1[]=400;
$Points1[]=200;
$Points1[]=100;
$Points1[]=50;
$Points1[]=25;
$Points1[]=20;
$Points1[]=15;
$Points1[]=10;
$Points1[]=10;
$Points1[]=10;

$Points2=array();
$Points2[10]=2;
$Points2[9]=3;
for($a=8;$a>=0;--$a) $Points2[$a]=$Points2[$a+2]+$Points2[$a+1];

Здесь аут-лист для P1 задан перманентно, проценты трафика, получаемые трейдерами на той или иной позиции будут пропорциональны указанным числам (400, 200, 100 и тд). Числа в аут-листе для P2 представляют собой ряд Фибоначчи. Несмотря на то, что элементов в массиве $Points2 больше чем должно быть ($N2), в аут-лист возьмутся только первые 5 трейдеров. Если бы в массиве $Points2 элементов было бы меньше, чем $N2, то в аут-лист попало бы столько трейдеров, сколько элементов в $Points2.
Аут-лист для $P3 не составлен вовсе. Это значит что проценты в нем будут пропорциональны поинтам для каждого трейдера, и аут-лист будут содержать половину активных за час трейдеров ($N3). Если бы и $N3 не был определен, то в аут-лист для P3 попало бы столько трейдеров, сколько указано в общих для всех схем трейда значении 'Number of trades in outgoing list'.
Еще нюанс. Если Вы хотите чтобы значения для того или иного аут-листа были аналогичны настройкам 'Use custom rule for outgoing' из общих настроек аута, то укажите просто $Points1='default'; (на самом деле в кавычках может быть любой текст). Итак, немного подытожу логику второго этапа на примере аут-листа для P1 (для двух остальных аут-листов все будет работать точно также):

  • Если $N1 не определен, то $N1 принимается равным 'Number of trades in outgoing list' из общих настроек аута.
  • Если $Points1 не определен, то $Points1 принимается равным отсортированным поинтам $P1 (которые рассчитывались в первом этапе).
  • Если $Points1 определен в строковый тип, то $Points1 принимается из настроек 'Use custom rule for outgoing'
  • Если $N1 не равно количеству элементов в $Points1, то в итоговый аут-лист попадет число трейдеров, меньшее из этих двух величин.

Вот список доступных переменных и функций для второго этапа:
 
$a Используйте по собственному усмотрению
$b Используйте по собственному усмотрению
$c Используйте по собственному усмотрению
$d Используйте по собственному усмотрению
$i Используйте по собственному усмотрению
$Points1 Массив чисел, пропорционально которым будет отдаваться трафик трейдерам, отсортированным по величине $P1
$Points2 Массив чисел --//-- $P2
$Points3 Массив чисел --//-- $P3
$N1 Максимальное количество трейдеров в $Points1
$N2 Максимальное количество трейдеров в $Points2
$N3 Максимальное количество трейдеров в $Points3
$active_trades_day Количество активных трейдеров за прошедшие 24 часа.
$active_trades_hour Количество активных трейдеров за прошедший час.

Допустимые выражения и функции PHP:
+, -, *, /, if, elseif, else, array_sum, count, round, while, list, each, foreach, floor, array


Контроль
Предположим Вы придумали какой-то свой собственный алгоритм трейда, составили аут-листы и сохранили настройки. Как узнать, работает ли заданный код вообще? И как выглядит (выглядят) аут-листы с живыми трейдерами?
Во-первых, ошибки при выполнении кода будут записываться в файл http://www.yourdomain.com/cron_error_log.txt Если код составлен согласно правилам PHP и в нем используются только разрешенные (заранее определенные) переменные - ошибок не будет.
Во-вторых, заходим в меню скрипта Settings -> Out Settings -> View your outgoing list here и наблюдаем все рассчитанные аут-листы с трейдерами. Не забывайте что Протон трейдит в три потока (для хорошей, нормальной и плохой группы качества трафика), и соответственно аут-листов будет в три раза больше. Для отладки алгоритма трейда я рекомендую перевести все страны в нормальную группу качества трафика (меню Settings -> Traffic Quality), чтобы лучше пронаблюдать численные показатели трейда, 'оттюнинговать' сам алгоритм и вернуть настройки качества обратно.

Если Вы придумали какой-то оригинальный (по Вашему мнению :)) алгоритм трейда, но не можете его реализовать согласно данной  инструкции (в чем-то не разобрались или не знакомы с языком программирования PHP) - я буду рад помочь Вам. Пишите мне на [email protected] - я обязательно отвечу.


Успехов!