Создаем мультивалютный советник

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Создаем мультивалютный советник

Сообщение Torin » 16 июн 2017, 07:09

На освоение С++ могут году уйти, а поставленная задача не очевидна, что хоть как-то повлияет на прибыльность. Поэтому я бы даже не рассматривал её как перспективную. Понятно, что трейдеру хочется всё перепробовать, но пока не разберешься в природе цен, то о прибылях мечтать остается.
Аватар пользователя
Torin
 
Сообщений: 792
Зарегистрирован: 21 янв 2016, 11:26
Средств на руках: 394.64 Доллар
Награды: 1
Ветеран I (1)
Группа: Базовая
Благодарил (а): 156 раз.
Поблагодарили: 162 раз.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 16 июн 2017, 16:09

Torin писал(а):На освоение С++ могут году уйти, а поставленная задача не очевидна, что хоть как-то повлияет на прибыльность. Поэтому я бы даже не рассматривал её как перспективную. Понятно, что трейдеру хочется всё перепробовать, но пока не разберешься в природе цен, то о прибылях мечтать остается.

Цель проста найти 12 причин для совершения покупок и 12 причин для совершения продаж на рынке и получить данные в режиме М1.
Например одна из причин это изменение индекса доллара и индекса евро. С помощью Kalkin я написал коды для советника и теперь в режиме М1 выводятся данные на экран валютных пар. С другими причинами посложнее .
Например нельзя найти стакан цен по валютам с отложенными ордерами и лотами. Для этого и пытаюсь написать библиотеку чтобы попробовать импортировать данные с других интернет ресурсов. При реализации 12 причин для торговли в один советник шанс на успешную торговлю может повысится. Из своей практики скажу что изучение MQL этого языка программирования не является сложным, но экономит время и деньги. Когда не нужно заказывать советников за деньги.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 16 июн 2017, 18:44

Народ а что это за функция которая может получать данные с сайтов ?
Используйте функцию WebRequest(), которая отправляет HTTP-запрос на указанный сервер.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 17 июн 2017, 07:39

Код для скрипта я получил для функции WebRequest() теперь помогите разобраться как получать данные.
Код: выделить все
#property copyright "Copyright © 2016, Mr.SilverKZ"
#property link      "silverkaz@mail.ru"

//--------------------------------------------------------------------

input string Login    = "";   // Login my account Myfxbook
input string Password = "";   // Password my account Myfxbook

//--------------------------------------------------------------------

int    PrevTime;
string session;

//--------------------------------------------------------------------
int init()
{
//---   
   Comment("");
//---     
   return(0);
//---   
}
//--------------------------------------------------------------------
int deinit()
{
//--- 
   Comment("");
   //--- Logout
   string logout = Request("https://www.myfxbook.com/api/logout.xml?session="+session);
//---     
   return(0);
//---
}
//--------------------------------------------------------------------
int start()

//---
   if (Login == "" || Password == "")
   {
      Comment("Введите логин и пароль для входа в аккаунт www.myfxbook.com!");
      return(0);
   }
     
   //--- New bar 
   if (Time[0] <= PrevTime) return(0);
   PrevTime = Time[0];
   
   //--- Login to your account, creates a new session
   session = Request("https://www.myfxbook.com/api/login.xml?email="+Login+"&password="+Password, "session");
   if (session == "")
   {
      Comment("Ошибка входа в аккаунт www.myfxbook.com!");
      return(0);
   }
   
   //--- Get my accounts
   string my_account_name = Request("https://www.myfxbook.com/api/get-my-accounts.xml?session="+session, "name");

   //--- Get watched accounts   
   string get_watched_account = Request("https://www.myfxbook.com/api/get-watched-accounts.xml?session="+session, "name");

   //---
   Comment("Ответ сервера \n",
           "session_id: ", session, "\n",
           "my account name: ", my_account_name, "\n",
           "watched account name: ", get_watched_account);
//---   

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


