Go
Warning
Please note that all source codes provided are for testing purposes only. No guarantee or responsibility is provided for their use. Use of these examples is at your own risk.
Note
These examples use Python 3.6.8.
Basic Examples
Example 1: Get actual EURUSD price from MT4 using Go
package main
import (
"fmt"
"net"
)
func main() {
con, err := net.Dial("tcp", "localhost:77")
if err != nil { fmt.Println(err) }
defer con.Close()
msg := "{\"MSG\":\"QUOTE\",\"SYMBOL\":\"EURUSD\"}\r\n"
_, err = con.Write([]byte(msg))
if err != nil { fmt.Println(err) }
reply := make([]byte, 1024)
_, err = con.Read(reply)
if err != nil { fmt.Println(err) }
fmt.Println(string(reply))
}
Result:
{
"MSG":"QUOTE",
"SYMBOL":"EURUSD",
"ASK":1.08293,
"BID":1.08291,
"FLAGS":6,
"TIME":"2022.04.13 08:33:48.0",
"VOLUME":0,
"ERROR_ID":0,
"ERROR_DESCRIPTION":"no error"
}
Example 2: Send Order to MT4 using Go
package main
import (
"fmt"
"net"
)
func main() {
con, err := net.Dial("tcp", "localhost:77")
if err != nil { fmt.Println(err) }
defer con.Close()
msg := "{\"MSG\":\"ORDER_SEND\",\"SYMBOL\":\"EURUSD\",\"TYPE\":\"ORDER_TYPE_BUY\",\"VOLUME\":0.02}\r\n"
_, err = con.Write([]byte(msg))
if err != nil { fmt.Println(err) }
reply := make([]byte, 1024)
_, err = con.Read(reply)
if err != nil { fmt.Println(err) }
fmt.Println(string(reply))
}
Result:
Example 3: Stream actual EURUSD price from MT4 using Go
package main
import (
"fmt"
"net"
)
func main() {
con1, err := net.Dial("tcp", "localhost:77")
if err != nil { fmt.Println(err) }
con2, err := net.Dial("tcp", "localhost:78")
if err != nil { fmt.Println(err) }
defer con1.Close()
defer con2.Close()
msg := "{\"MSG\":\"TRACK_PRICES\",\"SYMBOLS\":[\"EURUSD\"]}\r\n"
_, err = con1.Write([]byte(msg))
if err != nil { fmt.Println(err) }
reply := make([]byte, 1024)
_, err = con1.Read(reply)
if err != nil { fmt.Println(err) }
fmt.Println(string(reply))
for{
_, err = con2.Read(reply)
if err != nil { fmt.Println(err) }
fmt.Println(string(reply))
}
}
Result:
{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}
{"TIME":"2022.04.13 09:08:02","SYMBOL":"EURUSD","ASK":1.08386,"BID":1.08384,"VOLUME":18404}
{"TIME":"2022.04.13 09:08:03","SYMBOL":"EURUSD","ASK":1.08386,"BID":1.08385,"VOLUME":18405}
{"TIME":"2022.04.13 09:08:03","SYMBOL":"EURUSD","ASK":1.08386,"BID":1.08384,"VOLUME":18407}
{"TIME":"2022.04.13 09:08:04","SYMBOL":"EURUSD","ASK":1.08383,"BID":1.08380,"VOLUME":18408}
{"TIME":"2022.04.13 09:08:05","SYMBOL":"EURUSD","ASK":1.08384,"BID":1.08382,"VOLUME":18408}
{"TIME":"2022.04.13 09:08:05","SYMBOL":"EURUSD","ASK":1.08385,"BID":1.08382,"VOLUME":18410}
{"TIME":"2022.04.13 09:08:06","SYMBOL":"EURUSD","ASK":1.08383,"BID":1.08381,"VOLUME":18411}
{"TIME":"2022.04.13 09:08:06","SYMBOL":"EURUSD","ASK":1.08384,"BID":1.08381,"VOLUME":18411}
{"TIME":"2022.04.13 09:08:07","SYMBOL":"EURUSD","ASK":1.08383,"BID":1.08381,"VOLUME":18412}
...
Advanced Examples
Example 1: Get actual EURUSD price from MT4 (using JSON library) using Go
package main
import (
"encoding/json"
"fmt"
"net"
)
type quoteCommand struct {
MSG string
SYMBOL string
}
func main() {
cmd := quoteCommand{
MSG: "QUOTE",
SYMBOL: "EURUSD",
}
jsonData, err := json.Marshal(cmd)
con, err := net.Dial("tcp", "localhost:77")
if err != nil { fmt.Println(err) }
msg := string(jsonData) + "\r\n"
_, err = con.Write([]byte(msg))
if err != nil { fmt.Println(err) }
reply := make([]byte, 1024)
msgLen, err := con.Read(reply)
if err != nil { fmt.Println(err) }
con.Close()
bytes := []byte(string(reply[0:msgLen]))
var result map[string]interface{}
json.Unmarshal(bytes, &result)
fmt.Printf("Symbol: %s Ask: %f Bid: %f\n", result["SYMBOL"],result["ASK"],result["BID"])
}
Result:
Example 2: Stream OHLC data from MT4 (using JSON library) using Go
Example 3: Export Trade History from MT4 to a CSV file using Go
Have you found any bug or error? Please notify us.