ShamanHand
Наношу добро, причиняю пользу.

 
Уровень 24

  Торгую в компаниях:

РЕКОМЕНДУЮ



Торговый бот "Матрёшка_2.1"

Улучшенная по функционалу версия «Матрёшки».
Весь предыдущий функционал остался на месте, однако данная версия совы очень серьёзно отличается от предшественника.

1) Добавлен очень понравившийся мне канальный индикатор Triangular Moving Average от Андрея (АМ2).

2) Добавлен индикатор стохастика со входом по заказу SENNSK.


3) Расширен функционал благодаря отсутствию привязки входа только и исключительно к паттерну сужающегося треугольника из трёх свечей. Теперь можно не только фильтровать вход имеющимися индикаторами, но и миксовать входы по сигналам паттерна и сигналам индикаторов.


Хотя бы просто потому что ничто нам не мешало это сделать, плюс так можно посмотреть, как ведёт себя «колубийский» вход по стохастику независимо от матрёшечного паттерна.

Таким образом в одном советнике больше возможностей подобрать необходимую комбинацию настроек.
В общем, получилась эдакая монстроподобная ядрёная солянка, но достаточно понятная.
Скачать сову можно здесь.
Не тестировал, только сейчас написана сова, поэтому прошу сообщать о замеченных траблах.
  • +14
  • Просмотров: 7423
  • 18 сентября 2021, 18:32
  • ShamanHand
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

  Предыдущая запись в моем блоге
Торговый бот "Матрёшка_2.0"
Следующая запись в моем блоге  
Путь совы
02 сентября 2021
20 апреля 2022

Комментарии (30)

+
0
*bildbody* 
avatar

  45  Bishop Сообщений: 5719 - АЛЬФАХАМЕЦ-Машковод

  • 18 сентября 2021, 19:07
+
0
*bravo* 
avatar

  18  Kashtan Сообщений: 737 - Игорь

  • 19 сентября 2021, 00:46
+
0
Вот результат за год на 5-минутке фунтобакса, «колумбийский» вход по стохастику + перекупленность/перепроданность + канал Triangular Moving Average от Андрея (Stochastik + TS + TMA).

Ну у меня есть претензии, сыроваты входы как по каналу TMA, так и по стохастику.
Со входами по стохастику к Андрею никаких претензий (да, разумеется, я их у Андрея взял, из заказа SENNSK), в коде он реализовал всё грамотно. Отслеживая логику — всё правильно, и даже с претензией на изящность подошёл к задаче, но будто что-то всё-таки не так отрабатывает, надо поковыряться.
И входы по каналу ТМА я лично как-то слишком плоско, не продуманно реализовал.
И там, и там нужно их грамотней продумать как идейно, так и лучше программно реализовать, но это пока отложу в нижний ящик стола, пока недосуг.
Если есть идеи — подкидывайте, буду только «за».

P.S.
Кстати, мне нравится название, «колумбийский вход» по стохастику)))
Звучит как-то)))
Редактирован: 19 сентября 2021, 11:51
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 19 сентября 2021, 11:41
+
0
Вот результат за год на 5-минутке фунтобакса, «колумбийский» вход по стохастику + перекупленность/перепроданность + канал Triangular Moving Average от Андрея (Stochastik + TS + TMA).

А можно сет сбросить, чтобы рисунок не рассматривать!
avatar

  20  nonych Сообщений: 125 - Евгеша

  • 19 сентября 2021, 15:18
+
0
Дык, убей Бог, я ж просто навскидку зарядил, хто ж это упомнит:) 
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 19 сентября 2021, 16:18
+
0
Соотношение просадки к прибыли 30:1
Редактирован: 19 сентября 2021, 12:51
avatar

  12  Slava78 Сообщений: 598

  • 19 сентября 2021, 12:48
+
0
Соотношение просадки к прибыли 30:1

И о чем это говорит
avatar

  20  nonych Сообщений: 125 - Евгеша

  • 19 сентября 2021, 15:17
+
0
Вот результат за год на 5-минутке фунтобакса, «колумбийский» вход по стохастику + перекупленность/перепроданность + канал Triangular Moving Average от Андрея (Stochastik + TS + TMA).

А можно сет сбросить, чтобы рисунок не рассматривать!
avatar

  20  nonych Сообщений: 125 - Евгеша

  • 19 сентября 2021, 14:01
+
0
Ну попробуйте покрутить эти настройки.

