Skip to content

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"])
}
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


Info

Have you found any bug or error? Please notify us.