Новый API MetaTrader 4 ДОСТУПЕН - страница 6

 
yewnix:

Я что-то не понимаю...

Я могу делать отправку ордеров целый день...

Но у меня большие проблемы с выполнением OrderClose...


Не могли бы вы привести пример на эту тему.


Я действительно не думаю, что это моя DLL обертка .NET.

Привет, yewnix!


Вы можете взглянуть на <Program Files>\TradeZone\TZMT4API\Developer\Short_Sample_MQL4.zip


Этот простой код mql, закрывает все открытые ордера, как только вы включите <orderproxy.mqh>.


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

С наилучшими пожеланиями.

 
TradeZone:

Здравствуйте, yewnix!


Вы можете взглянуть на C:\Arquivos de programas\TradeZone\TZMT4API\Developer\Short_Sample_MQL4.zip


Этот простой код mql, закрывает все открытые ордера, как только вы включите <orderproxy.mqh>.


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

С наилучшими пожеланиями.

Я пытаюсь сделать это на C#.

Я взял ваши функции и написал dll обертку для .NET

т.е:


double askprice = MT4ApiNet.MarketInfo_MT4(h, "GBPUSD", (int)MT4ApiNet.MarketInfoType.MODE_ASK)

MT4ApiNet.OrderSend_MT4(h, "GBPUSD", (int)MT4ApiNet.OrderType.OP_BUY, 1, askprice, 3, (askprice - 0.0050), (askprice + 0.0050), "My Program", 100, 0);


Это работает идеально. Этот ордер отлично отображается.

Теперь... Если я получу ордер# из MetaTrader (используя 1234 в качестве ордера# для примера)


MT4ApiNet.OrderClose_MT4(h, 1234, 1, MT4ApiNet.OrderClosePrice_MT4(h,1234), 20);


Это не отменяет ордер...

Даже если я пройдусь по ордерам и сделаю MT4ApiNet.OrderGet_MT4, это все равно не сработает.

 

К ВАШЕМУ СВЕДЕНИЮ.

После выполнения OrderClose, если я получаю последнюю ошибку...

MessageBox.Show(MT4ApiNet.ErrorDescription_MT4(MT4ApiNet.GetLastError_MT4(h)));


Это возвращает общую ошибку



Можете ли вы хотя бы просто показать правильный OrderClose в delphi?

Даже в delphi мой код зависает

 
TradeZone:

Привет, Джусо,


<Program Files>\TradeZone\TZMT4API\Developer\MetaTrader4 API.txt содержит то, что вы хотите.


С наилучшими пожеланиями.

Здравствуйте, TradeZone


Спасибо за быстрый ответ. Последний раз я активно занимался разработкой на c++ 8 лет назад и к тому времени нужно было иметь *.h и *.lib dll, чтобы иметь возможность использовать api естественным образом. Если у вас есть *.h файл, но нет *.lib, вы все еще можете сделать это, разрешая адрес функции динамически, хотя процесс более утомительный. Итак, я могу сам создать файл *.h, хотя *.lib все еще отсутствует. Возможно, существует простой способ создания lib из самой dll, о котором я не знаю.


Берегите себя

Juso

 

TradeZone,


Не могли бы вы выложить рабочий пример команды OrderClose_MT4, отправляемой из приложения Delphi.

Как было сказано ранее, я не могу заставить это работать.


Спасибо!

 
кочка... кочка...
 

Поскольку я не получил ответа на этот вопрос, я начал копаться в том, как на самом деле работает ваша DLL.

Довольно хорошая идея.

Загрузите 10 графиков, каждый из которых прикреплен к разным советникам.

Эти советники запускаются и создают файлы в директории experts/files.

DLL считывает эти файлы обратно, чтобы отобразить данные в вашем запрограммированном приложении.

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


Если я не ошибаюсь, ваш Handle, возвращаемый командой Login_MT4, является просто индексом к случайно сгенерированному имени каталога. Таким образом, вы знаете, каким процессом terminal.exe управлять и куда поместить сгенерированные файлы.


Я могу ошибаться во всем этом, я просто хочу исправить проблему с OrderClose, с которой я столкнулся...


Однако вместо того, чтобы создавать файлы снова и снова... Я бы настоятельно рекомендовал использовать Memory Mapping(Create / Open Memory Map based on Pair Name_Handle).

Кстати, хорошая работа... только не могли бы вы рассказать мне о OrderClose, чтобы мне не пришлось кодировать свои собственные советники и интерфейс Memory Map DLL.


Вот и все, ребята, мой анализ этого API.


Будьте здоровы!

 

Ребята,

У меня есть подобная интеграция, хорошо работающая и протестированная (не этот код). Она сделана через эксперта, и раскрывает функциональность через C++/ Managed C++ в модуль .NET. Она позволяет плавно управлять сделками, сообщает об ошибках, предоставляет котировки в реальном времени и т.д. Связь осуществляется через TCP, поэтому она быстрая и надежная.

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

Если вы заинтересованы, поднимите руки, и я расскажу вам больше деталей :).

Запуск платформы планируется через несколько дней (примерно 15.10).

 

Peer2k,


Отлично, да, я думал об использовании TCP вместо Memory Mapping.

Если вы хотите прислать ссылку на код, я бы не отказался посмотреть на него.

Впрочем, это зависит от вас :)


Будь здоров!

yewnix@gmail.com

 
эй, peer2k, это было бы очень круто, пожалуйста, напишите мне с подробностями, yuryrub@gmail.com.