//--------------------------------------------------------------------
//  Request
//--------------------------------------------------------------------
string Request(string url, string key = "")
{
//---
   char   post[], result[];
   string cookie = NULL, headers;
   string str = "";
   string error_result[];
   int    timeout = 5000;
   string response = "";
   
   ResetLastError();

   if(WebRequest("GET", url, cookie, NULL, timeout, post, 0, result, headers) == -1)
   {
      Print("Ошибка в WebRequest. Код ошибки  = ",GetLastError());
      MessageBox("Необходимо добавить адрес 'https://www.myfxbook.com/' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
      return(response);
   }
   
   str = CharArrayToString(result);
   
   if (StringLen(str) == 0) return(response);
   
   //--- Parser
   
   if (key != "")
   {
      int start_pos, end_pos;
      start_pos = StringFind(str, "<"+key+">");
      if (start_pos == -1) return(response);
      start_pos = start_pos + StringLen("<"+key+">");
      end_pos   = StringFind(str, "</"+key+">");
      response  = StringSubstr(str, start_pos, end_pos - start_pos);
   }
   //---
   return(response);
//---   
}
//--------------------------------------------------------------------


Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Создаем мультивалютный советник

Сообщение Рэндом » 17 июн 2017, 08:30

Я этого не знаю. Но подозреваю нужна библиотека для работы с HTML.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 17 июн 2017, 09:59

Рэндом писал(а):Я этого не знаю. Но подозреваю нужна библиотека для работы с HTML.

Библиотека не нужна дается команда сервер сайта возвращает значение в переменную. Просто нужно разобраться как это работает. Страница команд http://www.myfxbook.com/api. Получение ответов через команды XML.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Создаем мультивалютный советник

Сообщение Рэндом » 17 июн 2017, 10:08

В MQL нет штатных средств для этого. К тому же есть готовые библиотеки для работы с XML.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 17 июн 2017, 10:26

Рэндом писал(а):В MQL нет штатных средств для этого. К тому же есть готовые библиотеки для работы с XML.

Скрипт с кодом написанный выше рабочий он посылает запросы и получает ответы. Они выводятся через команду
Код: выделить все
Print("Ответ сервера \n",
           "session_id: ", session, "\n",
           "my account name: ", my_account_name, "\n",
           "watched account name: ", get_watched_account);

Просто я не разобрался как это работает полностью.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Создаем мультивалютный советник

Сообщение Рэндом » 17 июн 2017, 12:41

Не знал что такие функции добавили. Теперь надо парсить XML и разбираться что там к чему.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Создаем мультивалютный советник

Сообщение ВЯЧЕСЛАВПЕТРОВ » 17 июн 2017, 15:00

Немного разобрался с этим чтобы получить ответ нужно забить запрос по инструменту и название строки в функцию.
Пример Названия строк и инструментов на сайте.
Пример http://www.myfxbook.com/api. XML
Код: выделить все
Get Community outlook

Parameter   Description
session   Session id
*Currency values are represented in USD ($).

Request:
http://www.myfxbook.com/api/get-community-outlook.xml?session=DSL07vu14QxHWErTIAFrH40

Response (example only):
<response error="false" message="">
    <community-outlook>
        <symbols>
            <symbol>
                <name>EURUSD</name>
                <shortPercentage>55</shortPercentage>
                <longPercentage>44</longPercentage>
                <shortVolume>1142.58</shortVolume>
                <longVolume>905.47</longVolume>
                <longPositions>2932</longPositions>
                <shortPositions>3888</shortPositions>
                <totalPositions>2048</totalPositions>
                <avgShortPrice>1.3808</avgShortPrice>
                <avgLongPrice>1.4097</avgLongPrice>
            </symbol>
        </symbols>

        <general>
            <demoAccountsPercentage>43</demoAccountsPercentage>
            <realAccountsPercentage>56</realAccountsPercentage>
            <profitablePercentage>54</profitablePercentage>
            <nonProfitablePercentage>45</nonProfitablePercentage>
            <fundsWon>6,819,251.63</fundsWon>
            <fundsLost>-8,740,646.15</fundsLost>
            <averageDeposit>21,740.16</averageDeposit>
            <averageAccountProfit>4,127.88</averageAccountProfit>
            <averageAccountLoss>-5,290.95</averageAccountLoss>
            <totalFunds>35,914,737.56</totalFunds>
        </general>
    </community-outlook>
</response>



Код: выделить все
 string getcommunityoutlookre = Request("https://www.myfxbook.com/api/get-community-outlook.xml?session="+session, "realAccountsPercentage");
string get_watched_account = Request("https://www.myfxbook.com/api/get-community-outlook.xml?session="+session, "totalFunds");
 

В ответ получим с сервера количество реальных счетов в процентах и Total Funds :количество средств.
На сайте это выглядит так.

17.06.17.png
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения