#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;
}
Result:
Всего сигналов: 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 файлы.
Didn't see anything more interesting from the statistics for the whole service.
It turned out that the API-Signals do not contain up-to-date information. Rebooting the terminal does not update the information on the signals. The information is much fresher in web.
TheXpert: Few statistics. Not serious. But it doesn't make sense to go overboard with the price at all.
I agree, the optimal price is around $30 - that is the value of this study, although I have not included the last 2 points with prices of $400 and $500 in the graph, as not typical. In general, the pattern of income falling with increasing price, typical of the goods and services market, is observed. Some variation seems to be related to the quality of the signal and the personality of the signal owner (the more famous he is for his former achievements, the more "upfront" connections are made in the hope of good results in the future).
In particular, an inconspicuous broker who has a signal (free) with a large number of subscribers immediately catches the eye. The assumption that this is about marketing is fully confirmed if this signal is googled.
But this signal (with subscribers!) is clearly fraudulent. But for some reason it is available through the real terminal and API-Signals. So, the statistical approach makes it easy to find "assholes" after all.
But this signal (with subscribers!) is clearly fraudulent. But for some reason it is available through the real terminal and API-Signals. So, the statistical approach makes it easy to find "assholes" after all.
Developers (and others), take note.
He got banned recently, it probably makes you think a bit, even without statistics. And the monstrous slippage and obscenely large deposit - too. Well, those who are still involved, are their own enemies, so ))))
Script (please attach file):
Result:
Didn't see anything more interesting from the statistics for the whole service.Somehow they managed to calculate zero drawdown:
Somehow managed to calculate zero drawdown:
It turned out that the API-Signals do not contain up-to-date information. Rebooting the terminal does not update the information on the signals. The information is much fresher in web.
This API-Signals is raw at the moment.
Script (please attach file):
Result:
Didn't see anything more interesting from the statistics for the whole service.Few statistics. Not serious. But it doesn't make sense to go overboard with the price at all.
Total number of signals: 921. Distribution by broker (broker - quantity):
Total subscribers: 4229. Distribution of subscribers by signal brokers (broker - quantity) :
All quantities < 10 did not show. Now this statistic says a lot...
These statistics now tell a lot...
But this signal (with subscribers!) is clearly fraudulent. But for some reason it is available through the real terminal and API-Signals. So, the statistical approach makes it easy to find "assholes" after all.
Developers (and others), take note.
But this signal (with subscribers!) is clearly fraudulent. But for some reason it is available through the real terminal and API-Signals. So, the statistical approach makes it easy to find "assholes" after all.
Developers (and others), take note.