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
Example 1: Get actual EURUSD price from MT5 using Go
Get actual EURUSD price from MT5.go
package main
import (
    "fmt"
    "net"
)
func main() {
    con, err :=net.Dial("tcp", "localhost:71")
    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
Send Order to MT5.go
package main
import (
    "fmt"
    "net"
)
func main() {
    con, err := net.Dial("tcp", "localhost:71")
    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
Stream actual EURUSD price from MT5.go
package main
import (
    "fmt"
    "net"
)
func main() {
    con1, err := net.Dial("tcp", "localhost:71")
    if err != nil { fmt.Println(err) }
    con2, err := net.Dial("tcp", "localhost:72")
    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
Get actual EURUSD price (using JSON library) from MT5.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:71")
    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"])
}
Example 2: Stream OHLC data from MT5 (using JSON library) using Go
Example 3: Export Trade History from MT5 to a CSV file using Go
Info
Have you found any bug or error? Please notify us.