Основные принципы алгоритмов трейда.

Показатели трейда

Ниже перечислены показатели, которые вычисляются для каждого трейдера и используются как исходные данные для ведения трейда.

"Факторы".

Обычно в скриптах под античитом подразумеваются жесткие репрессии к тем или иным видам "нарушений". К примеру, если речь идет о прокси, то их просто не считают. А ведь все в этом мире относительно. Оверклики и быстрые клики - тоже понятия довольно размытые. В любом случае "качество" трейда оценивается в итоге лично владельцем сайта по процентному содержанию тех или иных "нарушений". Поэтому в данном скрипте вместо жестких репрессий введено поняти факторов(понижающих или повышающих). В идеале, владелец сайта сам может задать значимость тех или иных "нарушений" (язык, прокси, неуникальность, оверклики и тд). В зависимости от этих установок будут расчитываться показатели FIN, FCL и FOUT, которые и будут являть собой "чистые" значения, а отношения FIN/RIN, FCL/OCL, FOUT/ROUT будут отображать "качество"  трафика, кликов и аутов соответственно.  Таким образом, при условии правильно подобранных факторов, в формуле трейда можно использовать значение RIN, FCL и FOUT вместо стандартных RIN, OCL и FOUT. Если вам все это кажеться очень запутанным, то на данный момент просто фоспринимайте показатели FIN, FCL и FOUT как RIN, OCL и ROUT за вычетом всяких разных "нарушений". Читая дальше, я думаю, вы поймете что это немного большее... Теперь рассмотрим все факторы подробнее.

FIN

При вычислении показателя FIN используются следющие понижающие факторы:
Алгоритм вычисления FIN таков:
  1. FIN=FCT_LANG;
  2. Если посетитель пришел через прокси(PROXY_IN>0), то FIN=FIN*FCT_PROXY;
  3. FIN=FIN*FCT_INCNT^(INCNT-1), где INCNT - количесто заходов с этого IP адреса;
Рассмотрим несколько примеров. Прдположим что значения факторов равны FCT_LANG=1 (для простоты предположим что нет языковых групп и FCT_LANG=1), FCT_PROXY=0.3 и FCT_INCNT=0.6.

Пример 1.
Пришел посетитель с уникального IP и НЕ через прокси. Таким образом:
PROXY_IN=0 и INCNT=1 (первый заход). Вот что получается:
  1. FIN=1;
  2. PROXY_IN не больше нуля, так что FIN по FCT_PROXY не понижается.
  3. FIN=1*0.6^(1-1)=1*0.6^0=1*1=1
Таким образом этот заход начисляет следующие значения:
RIN +1, UIN +1, FIN +1.

Пример 2.
Пришел бот в пятый раз, но НЕ через прокси. PROXY_IN=0 и INCNT=5 (пятый заход). Что имеем:
  1. FIN=1;
  2. без изменений.
  3. FIN=1*0.6^(5-1)=1*0.6^4=1*0.13=0.13;
За него мы начислим следующие значения:
RIN +1, UIN +0, FIN +0.13.
А если бы он еще и через прокси пришел, то FIN был бы(вы уже догадались?) равен 0.13*0.3=0.04.
Справедливо?

FCL

При вычислении показателя FCL используются следующие факторы:
Так же существует параметр MIN_PAUSE(в секундах), который задает минимальную паузу между кликами, при которой клики НЕ считаются быстрыми.

Алгоритм вычисления FCL таков:
  1. FCL=FCT_LANG;
  2. Если посетитель пришел через прокси(PROXY_IN>0), то FCL=FCL*FCT_PROXY;
  3. FCL=FCL*FCT_INCNT^(INCNT-1), где INCNT - количесто заходов с этого IP адреса;
  4. Если клик идет на контент(OCL==0), то FCL=FCL*FCT_GCL;
  5. FCL=FCL*FCT_OVROCL^(OCLCNT-1), где OCLCNT - количество кликов на аут с этого IP;
  6. Если PAUSE(пауза с момента предыдущего клика или со времени входа) меньше чем MIN_PAUSE, то FCL=FCL*FCT_FASTCL^(MIN_PAUSE-PAUSE);
С первыми тремя пунктами все точно так же как и при расчете FIN. А вот для остальных пунктов не помешают примеры. Прдположим что значения факторов равны FCT_GCL=0.2, FCT_OVROCL=0.9, MIN_PAUSE=6 и FCT_FASTCL=0.6. Так же предположим что после первых трех пунктов FCL=1 (уникальный IP, НЕ через прокси).

Пример 1.

Первый клик (на контент). Работает только 4-й пункт: FCL=0.2;
Второй клик (на аут). PAUSE=8 (>MIN_PAUSE). Работает только пункт 5 (OCLCNT=1): FCL=1*0.9^(1-1)=1;
Третий клик (на аут). PAUSE=7 (>MIN_PAUSE). Опять (OCLCNT=2): FCL=1*0.9(2-1)=0.9;
Четвертый клик (на контент). PAUSE=3 (<MIN_PAUSE). Работают пункты 4: FCL=0.2; и 6: FCL=0.2*0.6^(6-3)=0.2*0.22=0.4;
Пятый клик (на аут). PAUSE=4(<MIN_PAUSE). Работают пункты 5 и 6. По пункту 5(OCLCNT=3): FCL=1*0.9^(3-1)=0.81, по пункту 6: FCL=0.81*0.6^(6-4)=0.81*0.36=0.29;
Шестой клик (на аут). PAUSE=7(>MIN_PAUSE). Работает только пункт 5 (OCLCNT=4): FCL=1*0.9^(4-1)=0.73;
...
Десятый клик на аут. PAUSE=4(<MIN_PAUSE). Работают пункт 5 (OCLCNT=8): FCL=1*0.9^(8-1)=0.48; и пункт 6: FCL=0.48**0.6^(6-4)=0.48*0.36=0.17;

Все просто :)
Понятно, что меняя факторы можно легко менять "политику" ведения трейда, значимость тех или иных "нарушений", и уже в зависимости от этого, скрипт будет "оценивать" трейдеров по вашим правилам. А правила, как известно зависят от конкретной ситуации. Главное в любой ситуации правильно ее(ситуацию) оценить, то есть выбрать подходящие факторы, при которых показатели FIN и FCL в общей стистике по сиджу не будут сильно отличаться от RIN и OCL соотвественно. Тогда относительно общей статистики по сиджу, вы сможете легко определить негодяев и неудачников, а скрипт сможет раздавать трафик более справедливо. Другими словами, у вас есть инструмент, остальное зависит от вас :)

Алгоритм

Основной информацией при выборе трейдра, на которого нужно отправить посетителя, является ТОП(рэйтинг) трейдеров. Каждый трейдер взвешивается с помощью выбранной формулы(см. ниже) и получает определенное количество очков(POINTS или PTS). Кроме этого на каждую пару (IP, TRADER) считается OUT_CNT - сколько раз посетитель сходил к трейдеру. Другими словами, из множества всех трейдеров выбираются трейдеры с наименьшим OUT_CNT. А уже из этих выбирается один с максимальным значением POINTS. При этом значение OUT_CNT у выбранного трейдера увеличивается на один. При таком методе посетитель не будет отправлен на одного трейдера второй(третий) раз, пока не пройдется по всем трейдерам.

Формулы

С помощью этих формул вычисляется значение POINTS для каждого трейдера. В некоторых из этих формул могут быть использованы параметры описанные выше(rin_effect и тд).

PROD

POINTS = CLICKS / IN

SUPER EFFECT

POINTS =
(rin_effect*RIN+uin_effect*UIN+fin_effect*FIN+rcl_effect*RCL+ocl_effect*OCL+fcl_effect*FCL) / (out_effect*OUT)

Эта более общая формула. На практике она сильно сокращается так как большинство показателей не используется (effect'ы для них равны нулю). Другими словами, подобная формула - всего лишь шаблон. Владелец сайта сам может заточить под себя 'правила' трейда. Вот несколько примеров получения более простых формул из этой.

rin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = IN / OUT, то есть простой RATIO-трэйд.

ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = OCL / OUT, то есть трэйд с учетом эффективности.

rin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (RIN+OCL) / (2*OUT), то есть трэйд с учетом эффективности и объема трейда.

uin_effect = 1, ocl_effect = 2, все остальные effect'ы - по нулям.
Получаем POINTS = (UIN+2*OCL) / (3*OUT), более строгий трейд.

SUPER OWED

POINTS =
(rin_effect*RIN+uin_effect*UIN+fin_effect*FIN+rcl_effect*RCL+ocl_effect*OCL+fcl_effect*FCL)/out_effect - OUT)

Для любителей TrafficDrive'а. Вот примеры реализации алгоритмов TD:

rin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (RIN+OCL)/2 - OUT, trade type a.

ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = OCL - OUT, trade type c.

uin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = UIN - OUT, trade type u.

rin_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = RIN - OUT, trade type r.

SUPER XPEHO-FIN

POINTS =
(RIN^rin_effect*UIN^uin_effect*FIN^fin_effect*RCL^rcl_effect*OCL^ocl_effect*FCL^fcl_effect*FCL) / (OUT^out_effect)

Эту формулу придумал не я. Я просто довел ее до такого беспредела :)
Есть такой замечательный кодер с замечательным ником - ХРЕНОДЕР. Он то и придумал очень умную формулу трейда. По крайней мере я только в его скрипте такое видел. Вот его фирменная формула(далее цитата из мануала к XrenCJ):

FIN = (IN / OUT) * (CLICK / OUT) * QUAL

Показатель FIN равный 100% означает, что трейдер на каждый отправленный к нему OUT прислал в среднем одного посетителя (IN) нормального качества, который сделал на нашем CJ один CLICK.

Кому-то могут пригодиться и два производных от FIN алгоритма:

FIN EFFECT = (IN / OUT) * (CLICK / OUT) * (CLICK / OUT) * QUAL
FIN RATIO = (IN / OUT) * (IN / OUT) * (CLICK / OUT) * QUAL

В первом случае, как мы видим, клики имеют больший вес по сравнению с юниками, во втором случае наоборот.


А вот как будет выглядеть реализация его фирменных алгоритмов:

uin_effect = 1, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (IN*OCL)/(OUT^2) = (IN/OUT)*(OCL/OUT), FIN алгоритм.

uin_effect = 1, ocl_effect = 2, все остальные effect'ы - по нулям.
Получаем POINTS = (IN*OCL^2)/(OUT^3) = (IN/OUT)*(OCL/OUT)*(OCL/OUT), FIN EFFECT алгоритм.

uin_effect = 2, ocl_effect = 1, все остальные effect'ы - по нулям.
Получаем POINTS = (IN^2*OCL)/(OUT^3) = (IN/OUT)*(IN/OUT)*(OCL/OUT), FIN RATIO алгоритм.