#property strict#include "Signals.mqh"#include "Distribution.mqh"#include "File.mqh"// Получение цены сигнала
SIMPLE_GETVALUE_MACROS(GetSignalPrice, SIGNAL, Source.Price)
// Получение количества подписчиков сигнала
SIMPLE_GETVALUE_MACROS(GetSignalSubscribers, SIGNAL, Source.Subscribers)
// Получение произведения X * Y элемента распределения
SIMPLE_GETVALUE_MACROS(GetDistributionXY, DISTRIBUTION_UNIT, Source.X * Source.Y);
// Условие сортировки сигналов по прибыльности сигнала
SIMPLE_COMPARE_MACROS(CompareByGain, SIGNAL, Source.Gain)
// Условие сортировки сигналов по фактору восстановления сигнала
SIMPLE_COMPARE_MACROS(CompareByRecoveryFactor, SIGNAL, Source.MaxDD == 0 ? DBL_MAX : Source.Gain / Source.MaxDD)
// Условие сортировки сигналов по доходу с подписчиков
SIMPLE_COMPARE_MACROS(CompareByIncome, SIGNAL, Source.Subscribers * Source.Price)
// Условие сортировки распределения по X
SIMPLE_COMPARE_MACROS(CompareByX, DISTRIBUTION_UNIT, Source.X)
voidOnStart( void )
{
// Получили сигналы
SIGNALS Signals;
// Отсортировали сигналы по прибыльности
Signals.Sort(new CompareByGain(MODE_DESCEND));
FILE::StringToFile("Signals_Gain.txt", Signals.ToString(TRUE));
// Отсортировали сигналы по доходу с подписчиков
Signals.Sort(new CompareByIncome(MODE_DESCEND));
FILE::StringToFile("Signals_Income.txt", Signals.ToString(TRUE));
// Отсортировали сигналы по фактору восстановления
Signals.Sort(new CompareByRecoveryFactor(MODE_DESCEND));
FILE::StringToFile("Signals_RF.txt", Signals.ToString(TRUE));
// Получили распределение зависимости количества подписчиков (Y) от цены на подписку (X)
DISTRIBUTION Distribution(Signals, new GetSignalSubscribers, new GetSignalPrice);
// Отсортировали полученное распределение по цене
Distribution.Sort(new CompareByX);
FILE::StringToFile("Distribution.txt", "Price Subscribers\n" + Distribution.ToString());
string Str = "Всего сигналов: " + (string)Signals.GetAmount() +
"\nВсего подписчиков: " + DoubleToString(Signals.GetSum(new GetSignalSubscribers), 0) +
"\nСуммарно они платят: $" + DoubleToString(Distribution.GetSum(new GetDistributionXY), 2) +
"\n\nПодробнее распределение:\nЦена Подписчики\n" + Distribution.ToString() +
"\nСм. подробнее *.txt файлы.";
MessageBox(Str);
FILE::StringToFile("MessageBox.txt", Str);
return;
}
结果。
Всего сигналов: 924
Всего подписчиков: 4057
Суммарно они платят: $45706.45
Подробнее распределение:
Цена Подписчики
0.000000003012.0000000020.00000000334.0000000021.0000000043.0000000022.000000003.0000000024.0000000031.0000000025.0000000027.0000000026.000000001.0000000028.000000003.0000000029.00000000386.0000000029.9900000026.0000000030.0000000025.0000000035.0000000079.0000000038.900000004.0000000039.0000000012.0000000049.000000002.0000000050.000000003.0000000059.000000003.0000000060.000000001.0000000077.000000004.0000000079.000000007.0000000099.000000001.00000000100.000000001.00000000110.000000001.00000000111.110000001.00000000150.000000001.00000000400.0000000045.00000000500.000000001.00000000
См. подробнее *.txt файлы.
脚本(请附文件)。
结果。
从整个服务的统计数据中没有看到任何更有趣的东西。不知何故,他们设法计算出了零缩水。
不知何故,设法计算出零缩水。
事实证明,API-信号并不包含最新的信息。重新启动终端不会更新信号上的信息。网络上的信息更为新鲜。
目前,这个API-信号是原始的。
脚本(请附文件)。
结果。
从整个服务的统计数据中没有看到任何更有趣的东西。很少有统计数据。不是认真的。但在价格上做得太过火了,一点意义都没有。
信号总数:921。按经纪人分配(经纪人-数量)。
用户总数:4229人。信号经纪人的用户分布(经纪人-数量) :
所有<10的数量都没有显示。现在这个统计数字说明了很多问题......
现在这些统计数据说明了很多问题...
但是这个信号(有订阅者!)显然是欺诈性的。但由于某些原因,它可以通过真实的终端和API-信号获得。因此,统计方法毕竟使我们很容易找到 "混蛋"。
开发人员(和其他人),请注意。
但是这个信号(有订阅者!)显然是欺诈性的。但由于某些原因,它可以通过真实的终端和API-信号获得。因此,统计方法毕竟使我们很容易找到 "混蛋"。
开发人员(和其他人),请注意。