PowerShell
Warning
Please note that all source codes provided are for testing purposes only. No guarantee or responsibility is provided for their use. Use of these examples is at your own risk.
Basic Examples
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:
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:
Have you found any bug or error? Please notify us.