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

вот код формы

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