MetaTrader
Atom Ответить
24.03.2010


Михаил, добрый день. Можно ли с Вашей помощью реализовать получение
котировок из MetaTrader при помощи DDE??? MetaTrader с радостью их
посылает через DDE и в Exel можно их увидеть, я бы хотел так же через
DDE видеть их в .Net

Теги:


Спасибо:




40 Ответов
< 1 2 
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.05.2010
Ответить


Я с МТ не работал. Но думаю, что так же, как и в Квике. Какой задается
в настройках - такой и приходит по ДДЕ... Вы умеете из МТ
экспортировать в Эксель?

Спасибо:

XMbIPb

Фотография
Дата: 11.05.2010
Ответить


В том то и беда, что там нет настроек...
В эксель тоже не умею..вот всё что есть в документации:

Экспорт котировок
Исходными данными, на базе которых строится вся аналитическая работа
пользователя терминала, являются данные о динамике цен финансовых
инструментов. Эту информацию поставляет брокерская компания. Ценовые
данные позволяют строить графики финансовых инструментов, исследовать
финансовые рынки, использовать различные торговые тактики и принимать
торговые решения. Котировки представляют собой файлы с записями в
формате "SYMBOL, BID, ASK, DATE" (финансовый инструмент, цена покупки,
цена продажи, дата и время) и поступают в терминал автоматически после
установки связи с сервером.

Терминал позволяет экспортировать текущие котировки в другие программы
в режиме реального времени по протоколу "DDE" (Dynamic Data Exchange).
Это -- протокол операционных систем MS Windows для динамической
передачи данных между различными приложениями. Котировки по DDE
выдаются только по приходе новых тиков (режим ADVISE), а не сразу же
по запросу (режим REQUEST) с выдачей последней известной цены. N/A
выдается при первом запросе REQUEST, а после прихода новой цены
появляются котировки.

Для активизации режима экспорта котировок из клиентского терминала по
протоколу DDE необходимо включить опцию "Разрешить DDE сервер" в
настройках терминала.

Внимание: исторические данные по протоколу DDE не транслируются.
Передача текущих котировок производится только при работающем
клиентском терминале.
Форматы DDE-запросов с их возможными результатами на примере файла
"DDE-sample.xls":

запрос BID: = MT4|BID!USDCHF результат: 1.5773
запрос ASK: = MT4|ASK!USDCHF результат: 1.5778
запрос HIGH: = MT4|HIGH!USDCHF результат: 1.5801
запрос LOW: = MT4|LOW!USDCHF результат: 1.5741
запрос TIME: = MT4|TIME!USDCHF результат: 21.05.02 9:52
запрос QUOTE: = MT4|QUOTE!USDCHF результат: 21.05.02 9:52
1.5773 1.5778 1.5776

Внимание: для правильного отображения данных в MS Excel нужно включить
опцию в меню "Сервис -- Параметры -- Переход -- Преобразование формул в
формат Excel при вводе".

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.05.2010
Ответить


Из того, что Вы привели, я понял так. Название категорий - BID ASK
HIGH LOW TIME QUOTE.... Проще всего это узнать через
ITrader.ProcessUnknownDdeData. И, опять же, судя по тому, что Вы
привели, указывать название ddeServer нужно MT.

Спасибо:

XMbIPb

Фотография
Дата: 18.06.2010
Ответить


А как узнать названия категорий через trader.ProcessUnknownDdeData,
если это событие не срабатывает?
И где нужно указывать название MT?

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.06.2010
Ответить


https://stocksharp.ru/doc/help/html/E_Ecng_Trading_Quik_QuikTrader_ProcessUnknownDdeData.htm

Первый параметр и есть название категории. Если событие не
срабатывает, значит по ДДЕ и не шлется... Вы добились экспорта в
Эксель? Потому что, по Вашему описанию решения, я понял, что проблема
явно не в обработке данных из МТ, а в самой настройке МТ.

Спасибо:

XMbIPb

Фотография
Дата: 18.06.2010
Ответить


С экспортом в эксель проблем не возникло, я просто запустил DDE-
sample.xls из папки МТ, открыл подключение и МТ сразу начал
отправлять данные..
Я так и не понял, что вот здесь - this.Trader.StartDde("Портфель")
нужно указать вместо "Портфель"..что бы ни прописывал S# пишет, что не
найдено окно с таким именем..
или ProcessUnknownDdeData и без этого должен срабатывать?

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.06.2010
Ответить


ДДЕ бывает двух направленностей. Первая - это клиент, когда данные
посылаются в какую-то программу. Вторая - это сервер, когда данные
получаются от клиентов.

