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 MT4 (for MT5 click here)

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:

{
   "MSG":"ORDER_SEND",
   "TICKET":47103114,
   "ERROR_ID":0,
   "ERROR_DESCRIPTION":"no error"
}

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:

Symbol: EURUSD  Ask: 1.022240   Bid: 1.022200

Example 2: Stream OHLC data from MT4 (using JSON library) using Go

In Progress

Example 3: Export Trade History from MT4 to a CSV file using Go

In Progress

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