Вещь рабочая, но всё равно, как уже говорил, сыроваты входы, наспех сделаны, есть над чем подумать.
Редактирован: 20 сентября 2021, 03:47
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 20 сентября 2021, 03:45
+
0
Спасибо!
avatar

  20  nonych Сообщений: 125 - Евгеша

  • 20 сентября 2021, 04:54
+
+3
Господа?
Хорошая вещь получается.
Нужен только отклик.
Подключайтесь.
Нужен свежий взгляд со стороны.
В частности, желательно индикатор стохастика заменить другим, как я считаю.
И, как я уже и говорил, нужно поумней продумать входы по каналу индикатора ТМА.
Пишите, насколько в моих силах — сделаю.
Всё, разумеется, в открытый доступ.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 23 сентября 2021, 18:29
+
+1
*think* 

А по 17 и 18 году не все так хорошо и наверное нужно попробовать стохастика поменять.
avatar

  9  SENNSK Сообщений: 59

  • 24 сентября 2021, 14:07
+
+1
Перезалил архив.
Добавил один пункт в выбор индикаторов.
Также сделал версию для теста на новостях, воткунл в советник время выхода новостей с 01.01.2016г по 06.08.2021г., данные взяты с сайта investing.com
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 25 сентября 2021, 20:39
+
0
Матрёшка 2.2
Добавлен профит по % от депозита.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 12 декабря 2021, 14:37
+
0
а где матрешка2.2?
avatar

  22  igrun Сообщений: 1569 - igrun

  • 12 декабря 2021, 19:33
+
0
В треугольной бороде!!!
Всё по ссылке.
Забыл добавить индикатор новостей в архив.
Теперь он тоже там.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 12 декабря 2021, 20:31
+
0
Сделал версию для тестов, учитывая новости.
Перезалил архив, Matreshka_v2.2_news_test.
В тестовую версию включены сильные новости с 01.01.2016г по 06.08.2021г.
У меня новости были скачаны и приведены в должный вид только в этом промежутке, потому воткнул то, что есть.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 20 января 2022, 06:47
+
0
Когда-то баловался с новостями (интересная тема) и получил код.
Посмотрите, может пригодится.


#property description "This Expert Advisor loads the News from the site Investing.com without using .dll"
#import "kernel32.dll"
void     GetLocalTime(int& a0[]);
int      GetTimeZoneInformation(int& a0[]);
#import
#property strict

input bool    Auto_GMToffset        = TRUE;
input int     Manual_GMToffset      = 0;          // Your GMT (for news)
input double  RandomOpenMinuteDelay = 5.0;
input int     BeforeNewsAlert       = 5;          // Внимание до новости, минуты
input bool    NewsHard              = true;       // Enable hard news
input bool    NewsMedium            = false;      // Enable medium news
input bool    NewsLight             = false;      // Enable light news
input string  NewsSymb              = "";         // Валюта для отображения новостей (пусто - только текущая валюта)
input bool    DrawLines             = true;       // Линии новостей на графике
input bool    Next                  = false;      // Только будующие новостные линии
input bool    Signal                = false;      // Сигналы о предстоящих новостях
input bool    flagAlert             = false;      // Флаг выставления Алертов

color highc          = clrRed;     // Color of important news
color mediumc        = clrBlue;    // Color of medium news
color lowc           = clrLime;    // Сolor of weak news
int   Style          = 0;          // Line style
int   Upd            = 43200;      // Period news updates in seconds (12 часов)
//----
int      NomNews=0,
         Now=0,
         sumNew=0;
datetime LastUpd;
string   symb;
string   NewsArr[4][1000];
double   ChNw=0,                     // Техническая переменная появления/исчезновения новости.
         CheckNews=0;