Так вот, QuikTrader.StartDde("Портфель") запускает ДДЕ клиента в
Квике. И только. Вам же нужно запускать аналогичного в МТ. Через данну
функцию это не получится, потому что я ее сделал только для Квика.

Далее, категории ДДЕ это совсем другое. Это то, что приходит первым
параметром черезhttps://stocksharp.ru/doc/help/html/E_Ecng_Trading_Quik_QuikTrader_ProcessUnknownDdeData.htm

и то что идентифицирует поток ДДЕ данных. Название этих категорий у МТ
нужно узнать путем логирование названий категорий в программе. И
запускать экспорт в МТ скорее всего придется вручную.

Спасибо:

XMbIPb

Фотография
Дата: 21.06.2010
Ответить


Теперь понятно..вот только запустить экспорт в MT вручную не
получится(там есть всего одна опция для DDE - "Разрешить DDE
сервер")..мне кажется единственное решение - это подсмотреть как
Эксель запускает ДДЕ клиента в MT и претвориться им.. это реально?

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.06.2010
Ответить


Эксель не запускает ДДЕ клиента в МТ, потому что Эксель ничего не
знает о МТ... Мне все же кажется, что лучше до конца разобраться в
устройстве работы экспорта в МТ. И уже потом переходить к кодированию.

Спасибо:

XMbIPb

Фотография
Дата: 21.06.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.06.2010
Ответить


Сервер только принимает данные.

Спасибо:

Tauler

Фотография
Дата: 11.11.2010
Ответить


я качал из МТ4 через DDE используя Ndde библиотеку. Метак сам является сервером DDE, название сервера MT4

вот код формы

Код
namespace QuoteListener
{
public partial class MainForm : XtraForm
{
private readonly DdeClient client;
private readonly QuoteServiceContractClient contractClient;
object senderSyncObj = new object();

private FileStream fs;
private StreamWriter sw;
private DdeAdviseEventArgs lastAdvice;

public MainForm()
{
InitializeComponent();
client = new DdeClient("MT4", "QUOTE", this);
client.Advise += client_Advise;
client.Disconnected += client_Disconnected;
contractClient = new QuoteServiceContractClient();
}

private void client_Advise(object sender, DdeAdviseEventArgs args)
{
sendAdviceToService(args);
}

private void client_Disconnected(object sender, DdeDisconnectedEventArgs args)
{
edtAdviceText.Text =
string.Format("OnDisconnected: IsServerInitiated={0} IsDisposed={1}", args.IsServerInitiated, args.IsDisposed);
MessageBox.Show("Я сломался ! DDE отвалился.", "Караул", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

private void btnStart_Click(object sender, EventArgs e)
{
try
{
if(!client.IsConnected)
client.Connect();
client.StartAdvise(edtTiker.Text, 1, true, 60000);
btnStart.Enabled = false;
btnStop.Enabled = true;

fs = new FileStream(edtTiker.Text+".error", FileMode.Create, FileAccess.ReadWrite);
sw = new StreamWriter(fs);
}
catch (Exception ex)
{
edtAdviceText.Text = string.Format("Ошибка : {0}", ex.Message);
}
timerForKeepAlive.Start();
}


}
}
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.11.2010
Ответить


Tauler
я качал из МТ4 через DDE используя Ndde библиотеку. Метак сам является сервером DDE, название сервера MT4

вот код формы


Используй плиз на будущее специальные таги. По коду. Я так и не увидел место, где котировки получаются. И разве ДДЕ клиент может получать от сервера данные?
Спасибо:

Tauler

Фотография
Дата: 25.05.2011
Ответить


Лучше поздно, чем никогда :)

public MainForm()
{
InitializeComponent();
client = new DdeClient("MT4", "QUOTE", this); стартую DDE, указывая что мне нужны котировки
client.Advise += client_Advise; - подписка на событие получения строки данных по DDE от MetaTrader
client.Disconnected += client_Disconnected;
client.StartAdvise(валютная_пара, 1, true, 60000);
}

private void client_Advise(object sender, DdeAdviseEventArgs args)
{
Обработчик события получения строки с данными от MetaTrader
Из args.Text вытаскивается строка с данныпи
Парсится она так:
string[] strings = advice.Remove(advice.Length-1).Replace('.',',').Split(' ');
DateTime = Convert.ToDateTime(strings[0] + " " + strings[1]);
Bid = Convert.ToDouble(strings[2]);
Ask = Convert.ToDouble(strings[3]);
}
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.05.2011
Ответить


Tauler Перейти
Лучше поздно, чем никогда :)


Да уж. И снова игнор по форматированию сообщения. Уже МТ5 под РТС засертифицировался. Его использовать желание есть?
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy