MT4를 Linux에서 실행하기 [Debian9, MT4DLL]
개요
MT4를 WindowsVPS 스타일로 리눅스로 움직였습니다.
드디어 DLL의 동작 확인이라고 했습니다.
우선 코드
htps : // 기주 b. 코 m/쟈코 b327/ぃぬ xMT4
개요 · 동기 같은
별도로 특별한 일은 없습니다. Windows에서 움직일 수 있는 것이 리눅스에서 움직이지 않는 이유가 없기 때문에 움직일 수 있도록 한 비망록입니다.
다만, MT4라고 하는 2005년 릴리스의 소프트가 아직도 사용되고 있고(MT5가 상당히 릴리스되었음에도 불구하고!), 아직도 요구도 있는 것 같기 때문에, 일단 움직이는 것의 히나타타를 만들었습니다.
※서버는 메모리 2GB 이상 권장합니다. 0.6GB로 실험하면 apt install조차 할 수 없게 되었습니다.
덧붙여서 MT4 1대당 메모리 상한은 2GB입니다.
코드
mql4
5초마다
TestMessage
를 DLL에 전달하고 DLL에서 ::from DLL
를 추가하여 반환하도록 하는 프로그램입니다.TestAlert.mq4
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window
#import "MT4DllTester.dll"
string TestFunction(string);
#import
int OnInit() {
EventSetTimer(5);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {
EventKillTimer();
}
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) {
return(rates_total);
}
void OnTimer() {
Alert(TestFunction("TestMessage "));
}
DLL
MT4의 string은
WCHAR*
형으로 건네주지 않으면 잘 해석해 주지 않기 때문에 WCHAR*
로 하고 있습니다.다만, 이번 프로그램은 랜덤으로 문자 깨짐이 발생합니다. 이것은 메모리 운명의 이야기일 것입니다만, 이번은 할애합니다. 캐릭터 라인을 정확하게 건네주고 싶은 경우는 솔직하게
char
가 좋을지도 모릅니다.이 근처의 사정은 포럼
MT4DllTester.cpp
#include "pch.h"
#include "MT4DllTester.h"
#include <codecvt>
MT4_EXPFUNC const WCHAR* __stdcall TestFunction(WCHAR* input)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> cv;
std::wstring w_inp(input);
std::string s_out = cv.to_bytes(w_inp);
s_out.append("::from DLL");
std::wstring w_out = cv.from_bytes(s_out);
const WCHAR* ret = w_out.c_str();
return ret;
}
내보낼 함수를 알려줍니다.
Source.def
LIBRARY MT4DllTest
EXPORTS
TestFunction
VSC++에서 처음부터 프로젝트를 만들려면
x86
, release
모드로 전환하는 것을 잊지 마십시오.ref) htps //w w. mql5. 코m/엔/후우루m/96970
(※C++는 잘 모르기 때문에 코드 이상이라면 가르쳐 주세요(´・ω・`))
서버측
debian 9(CUI만)를 설치한 단계를 전제로 합니다.
MT4를 움직이기 위한 wine와 xfce4(데스크탑 환경·xfce는 가벼운 것 같기 때문에),
원격으로 연결하기 위해 vnc 주변을 설치합니다.
root로 실행
init.sh
#!/usr/bin/env bash
dpkg --add-architecture i386 &&\
apt install -y software-properties-common apt-transport-https &&\
wget -qO - https://dl.winehq.org/wine-builds/winehq.key|apt-key add - &&\
apt-add-repository https://dl.winehq.org/wine-builds/debian/ &&\
apt update &&\
apt install -y --install-recommends winehq-stable winbind &&\
DEBIAN_FRONTEND=noninteractive apt install -y keyboard-configuration &&\
#apt install -y task-xfce-desktop &&\
apt install -y xfce4 xfce4-goodies gnome-icon-theme &&\
apt install tightvncserver &&\
echo '[ALL DONE]
설치가 끝나면 다음 명령으로 vnc 서버가 시작됩니다.
여러가지 듣기 때문에 패스워드등을 설정합시다.
start.sh
vncserver :1 -geometry 800x600 -depth 24
멈출 때는 이쪽입니다.
stop.sh
vncserver -kill :1
클라이언트측
VNC 클라이언트로 연결합니다.
krdc라면
{ユーザ名}@{IP_OR_HOST名}:{ポート名}
입니다.예)
[email protected]:5901
(5901: VNC의 기본 포트)이런 느낌
※ 오른쪽 절반은
dstat
의 출력입니다. 메모리 1.7GB의 서버로 이 정도였습니다.확인한 것
상용 이용시 신경이 쓰이는 것
Reference
이 문제에 관하여(MT4를 Linux에서 실행하기 [Debian9, MT4DLL]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuk1_37/items/f3d98665355b707bc0e5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)