Go
WARNING: All these source codes are only examples used for testing. We don’t provide any guarantee or responsibility about it. Use these examples at your own risk.
Examples using Go version 1.13.8
Basic Examples for MT5 (for MT4 click here)
Example 1: Get actual EURUSD price from MT5 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))
}
Reply:
{"MSG":"QUOTE","SYMBOL":"EURUSD","ASK":0.99832,"BID":0.99828,"FLAGS":2,"TIME":"2022.09.19 14:56:33.108","VOLUME":0,"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}
Example 2: Send Order to MT5 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))
}
Reply:
{"MSG":"ORDER_SEND","RETCODE":10009,"DEAL":2015119247,"ORDER":2020570871,"VOLUME":0.10,"PRICE":1.064860,"BID":1.064830,"ASK":1.064860,"REQUEST_ID":3136973155,"RETCODE_EXTERNAL":0,"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}
Example 3: Stream actual EURUSD price from MT5 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{
reply = make([]byte, 1024)
_, err = con2.Read(reply)
if err != nil { fmt.Println(err) }
fmt.Println(string(reply))
}
}
Reply:
{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}
{"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 MT5 (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"])
}
Reply:
Symbol: EURUSD Ask: 1.022240 Bid: 1.022200
Example 2: Stream OHLC data from MT5 (using JSON library) using Go
In Progress
Example 3: Export Trade History from MT5 to a CSV file using Go
In Progress
Have you found any bug or error? Please notify us.