MetaTrader
Atom
3/24/2010
elcust


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

Tags:


Thanks:


<< < 2 3 4 
XMbIPb

Avatar
Date: 6/19/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/19/2010
Reply


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

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

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

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

Thanks:

XMbIPb

Avatar
Date: 6/21/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/21/2010
Reply


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

Thanks:

XMbIPb

Avatar
Date: 6/21/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/21/2010
Reply


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

Thanks:

Tauler

Avatar
Date: 11/11/2010
Reply


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

вот код формы

Code
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

Avatar
Date: 11/11/2010
Reply


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

вот код формы


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

Tauler

Avatar
Date: 5/25/2011
Reply


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

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

Avatar
Date: 5/25/2011
Reply


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


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

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy