Передача данных от одного клиента MT4 к другому - Page 2
Страница 2 из 815 FirstFirst 1234 ... ПоследняяПоследняя
Results 11 to 20 of 41

Thread: Передача данных от одного клиента MT4 к другому

  1. #11
    Спасибо за пост, Ройс. Мне пришло в голову, что вы можете просто держать петлю вечно и спать в любом количестве способов. Кенц: Конечно, вы можете сделать это в C #, но я не уверен, почему вы этого хотите, если только вы не хотите изменить или дополнить его, и если вы захотите это сделать, то для вас будет очевидно, что нужно. Я не кодировал в C в течение ряда лет и по нескольким причинам, в основном потому, что в Delphi можно делать все, что можно сделать в C (все драйверы виртуальных устройств). Delphi предоставляет гораздо более богатый набор компонентовобъектов. Он гораздо менее подвержен ошибкам, так как он гораздо более читабелен, а компилятор позволяет вам писать встроенный код сборки, если вам нужно получить максимальную скорость от рутины. Если ваш ад решил преобразить его, то: Все функции Windows взяты из user32.dll. Вы должны будете создать свой собственный класс TStringList, который является просто объектом связанного списка, который хранит строки (насколько я знаю, C до сих пор не предоставляет такой основной но очень полезные классы в стандартной комплектации) или вы можете просто реализовать собственную обработку строк с помощью динамического массива.

  2. #12

    Quote Originally Posted by ;
    Вы не сможете создать пространство общей памяти непосредственно внутри DLL. Есть несколько способов заставить DLL общаться друг с другом. На самом деле это зависит от того, хотите ли вы использовать двухсторонние комиксы или нет, и как часто им нужно общаться. Простейшие методы включают в себя: 1) Открыть сокеты внутри DLL для общения через TCP или другой протокол. (вероятно, самый простой и работает, если приложения MT4 находятся на разных машинах в локальной сети или через inet) 2) Пусть один MT4 использует DLL, которая создает «вспомогательное» окно (видимое или невидимое), а затем реализует сообщения WM_COPYDATA с помощью SendMessage либо непосредственно из MT4, либо из другой DLL. Если это не для вас, вы можете использовать дисковые файлы для передачи данных, если вы не передаете слишком часто, вам просто нужно использовать вспомогательные файлы в качестве механизма семафоров. Опять же, это действительно зависит от того, как вы пытаетесь общаться, но это должно работать внутри советника (а не внутри). (Однако вам придется использовать файловые функции Windows API, потому что, насколько я знаю, MT4 не будет писать или читать вне своей собственной структуры каталогов) «Datafile.txt» содержит ваши данные «app1lock.txt» ... файл-пустышка блокировки » app2lock.txt '... фиктивный файл блокировки перед запуском любого из приложений MT4, убедитесь, что файлов нет. App1 ... если app2lock.txt не существует {создать файл app1lock.txt//на этом этапе возможно, что оба приложения заблокированы почти одновременно подожди и проверь снова сон (1000);/подождать секунду, если app2lock.txt не существует {создатьизменитьпрочитать 'datafile.txt'}, иначе флаг, который нам нужно будет повторить в следующий раз через файл удаления ”app1lock.txt”} App2 ... если app1lock.txt делает не существует {создать файл app2lock.txt Sleep (1500), если app1lock.txt не существует {создатьизменитьпрочитать 'datafile.txt'}, иначе флаг для следующего запуска через файл удаления ”app2lock.txt”}
    Знаете ли вы, если с более новыми версиями MT4 теперь они могут читатьзаписывать TXT-файлы вне своего собственного каталога? Я хотел бы сделать что-то вроде того, о чем вы говорите. Спасибо. РЕДАКТИРОВАТЬ: я создал небольшой циклический пакетный файл DOS, который будет копировать файл из одного каталога в другой, но какой правильный код mq4 мне нужен для создания файла и чтения файла при выполнении определенных условий? Спасибо Вот командный файл, если интересно; : loop xcopy c: \ temp \ test.csv c: \ temp2 del c: \ temp \ test.csv goto: loop

  3. #13
    Я знаю, что сказал, что больше не буду публиковать сообщения, но я абсолютно привязан. В эти выходные я потратил почти 20 часов на изучение этой проблемы и начинаю чувствовать себя беспомощным. Мои проблемы: У меня нет Visual C или VB. У меня есть Dev C , но я не знаю, как использовать MingW для создания DLL. </P> Я прилагаю свою попытку к DLL для связи между терминалами MT4 , Идея состоит в том, чтобы использовать переменные среды Win32, семафор и аргументы прохожих. Переменная COMMAND_SENT является семафором, а OPERATION используется для обмена информацией. Пожалуйста .... Я просто не могу тратить все эти часы на библиотеки DLL ..../copy.cpp #include lt; windows.hgt; #include lt; stringgt; #include lt; cstdlibgt; extern C {//////////////////////////////////////////////////////////брокер A вызывает это, чтобы сигнализировать о новой задаче (после того, как он находит ее ложной, wcheckCommand () .... следовательно, семафор.) void WINAPI CommandSent (void) {int success = 0 ; while (! success) success = putenv (COMMAND_SENT = 1); }///////////////////////////////////////////////////////////брокер B вызывает это после того, как завершает свою деятельность (устанавливает значение false, сообщая брокеру A, что предыдущая операция выполнена) void WINAPI CommandExecuted (void) {int success = 0; while (! success) success = putenv (COMMAND_SENT = 0); }///////////////////////////////////////////////////////////broker A вызывает это для проверки новых задач/broker B вызывает это для проверки завершения предыдущей строки активности WINAPI CheckCommand (void) {return getenv (COMMAND_SENT); }///////////////////////////////////////////////////////////формат открытого ордера: B_001_45_115/формат закрытого ордера: C_001_______ void WINAPI SetOperation (строка op, запрос строки, остановка строки, строка tp) {int success = 0; строка s = ОПЕРАЦИЯ = op _ тикет _ стоп _ tp; char * x = новый символ [21]; strcpy (x, s.c_str ()); while (! success) putenv (x); удалить [] x; }/////////////////////////////////////////////////////////string WINAPI CheckOperation (void) {return getenv (OPERATION); }/////////////////////////////////////////////////////////} Пожалуйста, оставьте предложения или напишите мне, если вы можете помочь! Спасибо!

  4. #14
    Сегодня вечером я обнаружил, что в kernal32.dll есть некоторые переменные среды getter и встроенные сеттеры. Таким образом (теоретически) я могу импортировать kernal32.dll в мой код MQ4, а затем вызвать эти функции. Меня беспокоит возвращение указателя на массив символов вместо стандартного строкового типа MQ4. Вот ссылка, которую я читал:
    http://babek.info/libertybasicfiles/.../nl126/api.htmЧто, вы парни, думаете? У кого-нибудь есть опыт с этим?

  5. #15
    Tdion: Мне любопытно, почему ты не используешь чат, предоставленный rangebound в посте № 7 ... ??? Спасибо, Кен (ps: RB: я хотел этого в C #, потому что я работаю в NinjaTrader).

  6. #16
    Tdion: Как предполагает Кенз, почему бы не использовать поставляемую DLL? Я поставил исходный код и скомпилированную DLL в качестве бесплатного программного обеспечения .... вы можете использовать его для любых целей, даже если он окажется в продаваемой системе ... Я не собираюсь судиться с вашей задницей! или требовать права собственности. Что касается вашего кода DLL, я не уверен, что именно ваша проблема? Можете ли вы скомпилировать в Callable DLL? Кодлогика не работает как желание? На первый взгляд я вижу недостаток в твоем эге. Я сомневаюсь, что функции Windows для получения и установки переменных среды являются реентерабельными (очень мало функций Winapi), поэтому возникает та же проблема, что и в примере с текстовым файлом, а именно - поскольку у вас есть два независимых процесса, проверяющих и модифицирующих один и тот же loion, он полностью возможно, что один процесс будет частично проходить проверкунастройку var, когда другое приложение проверяетустанавливает его. Без использования установленных семафорных механизмов многозадачности ОС это может произойти. КЕНЦ: ОК. Я не использовал трейдера ниндзя, хотя он был в моем списке задач. (Это фьючерс на ставку на Futures, с которой я собираюсь открыть счет). Единственная информация, которую я знаю о NT, - это то, что она использует синтаксис Си в своем языке. Я предполагаю, что будут некоторые синтаксические различия с истинным C где-то вдоль линии, хотя. Вы должны иметь возможность портировать код delphi, если вызов DLL не является проблемой. Вам следует обойтись одним из следующих включений: (хотя вам может потребоваться использовать sendmessageA, а не sendmessage и т. Д.) Winuser.h windows.h, вам все равно придется «заново изобретать» класс Tstringlist, но того же можно достичь, используя массив строк статического размера (достаточно большой), а затем просто перемешать строки в массиве внутри функции getmsg. Пока импортвызовы DLL доступны в NT, вы все равно можете использовать поставляемую Delphi DLL. Я полагаю, ваша самая большая (возможная) проблема - получить дескриптор окна в NinjaT? Если это ваша единственная проблема, то вы можете проверитьпопробовать Delphi DLL, если у вас есть C # или visual studio, тогда вы можете получить дескриптор любого окна в NinjaT, используя Spy или его аналог «studio .net». Если у вас есть дескриптор, вы можете жестко закодировать вызов, чтобы инициализировать dll-сообщение, просто чтобы посмотреть, будет ли оно работать так, как требуется. Если все работает нормально, вы можете использовать несколько вызовов Winapi для автоматизации получения дескриптора окна ниндзя. Можете ли вы опубликовать некоторые фрагменты кода Ninja, предпочтительно те, которые включают вызовы импорта DLL

  7. #17
    1 Приложение (я) RB: пример кода на C # для NT. Этот неприятный код в нижней части генерируется NT, но вы можете видеть, что он немного отличается от C . У меня нет указателя, который вызывает dll, но я думаю, что-то вроде этого необходимо: [DllImport (user32.dll, EntryPoint = GetDesktopWindow)] public static extern IntPtr GetDesktopWindow (); У меня не было времени, чтобы проверить это - я хочу позвонить в DLL, которая будет делать SendKeys. Также, возможно, позже будет один, который будет выполнять DDE в обоих направлениях. Просто нужно время, чтобы проверить. Если вы планируете узнать это, есть много информации на сайте Microsoft MSDN. Кен.
    https://www.forex-russian.com/attach...1882749462.txt

  8. #18
    ХОРОШО. Бегло взглянул на некоторые форумы по Ninja и т. Д. Похоже, они внедрили .NET Framework в латентной версии, так что вы должны быть в порядке с DLL, однако их служба поддержки не будет выдавать примеры вызовов DLL (странно!). Можете ли вы уточнить, что именно вы хотите сделать 1) Вызвать библиотеку «Sendkeys» из какого приложения? - нажимать клавиши в каком приложении? 2) вы хотите DDE, между которыми два приложения?

  9. #19
    РБ: Спасибо за просмотр. NT находится на .NET версии 2. У меня есть код на VB, чтобы делать разные вещи, которые я хочу, но C # - это новое чудовище для меня - я не могу получить правильный синтаксис для вызова dll - во время компиляции он сообщает мне неверный формат на вызов user32. Это несколько низкий приоритет, так как у меня есть другие проекты. С такими вещами поддержка NT не так уж хороша - их стандартный ответ не поддерживается. Первое, что я хотел бы сделать, - это просто позвонить в PlaySound. Это даст мне синтаксис и место для начала. После этого я могу сделать код. Кен.

  10. #20
    Я получил простой MsgBox для отображения всплывающего сообщения. Любая более подходящая вещь выдает ошибку. Попытка чтенияобновления защищенной памяти. Пока достаточно, это занимает слишком много времени.

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.