ИНФОРМАЦИОННЫЕ СИСТЕМЫ И СТРАТЕГИИ
Добро пожаловать

Добро пожаловать на форум. посвященный безубыточной торговли на рынке форекс. Зарегистрируйтесь на нашем форуме и Вы всегда будете в курсе последних технологий, применяемых на рынке форекс для безубыточной торговли.


Join the forum, it's quick and easy

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И СТРАТЕГИИ
Добро пожаловать

Добро пожаловать на форум. посвященный безубыточной торговли на рынке форекс. Зарегистрируйтесь на нашем форуме и Вы всегда будете в курсе последних технологий, применяемых на рынке форекс для безубыточной торговли.
ИНФОРМАЦИОННЫЕ СИСТЕМЫ И СТРАТЕГИИ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
ИНФОРМАЦИОННЫЕ СИСТЕМЫ И СТРАТЕГИИ


     Рады приветствовать Вас, Гость. Надеемся, что знакомство с форумом ФОРЕКС. Технологии безубыточной
торговли будет для Вас не только крайне полезно, но и принесет массу положительных эмоций

Добро пожаловать
Статистика
Всего зарегистрированных пользователей: 8035
Последний зарегистрированный пользователь: gerber

Наши пользователи оставили сообщений: 4638 в 2300 сюжете(ах)
ПРИНЦИПЫ ТОРГОВОЙ СИСТЕМЫ "TREND HUNTER"
ПРИНЦИПЫ ТОРГОВОЙ СИСТЕМЫ "TREND HUNTER"

Основными принципами, на которых базируется торговая форекс система
"Trend Hunter" являются следующие:

1. Вхождение в сделку приоритетно по текущему тренду

Так как мы при построении торговой форекс системы также опираемся на
теорию вероятностей, основным постулатом в этом смысле по отношению к

тренду является то, что

1. Тренд скорее продолжится, чем изменит свое направление
2. Вероятность более выгодной сделки выше при заключению ее по тренду,
чем против него

Следовательно, основные сделки на рынке форекс будут заключаться
преимущественно в направлении существующего тренда (направления движения

валютного кросс-курса). Здесь необходимо отдельно оговорить тот момент,
что сделки против тренда не запрещены, но они являются сделками высокой

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

При расчете принимаются во внимание 2 параметра - направление
тренда
и сила тренда. Здесь применяется
классический подход

Элдера при установлении направления движения тренда и индикаторы силы
при оценки его мощности, а следовательно и потенциала для дальнейшего

движения.

Вероятность успешной сделки по тренду выражается так:

> 50% - 5
> 40% - 3
> 30% - 1

<30% - 0
<20% - сделка отменяется

Объемы подтверждают принятие решения

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

принципы торговой форекс системы "Trend Hunter", так как нам необходимо
набрать несколько торговых фильтров и потом методом исключения, оставить

только те, у которых вероятность срабатывания наиболее высокая. Это
позволит существенно повысить эффективность предлагаемой торговой системы.

Итак, форекс объемы. Известно общее правило, при котором увеличения
объемов указывает на сильную тенденцию на рынке форекс, а их снижение на

слабеющую. В торговой форекс системе "Trend Hunter" это тоже так, но есь
одно "но" в случае их противоречия (конвергенции или дивергенции) фильтр

будет отрицательным.

Таким образом:

Увеличение по тренду - +1
Постоянный объем - 0
Уменьшение по тренду - -1

Увеличение против тренда - -2
Уменьшение против тренда - -2

Анализ исторического периода на форекс

Естесственно, для каждой торговой форекс системы актуален вопрос "За
какой временной промежуток необходимо анализировать тенденцию для принятия

торгового решения?". Ответ, по нашему мнению таков - пропорционально
торгуемому периоду на форекс. Так как сейчас большинство трейдеров

предпочитают внутридневную торговлю, то мы ориентировались именно на
них. Средний торгуемый период в данной форекс - системе 6 часов (24/6). Это

