XMbIPb
|
Date: 6/19/2010
С экспортом в эксель проблем не возникло, я просто запустил DDE-
sample.xls из папки МТ, открыл подключение и МТ сразу начал
отправлять данные..
Я так и не понял, что вот здесь - this.Trader.StartDde("Портфель")
нужно указать вместо "Портфель"..что бы ни прописывал S# пишет, что не
найдено окно с таким именем..
или ProcessUnknownDdeData и без этого должен срабатывать?
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/19/2010
ДДЕ бывает двух направленностей. Первая - это клиент, когда данные
посылаются в какую-то программу. Вторая - это сервер, когда данные
получаются от клиентов.
Так вот, QuikTrader.StartDde("Портфель") запускает ДДЕ клиента в
Квике. И только. Вам же нужно запускать аналогичного в МТ. Через данну
функцию это не получится, потому что я ее сделал только для Квика.
Далее, категории ДДЕ это совсем другое. Это то, что приходит первым
параметром черезhttp://stocksharp.com/doc/help/html/E_Ecng_Trading_Quik_QuikTrader_ProcessUnknownDdeData.htm
и то что идентифицирует поток ДДЕ данных. Название этих категорий у МТ
нужно узнать путем логирование названий категорий в программе. И
запускать экспорт в МТ скорее всего придется вручную.
|
|
|
|
Thanks:
|
|
|
|
|
|
XMbIPb
|
Date: 6/21/2010
Теперь понятно..вот только запустить экспорт в MT вручную не
получится(там есть всего одна опция для DDE - "Разрешить DDE
сервер")..мне кажется единственное решение - это подсмотреть как
Эксель запускает ДДЕ клиента в MT и претвориться им.. это реально?
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/21/2010
Эксель не запускает ДДЕ клиента в МТ, потому что Эксель ничего не
знает о МТ... Мне все же кажется, что лучше до конца разобраться в
устройстве работы экспорта в МТ. И уже потом переходить к кодированию.
|
|
|
|
Thanks:
|
|
|
|
|
|
XMbIPb
|
Date: 6/21/2010
DDE сервер MT4 функционирует только в одном режиме(по готовности
данных) и отправляет данные клиенту, как только они готовы, не ожидая
запросов и подтверждений. Поэтому наша задача состоит в том, чтобы
уведомить MT4, что у него есть клиент, сообщить какие данные требуются
и ждать, пока данные поступят.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/21/2010
Сервер только принимает данные.
|
|
|
|
Thanks:
|
|
|
|
|
|
Tauler
|
Date: 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();
}
}
}
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 11/11/2010
Tauler:
я качал из МТ4 через DDE используя Ndde библиотеку. Метак сам является сервером DDE, название сервера MT4
вот код формы
Используй плиз на будущее специальные таги. По коду. Я так и не увидел место, где котировки получаются. И разве ДДЕ клиент может получать от сервера данные?
|
|
|
|
Thanks:
|
|
|
|
|
|
Tauler
|
Date: 5/25/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]);
}
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 5/25/2011
Tauler:
Лучше поздно, чем никогда :)
Да уж. И снова игнор по форматированию сообщения. Уже МТ5 под РТС засертифицировался. Его использовать желание есть?
|
|
|
|
Thanks:
|
|
|
|
|