XMbIPb
|
Дата: 19.06.2010
С экспортом в эксель проблем не возникло, я просто запустил DDE- sample.xls из папки МТ, открыл подключение и МТ сразу начал отправлять данные.. Я так и не понял, что вот здесь - this.Trader.StartDde("Портфель") нужно указать вместо "Портфель"..что бы ни прописывал S# пишет, что не найдено окно с таким именем.. или ProcessUnknownDdeData и без этого должен срабатывать?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 19.06.2010
ДДЕ бывает двух направленностей. Первая - это клиент, когда данные посылаются в какую-то программу. Вторая - это сервер, когда данные получаются от клиентов. Так вот, QuikTrader.StartDde("Портфель") запускает ДДЕ клиента в Квике. И только. Вам же нужно запускать аналогичного в МТ. Через данну функцию это не получится, потому что я ее сделал только для Квика. Далее, категории ДДЕ это совсем другое. Это то, что приходит первым параметром через http://stocksharp.com/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 под РТС засертифицировался. Его использовать желание есть?
|
|
Спасибо:
|
|
|
|