не значит, что сделка на форекс "выживет" в течение всего этого периода,
просто он является ориентировочным.

НО, сделку необходимо закрыть по истечении этого периода, даже, если она
сохраняет потенциал для дальнейшего развития. Здесь необходимо немного

пояснить, почему так. Общеизвестно, что одними из основных условий, по
которым сделки на валютном рынке форекс могут быть закрыты это (А)

достижение планируемого уровня прибыли/убытков и (Б) превышение времени
запланированного на сделку. Как Вы уже успели догадаться, это праила

риск-менеджмента на рынке форекс. К тому же это подтверждается советами
опытных трейдеров, что не стоит жадничать и испытывать судьбу.

Запланировали - взяли, даже, если дальше сделка может развиваться в
положительную сторону. Но может и не развиваться, ведь так? Лучше синица в

руке, чем журавль в небе. Тем более на рынке форекс. Думаю, Вы
согласитесь с нами.

Использование фундаментальной конъюнктуры на рынке форекс

Это еще один большой вопрос - стоит ли использовать фундаментальные
данные при торговле на рынке форекс и ее конъюнктуру (сами данные + периоды

выхода ключевых новостей)? Большинство торговых форекс систем старого
образца полностью игнорировали данные фундаментального анализа рынка,

сосредотачивая свое внимание преимущественно на технических приемах
торговли. В прогрессивных системах торговли мы стараемся учитывать и этот

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

перестраиваться. И здесь важно, чтобы торговая система на форекс умела
быстро перестроится, изменив параметры. Либо необходимо в такие моменты

отказаться от совершения сделок на рынке форекс.

Приглашаем всех к диалогу относительно создаваеемой форекс - системы
"Trend Hunter". Принимается любая критика, так как нашей задачей является

создание универсальной адаптивной форекс - системы для всех трейдеров
этого сообщества.

Вы не подключены. Войдите или зарегистрируйтесь

Не совсем советник - часть операций необходимо выполнять ручками

Перейти вниз  Сообщение [Страница 1 из 1]

Alderon


Гость

Не совсем советник - часть операций необходимо выполнять ручками (советник используется только для синхронизации закрытия поз), но идея проверена Wink

Многие ДЦ используют для привлечения клиентов различные бонусные программы. Конечно наличие на счете бонусных средств сразу же накладывает ряд ограничений на совершение операций (чтобы предотвратить неприятные для ДЦ последствия) – их нельзя снять до совершения определенного количества сделок, нельзя открыть одновременно разнонаправленные ордера (или ордера с другим видом внутреннего хеджа) и т.д. Однако никто Вам не запрещает хеджироваться в другом ДЦ. Wink

Рассмотрим вариант такой сделки через ДЦ «InstаForex» (в примере использован «приветственный бонус» 30%, зачисляемый автоматически при пополнении нового счета) и «Alpari»:

1. Скачиваем и устанавливаем терминалы МТ4 для обеих ДЦ (запоминаем директорию установки – она нам потребуется в дальнейшем. Подробнее в тексте комментариев советника.)

2. Открываем рублевые счета в обеих ДЦ (на Инсте – обязательно новый! Клиентским соглашением количество счетов для получения приветственного бонуса не ограничивается) с максимальным плечом (Инста – 1:1000, Альпари – счет «Микро» с минимальным лотом 0.01 и плечем 1:500)

3. Зачисляем на счета: «Альпари» - 1300, «Инстa» - 1000 руб.

4. Получаем приветственный бонус на И. Депозит теперь тоже 1300 руб.

5. Открываем позиции: buy 0.1 GBPUSD на «И» и sell 0.01 GBPUSD на «А». (Лот на «И» в 10 раз больше, так как составляет 0.1 от стандартного) Потери на спред составят ориентировочно 20 руб. Открываем одновременно вручную из соответствующих терминалов (рекомендую сначала дождаться открытия на «И», - иногда присутствует значительная задержка. На «А» открывается мгновенно).

6. Подключаем советники и вводим для них переменные (тикеты открытых позиций, значение собственных и бонусных средств и т.д. При присоединении советников к графику на вкладке «общие» выставляем галочки «Разрешить советнику торговать» и «Разрешить импорт функций из DLL».). При успешном подключении наблюдаем надпись «Связаны ордера №… и №…, связанная прибыль …» (в скобках – значение связанной прибыли в пунктах). Теперь можно перекурить – все под контролем Wink В течение «жизни» позиции советник отмечает линией уровень потенциального закрытия (Stop out на оппонент-ДЦ)

7. С равной вероятностью (положим, - открылись «случайно») данная сделка завершится одним из двух исходов:

а) Stop out на «А» (советник автоматически закрывает связанную сделку на «И»). Остаток средств на «А» - 90 руб, на «И» - 1300+1300-90-20=2490 руб. (доступно к снятию, за вычетом бонуса – 2190). Общая сумма доступных к снятию средств на счетах – 2280 руб. Совокупный убыток операции – 1300+1000-2280=20 руб.

б) Stop out на «И» (советник автоматически закрывает связанную сделку на «А». При развитии событий по такому сценарию до исчерпания собственных средств на «И» совокупная прибыль будет уменьшаться, а затем, когда будут затронуты бонусные средства, резко расти). Остаток средств на «И» - 45 руб. (про них сразу же забываем: их уже снять нельзя - депозит меньше зачисленного на счет бонуса. В дальнейшем этот счет можно использовать как учебный. Если прибыль на нем превысит бонус, то средства, за вычетом бонуса, можно снять), на «А» - 1300+1300-45-20=2535 руб. (все доступны к снятию). Общая сумма доступных к снятию средств на счетах – 2535 руб. Совокупная прибыль операции – 2535-(1300+1000)=235 руб. или 235/2300=10%

8. Перераспределяем в начальном соотношении средства на счетах (на «И» вновь используем новый счет! Даже если Stop out не было. Так как при снятии средств со счета потеряем часть бонуса. Расчет сумм в советнике производится из предположения об использовании для перераспределения системы WebMoney – 0.8% с суммы перечисления) – конец цикла.

Очевидно, что средняя прибыль при использовании схемы составляет (поскольку оба исхода равновероятны) (235-20)/2=107 руб. или, при использовании произвольных сумм (естественно минимальная сумма ограничена залоговыми требованиями для открытия как минимум 0.01 лота на «А». Ориентировочно от 600 руб.) - 5% от используемых средств.

При использовании неравных лотов можно добиться положительной прибыльности при любом исходе и оптимизировать максимальную прибыль за месяц в зависимости от волатильности используемого инструмента и соотношения депозитов «А» и «И». Если лень самостоятельно заниматься математикой, то за символическую сумму в десять американских рублей вышлю советника, который займется этой оптимизацией Wink а также несколько дополнительных советов, позволяющих увеличить прибыльность (до двух раз) и надежность торговой системы.

Вашу благодарность за полученную прибыль Smile можно перечислить на кошелек WebMoney Z422999660753 (в комментарии к переводу укажите свой e-mail, если хотели бы получить дополнительные материалы)

Попутного Вам тренда!

Alderon


Гость

extern int FirstTicket=22222222, //тикет ордера Альпари
SecondTicket=333333333, //тикет ордера Инста
timeout=150000; //время в миллисекундах, превышение которого предупреждает
//о возможном разрыве связи с серверами
extern double SoundProfit=100; //значение связанной прибыли, по достижению которой
//подается звуковой сигнал
extern bool Sound=true;//разрешение/запрещение звуковых сигналов
extern string SecondPath="C:\Program Files\InstaTrader\experts\files\info"; //директория
//для отправки сигнала о закрытии связанной позиции. Если отличается, то часть
//"C:\Program Files\InstaTrader\" необходимо скорректировать

double InsuranceProfit;
#include
#import "kernel32.dll"
int _lopen (string path, int of);
int _lcreat (string path, int attrib);
int _llseek (int handle, int offset, int origin);
int _lread (int handle, int& buffer[], int bytes);
int _lwrite (int handle, string buffer, int bytes);
int _lclose (int handle);
#import


void WriteFile (string path, string buffer)
{
int handle, result, count=StringLen (buffer);
handle=_lopen (path,1);
if(handle<0)
{
handle=_lcreat (path,0);
if(handle<0)
{
Print ("Ошибка создания файла ",path);
return;
}
result=_lclose (handle);
}
handle=_lopen (path,1);
if(handle<0)
{
Print("Ошибка открытия файла ",path);
return;
}
result=_llseek (handle,0,0);
if(result<0)
{
Print("Ошибка установки указателя" );
return;
}
result=_lwrite (handle,buffer,count);
if(result<0)
{
Print("Ошибка записи в файл " ,path," ",count," байт");
}
result=_lclose (handle);
if(result<0)
{
Print ("Ошибка закрытия файла ",path);
}
}

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (!ObjectDelete("online")) Print("ошибка в строке 1: ",GetLastError());
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (!OrderSelect(FirstTicket, SELECT_BY_TICKET))
{Print("ошибка в строке 2: ",GetLastError()); return(0);}
int cmd=OrderType();
double price;
if (cmd==0) price=Bid;
if (cmd==1) price=Ask;
double Lots=OrderLots(), secondstop;
double FirstProfit=OrderProfit()+OrderSwap();
double pointStop=(AccountFreeMargin()+0.8*AccountMargin())/10/
Lots/MarketInfo(Symbol(), MODE_TICKVALUE);

string info="@"+DoubleToStr(GetTickCount(),0)+"@"+DoubleToStr(FirstTicket, 0)+
"@"+DoubleToStr(OrderCloseTime(), 2)+"@"+DoubleToStr(FirstProfit, 2)+
"@"+DoubleToStr(pointStop, 0)+"@";

//пишем в файл
WriteFile(SecondPath+Symbol()+".txt",info);

//читаем файл
string name="info"+Symbol()+".txt";
int handle;
handle=FileOpen(name, FILE_BIN|FILE_READ);
if(handle<1) Print ("ошибка при открытии файла ",GetLastError());
if(handle>0) {info=FileReadString(handle,100); FileClose(handle);}
int start=StringFind(info, "@", 0)+1;
int count=StringFind(info, "@", start)-start;
int secondtime=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondticket=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondclosetime=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
double secondprofit=StrToDouble(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondpointstop=StrToInteger(StringSubstr(info, start, count));

string text_online="НЕ УСТАНОВЛЕНА СВЯЗЬ!";
double text_online_Y=0.9*WindowPriceMax(0)+0.1*WindowPriceMin(0);
int text_online_X=WindowBarsPerChart()/2;
if (ObjectFind("online")==-1)
if (!ObjectCreate("online", OBJ_TEXT, 0, Time[text_online_X], text_online_Y))
Print("ошибка в строке 3: ",GetLastError());

if (!ObjectSet("online", OBJPROP_TIME1, Time[text_online_X])||
!ObjectSet("online", OBJPROP_PRICE1, text_online_Y)||
!ObjectSetText("online",text_online, 14, "Times New Roman", Yellow))
Print("ошибка в строке 4: ",GetLastError());

if (!MathAbs(secondtime-GetTickCount()) {Print ("превышен timeout или неверный SecondTicket"); return(0);}
//работаем онлайн
if (secondprofit<0) secondprofit=1.016*secondprofit;
if (FirstProfit<0) FirstProfit=1.016*FirstProfit;
InsuranceProfit=secondprofit+FirstProfit;
if (Sound==true&&InsuranceProfit>SoundProfit&&FirstProfit>0) PlaySound("alert.wav");
double Profitpoint=InsuranceProfit/Lots/MarketInfo(Symbol(), MODE_TICKVALUE);
text_online="Связаны ордера "+FirstTicket+" и "+secondticket+" Profit="+
DoubleToStr(InsuranceProfit,2)+" ("+DoubleToStr(Profitpoint,0)+")";
if (!ObjectSetText("online",text_online, 14, "Times New Roman", Yellow))
Print("ошибка в строке 5: ",GetLastError());
if (cmd==0) {price=Bid; secondstop=Bid+secondpointstop*Point;}
if (cmd==1) {price=Ask; secondstop=Bid-secondpointstop*Point;}
if (!secondclosetime==0)
if (OrderClose(FirstTicket, Lots, price, 0, CLR_NONE))
if (!ObjectDelete("online"))
FirstTicket=0;

if (ObjectFind("secondstop")==-1)
{
if (!ObjectCreate("secondstop", OBJ_HLINE, 0, Time[100], secondstop))
Print("ошибка создания объекта secondstop: ",GetLastError());
if (!ObjectSet("secondstop", OBJPROP_COLOR, Yellow))
Print("ошибка изменения цвета объекта secondstop: ",GetLastError());
}
if (!ObjectSet("secondstop", OBJPROP_PRICE1, secondstop))
Print("ошибка изменения цены объекта secondstop: ",GetLastError());

return(0);
}
//+------------------------------------------------------------------+

Alderon


Гость

extern int FirstTicket=333333333, //тикет ордера Инста
SecondTicket=22222222, //тикет ордера Альпари
timeout=150000;//время в миллисекундах, превышение которого предупреждает
//о возможном разрыве связи с серверами
extern double Balans=1000, //сумма собственных средств на счете
Bonus=300, //сумма бонусных средств на счете. Для нового счета - 30% от Balans
SoundProfit=100;//значение связанной прибыли, по достижению которой
//подается звуковой сигнал
extern bool Sound=true;//разрешение/запрещение звуковых сигналов
extern string SecondPath="C:\Program Files\MetaTrader - Alpari\experts\files\info";//директория
//для отправки сигнала о закрытии связанной позиции. Если отличается, то часть
//"C:\Program Files\MetaTrader - Alpari\" необходимо скорректировать

double InsuranceProfit;
#include
#import "kernel32.dll"
int _lopen (string path, int of);
int _lcreat (string path, int attrib);
int _llseek (int handle, int offset, int origin);
int _lread (int handle, int& buffer[], int bytes);
int _lwrite (int handle, string buffer, int bytes);
int _lclose (int handle);
#import


void WriteFile (string path, string buffer)
{
int handle, result, count=StringLen (buffer);
handle=_lopen (path,1);
if(handle<0)
{
handle=_lcreat (path,0);
if(handle<0)
{
Print ("Ошибка создания файла ",path);
return;
}
result=_lclose (handle);
}
handle=_lopen (path,1);
if(handle<0)
{
Print("Ошибка открытия файла ",path);
return;
}
result=_llseek (handle,0,0);
if(result<0)
{
Print("Ошибка установки указателя" );
return;
}
result=_lwrite (handle,buffer,count);
if(result<0)
{
Print("Ошибка записи в файл " ,path," ",count," байт");
}
result=_lclose (handle);
if(result<0)
{
Print ("Ошибка закрытия файла ",path);
}
}

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (!ObjectDelete("online")) Print("ошибка в строке 1: ",GetLastError());
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (!OrderSelect(FirstTicket, SELECT_BY_TICKET))
{Print("ошибка в строке 2: ",GetLastError()); return(0);}
int cmd=OrderType();
double price;
if (cmd==0) price=Bid;
if (cmd==1) price=Ask;
double Lots=OrderLots(), secondstop;
double FirstProfit=MathMax(OrderProfit()+OrderSwap(),-Balans);
double pointStop=10*(AccountFreeMargin()+0.9*AccountMargin())/
Lots/MarketInfo(Symbol(), MODE_TICKVALUE);

string info="@"+DoubleToStr(GetTickCount(),0)+"@"+DoubleToStr(FirstTicket, 0)+
"@"+DoubleToStr(OrderCloseTime(), 2)+"@"+DoubleToStr(FirstProfit, 2)+
"@"+DoubleToStr(pointStop, 0)+"@";

//пишем в файл
WriteFile(SecondPath+Symbol()+".txt",info);

//читаем файл
string name="info"+Symbol()+".txt";
int handle;
handle=FileOpen(name, FILE_BIN|FILE_READ);
if(handle<1) Print ("ошибка при открытии файла ",GetLastError());
if(handle>0) {info=FileReadString(handle,100); FileClose(handle);}
int start=StringFind(info, "@", 0)+1;
int count=StringFind(info, "@", start)-start;
int secondtime=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondticket=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondclosetime=StrToInteger(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
double secondprofit=StrToDouble(StringSubstr(info, start, count));
start=start+count+1;
count=StringFind(info, "@", start)-start;
int secondpointstop=StrToInteger(StringSubstr(info, start, count));

string text_online="НЕ УСТАНОВЛЕНА СВЯЗЬ!";
double text_online_Y=0.9*WindowPriceMax(0)+0.1*WindowPriceMin(0);
int text_online_X=WindowBarsPerChart()/2;
if (ObjectFind("online")==-1)
if (!ObjectCreate("online", OBJ_TEXT, 0, Time[text_online_X], text_online_Y))
Print("строка 12: ",GetLastError());

if (!ObjectSet("online", OBJPROP_TIME1, Time[text_online_X])||
!ObjectSet("online", OBJPROP_PRICE1, text_online_Y)||
!ObjectSetText("online",text_online, 14, "Times New Roman", Yellow))
Print("ошибка в строке 3: ",GetLastError());

if (!MathAbs(secondtime-GetTickCount()) {Print ("превышен timeout или неверный SecondTicket"); return(0);}
//работаем онлайн
if (secondprofit<0) secondprofit=1.016*secondprofit;
if (FirstProfit<0) FirstProfit=1.016*FirstProfit;
InsuranceProfit=secondprofit+FirstProfit;
if (Sound==true&&InsuranceProfit>SoundProfit&&FirstProfit>0) PlaySound("alert.wav");
double Profitpoint=InsuranceProfit/Lots/MarketInfo(Symbol(), MODE_TICKVALUE);
text_online="Связаны ордера "+FirstTicket+" и "+secondticket+" Profit="+
DoubleToStr(InsuranceProfit,2)+" ("+DoubleToStr(Profitpoint,0)+")";
if (!ObjectSetText("online",text_online, 14, "Times New Roman", Yellow))
Print("ошибка в строке 4: ",GetLastError());
if (cmd==0) {price=Bid; secondstop=Bid+secondpointstop*Point;}
if (cmd==1) {price=Ask; secondstop=Bid-secondpointstop*Point;}
if (!secondclosetime==0)
if (OrderClose(FirstTicket, Lots, price, 0, CLR_NONE))
if (!ObjectDelete("online"))
FirstTicket=0;

if (ObjectFind("secondstop")==-1)
{
if (!ObjectCreate("secondstop", OBJ_HLINE, 0, Time[100], secondstop))
Print("ошибка создания объекта secondstop: ",GetLastError());
if (!ObjectSet("secondstop", OBJPROP_COLOR, Yellow))
Print("ошибка изменения цвета объекта secondstop: ",GetLastError());
}
if (!ObjectSet("secondstop", OBJPROP_PRICE1, secondstop))
Print("ошибка изменения цены объекта secondstop: ",GetLastError());

return(0);
}
//+------------------------------------------------------------------+

Вернуться к началу  Сообщение [Страница 1 из 1]

Права доступа к этому форуму:
Вы не можете отвечать на сообщения

 
  •  

Создать форум на Forum2x2 | ©phpBB | Бесплатный форум поддержки | Сообщить о нарушении | Последние обсуждения