PowerShell
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.
Basic Examples for MT4 (for MT5 click here)
Example 1: Get actual EURUSD price from MT4 with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port = 77
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port)
$Stream = $Socket.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Reader = New-Object System.IO.StreamReader($Stream)
$Writer.WriteLine('{"MSG":"QUOTE","SYMBOL":"EURUSD"}')
$Writer.Flush()
$Response = $Reader.ReadLine()
Write-Host $Response
$Stream.Close()
$Socket.Close()
Result:
{
"MSG":"QUOTE",
"SYMBOL":"EURUSD",
"ASK":1.08263,
"BID":1.08261,
"FLAGS":6,
"TIME":"2022.04.13 12:01:48.0",
"VOLUME":0,
"ERROR_ID":0,
"ERROR_DESCRIPTION":"no error"
}
Example 2: Send Order to MT4 with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port = 77
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port)
$Stream = $Socket.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Reader = New-Object System.IO.StreamReader($Stream)
$Writer.WriteLine('{"MSG":"ORDER_SEND","SYMBOL":"EURUSD","VOLUME":0.02,"TYPE":"ORDER_TYPE_BUY"}')
$Writer.Flush()
$Response = $Reader.ReadLine()
Write-Host $Response
$Stream.Close()
$Socket.Close()
Result:
{
"MSG":"ORDER_SEND",
"TICKET":6543216,
"ERROR_ID":0,
"ERROR_DESCRIPTION":"no error"
}
Example 3: Stream actual EURUSD price from MT4 with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port_cmd = 77
$Port_data = 78
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket_cmd = New-Object System.Net.Sockets.TCPClient($Address,$Port_cmd)
$Socket_data = New-Object System.Net.Sockets.TCPClient($Address,$Port_data)
$Stream_cmd = $Socket_cmd.GetStream()
$Stream_data = $Socket_data.GetStream()
$Writer_cmd = New-Object System.IO.StreamWriter($Stream_cmd)
$Reader_cmd = New-Object System.IO.StreamReader($Stream_cmd)
$Writer_data = New-Object System.IO.StreamWriter($Stream_data)
$Reader_data = New-Object System.IO.StreamReader($Stream_data)
$Writer_cmd.WriteLine('{"MSG":"TRACK_PRICES","SYMBOLS":["EURUSD"]}')
$Writer_cmd.Flush()
$Response_cmd = $Reader_cmd.ReadLine()
Write-Host $Response_cmd
while ($true)
{
$Response_data = $Reader_data.ReadLine()
Write-Host $Response_data
}
$Stream_cmd.Close()
$Socket_cmd.Close()
$Stream_data.Close()
$Socket_data.Close()
Result:
{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}
{"TIME":"2022.04.13 12:20:04","SYMBOL":"EURUSD","ASK":1.08373,"BID":1.08371,"VOLUME":19596}
{"TIME":"2022.04.13 12:20:13","SYMBOL":"EURUSD","ASK":1.08373,"BID":1.08370,"VOLUME":19596}
{"TIME":"2022.04.13 12:20:14","SYMBOL":"EURUSD","ASK":1.08373,"BID":1.08371,"VOLUME":26891}
{"TIME":"2022.04.13 12:20:14","SYMBOL":"EURUSD","ASK":1.08373,"BID":1.08370,"VOLUME":26892}
{"TIME":"2022.04.13 12:20:17","SYMBOL":"EURUSD","ASK":1.08373,"BID":1.08371,"VOLUME":26893}
Advanced Examples
Example 1: Get actual EURUSD price (using JSON library) from MT4 with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port = 77
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port)
$Stream = $Socket.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Reader = New-Object System.IO.StreamReader($Stream)
$Cmd = "" | Select MSG,SYMBOL
$Cmd.MSG = "QUOTE"
$Cmd.SYMBOL = "EURUSD"
$Json = ConvertTo-Json $Cmd -Compress
$Writer.WriteLine($Json)
$Writer.Flush()
$Response = $Reader.ReadLine()
Write-Host $Response
$Stream.Close()
$Socket.Close()
Result:
{"MSG":"QUOTE","SYMBOL":"EURUSD"}
{"MSG":"QUOTE","SYMBOL":"EURUSD","ASK":1.07881,"BID":1.07880,"FLAGS":6,"TIME":"2022.04.18 09:34:36.0","VOLUME":0,"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}
Example 2: Stream OHLC data (using JSON library) from MT4 with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port_cmd = 77
$Port_data = 78
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket_cmd = New-Object System.Net.Sockets.TCPClient($Address,$Port_cmd)
$Socket_data = New-Object System.Net.Sockets.TCPClient($Address,$Port_data)
$Stream_cmd = $Socket_cmd.GetStream()
$Stream_data = $Socket_data.GetStream()
$Writer_cmd = New-Object System.IO.StreamWriter($Stream_cmd)
$Reader_cmd = New-Object System.IO.StreamReader($Stream_cmd)
$Writer_data = New-Object System.IO.StreamWriter($Stream_data)
$Reader_data = New-Object System.IO.StreamReader($Stream_data)
$Cmd = "" | Select MSG,OHLC
$cmd.MSG = "TRACK_OHLC"
$Items = "" | Select SYMBOL,TIMEFRAME,DEPTH
$Items.SYMBOL = "EURUSD"
$Items.TIMEFRAME = "PERIOD_M1"
$Items.DEPTH = 1
$Sub = @()
$Sub += $Items
$Cmd.OHLC = $Sub
$Json = ConvertTo-Json $Cmd -Compress
$Writer_cmd.WriteLine($Json)
$Writer_cmd.Flush()
$Response_cmd = $Reader_cmd.ReadLine()
Write-Host $Response_cmd
while ($true)
{
$Response_data = $Reader_data.ReadLine()
Write-Host $Response_data
}
$Stream_cmd.Close()
$Socket_cmd.Close()
$Stream_data.Close()
$Socket_data.Close()
Result:
{"MSG":"TRACK_OHLC","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}
{"SYMBOL":"EURUSD","PERIOD":"PERIOD_M1","OHLC":[{"TIME":"2022.04.18 09:48:00","OPEN":1.07913,"HIGH":1.07924,"LOW":1.07911,"CLOSE":1.07924,"TICK_VOLUME":24}]}
{"SYMBOL":"EURUSD","PERIOD":"PERIOD_M1","OHLC":[{"TIME":"2022.04.18 09:49:00","OPEN":1.07926,"HIGH":1.07927,"LOW":1.07911,"CLOSE":1.07920,"TICK_VOLUME":32}]}
{"SYMBOL":"EURUSD","PERIOD":"PERIOD_M1","OHLC":[{"TIME":"2022.04.18 09:50:00","OPEN":1.07920,"HIGH":1.07920,"LOW":1.07910,"CLOSE":1.07914,"TICK_VOLUME":26}]}
Example 3: Export Trade History from MT4 to CSV with PowerShell
$IP = [System.Net.Dns]::GetHostAddresses("127.0.0.1")
$Port = 77
$Address = [System.Net.IPAddress]::Parse($IP)
$Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port)
$Stream = $Socket.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Reader = New-Object System.IO.StreamReader($Stream)
$Cmd = "" | Select MSG,FROM_DATE,TO_DATE
$Cmd.MSG = "TRADE_HISTORY"
$Cmd.FROM_DATE = "2022/04/12 13:00:00"
$Cmd.TO_DATE = "2022/04/15 00:00:00"
$Json = ConvertTo-Json $Cmd -Compress
$Writer.WriteLine($Json)
$Writer.Flush()
$Response = $Reader.ReadLine()
$DataObj = ConvertFrom-Json $Response
$DataObj.TRADES | Export-Csv -Path "History.csv" -Delimiter "," -NoTypeInformation
Write-Host "Exported to CSV!"
$Stream.Close()
$Socket.Close()
Result:
Exported to CSV!
Have you found any bug or error? Please notify us.