//----
//----
int      GMToffset,
         LoclTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if(StringLen(NewsSymb)>1)
      symb=NewsSymb;
   else
      symb=Symbol();

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0,OBJ_VLINE);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if (!IsDllsAllowed()) 
     {
      Alert("DLLs are disabled.  To enable tick the checkbox in the Common Tab of Advisor");
      return;
     }
 
   AutoGMToffset();
   string display ="\n GMT: " + TimeToStr(LoclTime,TIME_MINUTES); 
   
   if (GMToffset>0) 
     display = display + "\n Broker TimeZone GMT: +" + GMToffset;
   else 
     display = display + "\n Broker TimeZone GMT: " + GMToffset;
     
   int Myoffset = + ((TimeLocal() - LoclTime) / 3500);
   if (Myoffset>0) 
     display = display + "\n Your TimeZone GMT: +" + Myoffset;
   else 
     display = display + "\n Your TimeZone GMT: " + Myoffset;
   Comment (display);
      if(TimeCurrent()-LastUpd>=Upd)
        {
         Comment("Загрузка новостей...");
         UpdateNews();
         LastUpd=TimeCurrent();
        }
  
      if(DrawLines)  
        LinesDraw();//--------------- Рисуем линии новостей на графике -------------+
      if(BeforeNewsAlert>0 && TimeCurrent()+BeforeNewsAlert*60<TimeNewsFunck(1)&& StringFind(symb,NewsArr[1][1])>=0)
        Alert("Attention!!!There are ", BeforeNewsAlert," minutes left before the news.");
}
//+---------------------------------------------------------------------------------+
// Скачать исходный код HTML страницы текстовой переменной.  Возвращает результат  //
//+---------------------------------------------------------------------------------+
string Read_HTML()
{
   string cookie=NULL,headers;
   char post[],result[];
   string TXT="";
   int res;
         // Для работы с сервером необходимо добавить URL-адрес "https://www.google.com/finance"
         // в список разрешенных URL-адресов (главное меню - > Сервис - > вкладка настроек " советники"):
   string google_url="http://ec.forexprostools.com/?columns=exc_currency,exc_importance&importance=1,2,3&calType=week&timeZone=15&lang=1";
   ResetLastError();
//--- Скачиваем html-страницу
   int timeout=5000; //--- Тайм-аут менее 1000 (1 сек.) недостаточен при низкой скорости интернета
   res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
//--- Проверка ошибок
   if(res==-1)
     {
      Print("WebRequest error, err.code  =",GetLastError());
      MessageBox("You must add the address ' "+google_url+"' in the list of allowed URL tab 'Advisors' "," Error ",MB_ICONINFORMATION);
      //--- You must add the address ' "+ google url"' in the list of allowed URL tab 'Advisors' "," Error "
     }
   else   //------------------------- Успешная загрузка -----------------------------------------------
     {
      PrintFormat("File successfully downloaded, the file size in bytes  =%d.",ArraySize(result));
      int filehandle=FileOpen("news-log.html",FILE_WRITE|FILE_BIN);//-------------------- Сохраняем данные в файле
      if(filehandle!=INVALID_HANDLE) //----------------------------------------------------------- проверка ошибки
        {
         FileWriteArray(filehandle,result,0,ArraySize(result));//---Сохраняем содержимое массива result [] в файле
         FileClose(filehandle);//------------------------------------------------------------------ Закрываем файл

         int filehandle2=FileOpen("news-log.html",FILE_READ|FILE_BIN);
         TXT=FileReadString(filehandle2,ArraySize(result));
         FileClose(filehandle2);
        }
      else
        {
         Print("Error in FileOpen. Error code =",GetLastError());
        }
     }
   return(TXT);
}
//+---------------------------------------------------------------------------------+
datetime TimeNewsFunck(int nomf)
{
   string s=NewsArr[0][nomf];
   string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));
   return((datetime)(StringToTime(time) + GMToffset*3600));
}
//+---------------------------------------------------------------------------------+

Редактирован: 25 апреля 2022, 15:18
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 13:08
+
0
Вторая часть

//+---------------------------------------------------------------------------------+
void UpdateNews()
{
   string TEXT=Read_HTML();
   int sh = StringFind(TEXT,"pageStartAt>")+12;
   int sh2= StringFind(TEXT,"</tbody>");
   TEXT=StringSubstr(TEXT,sh,sh2-sh);

   sh=0;
   while(!IsStopped())
     {
      sh = StringFind(TEXT,"event_timestamp",sh)+17;
      sh2= StringFind(TEXT,"onclick",sh)-2;
      
      if(sh<17 || sh2<0)
         break;
      NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
      sh = StringFind(TEXT,"flagCur",sh)+10;
      sh2= sh+3;
      
      if(sh<10 || sh2<3)
         break;
      NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
      
      if(StringFind(symb,NewsArr[1][NomNews])<0)
         continue;
      sh = StringFind(TEXT,"title",sh)+7;
      sh2= StringFind(TEXT,"Volatility",sh)-1;
      
      if(sh<7 || sh2<0)
         break;
      NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
      
      if(StringFind(NewsArr[2][NomNews],"High")>=0 && !NewsHard)
         continue;
         
      if(StringFind(NewsArr[2][NomNews],"Moderate")>=0 && !NewsMedium)
         continue;
         
      if(StringFind(NewsArr[2][NomNews],"Low")>=0 && !NewsLight)
         continue;
      sh=StringFind(TEXT,"left event",sh)+12;
      int sh1=StringFind(TEXT,"Speaks",sh);
      sh2=StringFind(TEXT,"<",sh);
      
      if(sh<12 || sh2<0)
         break;
         
      if(sh1<0 || sh1>sh2)
         NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
      else
         NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
      NomNews++;
      
      if(NomNews==300)
         break;
     }
}
//+---------------------------------------------------------------------------------+
void LinesDraw()
{
         for(int i=0; i<NomNews; i++)
           {
            string Name=StringSubstr(TimeToStr(TimeNewsFunck(i),TIME_MINUTES)+"_"+NewsArr[1][i]+"_"+NewsArr[3][i],0,63);
            if(NewsArr[3][i]!="")
               if(ObjectFind(Name)==0)
                  continue;
            if(StringFind(symb,NewsArr[1][i])<0)
               continue;
            if(TimeNewsFunck(i)<TimeCurrent() && Next)
               continue;

            color clrf = clrNONE;
            if(NewsHard && StringFind(NewsArr[2][i],"High")>=0)
               clrf=highc;
            if(NewsMedium && StringFind(NewsArr[2][i],"Medium")>=0)
               clrf=mediumc;
            if(NewsLight && StringFind(NewsArr[2][i],"Low")>=0)
               clrf=lowc;
            if(clrf==clrNONE)
               continue;
            if(NewsArr[3][i]!="")
              {
               ObjectCreate(Name,0,OBJ_VLINE,TimeNewsFunck(i),0);
               ObjectSet(Name,OBJPROP_COLOR,clrf);
               ObjectSet(Name,OBJPROP_STYLE,Style);
               ObjectSetInteger(0,Name,OBJPROP_BACK,true);
              }
           }
      //------------------------------------------- Обработка событий--------------------------------------- -----------//
      int i;
      CheckNews=0;
      for(i=0; i<NomNews; i++)
        {
         int power=0;
         
         if(NewsHard && StringFind(NewsArr[2][i],"High")>=0)
            power=1;
         if(NewsMedium && StringFind(NewsArr[2][i],"Medium")>=0)
            power=2;
         if(NewsLight && StringFind(NewsArr[2][i],"Low")>=0)
            power=3;
         if(power==0)
            continue;
         if(StringFind(symb,NewsArr[1][i])>=0)
           {
            CheckNews=1;
            break;
           }
         else
            CheckNews=0;
        }
      if(CheckNews==1 && i!=Now && Signal)
        {
         Alert("In ",(int)(TimeNewsFunck(i)-TimeCurrent())/60," minutes released news ",NewsArr[1][i],"_",NewsArr[3][i]);
         Now=i;
        }
   if(flagAlert == true)
      Alert(" ChNw = ",ChNw," CheckNews= ",CheckNews," sumNew= ",sumNew) ;
}
//+---------------------------------------------------------------------------------+
int AutoGMToffset() 
{
   int Timezone[43];
      if (Auto_GMToffset == FALSE) 
        {
         GMToffset = Manual_GMToffset;
         LoclTime = TimeCurrent() - 3600 * GMToffset;
        }
       else 
         {
         int offset1 = -420;
         int offset2 = GetTimeZoneInformation(Timezone);
         if (offset2 != 0) offset1 = Timezone[0];
         if (offset2 == 2) offset1 += Timezone[42];
         LoclTime = TimeLocal() + 60 * offset1;
         GMToffset = (TimeCurrent() - LoclTime) / 3500;
      }
   return (0);
}
//+---------------------------------------------------------------------------------+
int Tradetime(int StartTime, int StopTime)
{
   bool Tradetime = FALSE;
   if (StartTime > StopTime) if (TimeHour(LoclTime) <= StopTime || TimeHour(LoclTime) >= StartTime) Tradetime = TRUE;
   if (StartTime < StopTime) if (TimeHour(LoclTime) >= StartTime && TimeHour(LoclTime) <= StopTime) Tradetime = TRUE;
   if (StartTime == StopTime)if (TimeHour(LoclTime) == StartTime) Tradetime = TRUE;
   if (DayOfWeek() == 5 && TimeHour(LoclTime) > 6) Tradetime = FALSE;
   if (TimeMinute(LoclTime) < RandomOpenMinuteDelay) Tradetime = FALSE;
   if (DayOfWeek() == 1 && TimeHour(LoclTime) < 2) Tradetime = FALSE;
   if (DayOfYear() < 7) Tradetime = FALSE;
   if (Month() == 12 && Day() > 20) Tradetime = FALSE;
   return (Tradetime);
}
//+---------------------------------------------------------------------------------+


Редактирован: 25 апреля 2022, 15:19
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 13:10
+
0
Перезалил с русскими пояснениями.
Когда-то работало, сейчас не проверял.
Код для меня тяжелый. Одни стринги (если они не на женщине) меня убивают, а слово типа «парсить»… Ну просто ужас форменный.
Редактирован: 25 апреля 2022, 15:31
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 15:28
+
0
Отскок от поддержки с образованием пинбара (описание изо), судя по рисунку, образовался на смене суток или, даже, недели. На Н4, проблем не вижу. Но есть же народ и поуже в плечах.

Думаю для таких необходимо предусмотреть контроль спреда.
Или наоборот, так им и надо?
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 13:01
+
0
Да мне всей этой фигнёй, честно говоря, уже просто неинтересно заниматься.
Так, если пару мелочей улучшить — да, без проблем.
А на что-то более серьёзное уже просто времени жалко.
Учитывая, сколько я уже грохал усилий… Как я уже и говорил, всё, что лично мне нужно было — я уже сделал.
Вот я чужой код вижу или надо что-то серьёзное сделать — и у меня уже вплоть до идиосинкразии.
Всё равно что лейтенанту сказать «А ну-ка, иди ещё раз курсантиком побудь пяток лет».
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 25 апреля 2022, 19:11
+
0
Да, и кстати, спред относится к этим мелочам, только смысла не так уж и много.
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 20:07
+
0
Кстати, с недавних пор investing.com пресекли возможность парсить новостные данные с их сайта.
Жопа…
( 
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 25 апреля 2022, 19:57
+
0
Жаль.

тогда для меня это был высший класс.

А с другой стороны, считали сайт, распассили код и вуаля. Честно, я от этого далек.
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 20:04
+
0
Просто используемый мною новостной индикатор как в ЗаеБОТе, так и в Матрёшке тоже парсит данные с investing.com
Я бы сам не знал.
Мне Дрон маякнул в прошлую пятницу…
У него в работе как Матрёшка, так и ЗаеБОТ.
Я проверил — действительно.
Даже просто голый индикатор на график кидаешь — не рисует он линии, когда будет новость.
Значит, пресекли.
Чуть позднее буду думать, что с этим делать.
Для меня это тоже обомчикус.
Штука-то нужная и важная.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 25 апреля 2022, 20:10
+
0
Матерщинник.
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 20:32
+
0
Когда-то не довел до ума новостной советник, парсящий другой новостной сайт. В планах был реверс ордеров, при закрытии по тралу. Новостные скачки уже «спрогнозированы» ценой, а вероятность самого отката приближается к 100%. Гарантированно можно отжимать 45-65% на откат бОльшим лотом. Плюс спред получше и реквот поменьше.
Забросил в связи с тем, что за булки подержаться не мог. Где протестить? И как? Я неимоверно ленив.

Могу кинуть. Там и тралы были ускоряющиеся. Само по себе интересное явление. Но там большой размер. Около 1400 строк, если склероз не подводит. Не помню, как называется, но… был такой интерес.

Ну а в Сибири тихий час. Наверно дрыхнут все.
Редактирован: 26 апреля 2022, 00:08
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 26 апреля 2022, 00:02
+
0
Ну с другими — сложный вопрос в плане адекватности.
Я уже приводил пример, как парсил данные с investfuture.ru, а там оказались пропуски новостей по полгода.

Так что тут нужно быть очень осторожным.
А инвестинг как раз тем и ценен, что с новостями у него всё адекватно, причём есть чёткое разделение по силе новостей. В общем, было удобно. Но вот недели уже эдак полторы как не пашет этот момент.
avatar

  24  ShamanHand Автор Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 26 апреля 2022, 07:21
+
0
В настоящее время термин используется редко; его основное современное значение близко к понятию ферментопатия…

Пришлось в википедию залезть. Это не матом. Тогда можно.

Я Вас ни к чему не призываю. Просто анализирую, что могу и выражаю свое «ФЭ».
ДУМАЮ, ДЛЯ ВАШЕЙ ПОЛЬЗЫ.
avatar

  6  kvashnin007 Сообщений: 521 - Андрей

  • 25 апреля 2022, 20:01

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари