#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-Signalsには最新の情報が含まれていないことが判明しました。端末を再起動しても、信号の情報は更新されません。情報はWebの方が新鮮です。
このAPI-Signalsは、現時点では生ものです。
スクリプト(ファイルを添付してください)。
結果
サービス全体の統計から見て、これ以上面白いものはなかった。統計はほとんどない。本気じゃない。でも、価格をオーバーするのはまったく意味がない。
総信号数:921本。ブローカーによる分配(ブローカー-数量)。
総加入者数:4229人。シグナルブローカーによる購読者の分布(ブローカー-数量):
10以下の数量はすべて表示されませんでした。さて、この統計は多くを語っている...。
この統計は今、多くのことを物語っている...。
しかし、このシグナル(加入者がいる!)は明らかに詐欺的なものです。しかし、なぜかリアルターミナルとAPI-Signalsから利用可能です。つまり、統計的なアプローチで、結局「アホ」を見つけやすいということですね。
デベロッパー(その他)の皆様、ご注目ください。
しかし、このシグナル(加入者がいる!)は明らかに詐欺的なものです。しかし、なぜかリアルターミナルとAPI-Signalsから利用可能です。つまり、統計的なアプローチで、結局「アホ」を見つけやすいということですね。
デベロッパー(その他)の皆様、ご注目ください。