Login Page - Create Account

Support Board


Date/Time: Mon, 04 May 2026 14:51:57 +0000



Trade windows off-screen when detached

View Count: 270

[2026-03-13 17:26:22]
503 - Posts: 14
The trade window when detached appears somewhere off screen. It was placed on a monitor that is no longer used. I tried connecting other monitors to bring the window back but it is still invisible. None of standard methods of moving windows (alt+space, etc.) works. I tried window->reset windows, I tried cascade, and every clue I could find.... the trade windows is still lost.

The trade window does not have proper title bar and it's not shown with alt+tab.

Is there a working method to recover the trade window when detached from DOM/chart?

Many thanks
[2026-03-13 18:23:27]
User719512 - Posts: 433
Try the ctrl+w menu. Window >> Windows and Chartbooks
[2026-03-13 19:11:21]
503 - Posts: 14
ctr+w doesn't help because the trade window is not seen as "window" when detached, more of a pop-up
[2026-03-13 21:06:02]
User719512 - Posts: 433
This can be solved with a Python script. Grok to the rescue (and can assist if you, or others) if you don't know Python.
After just a few adjustments, it generated a script to enumerate and move windows to the primary screen.

window_manager.py

Example:
window_manager.py --enumerate
Handle: 1509772, Title: ESH26_FUT_CME/ESH26_FUT_CME [CV][M] #10
window_manager.py --move-window 1509772



import argparse
import win32gui
import win32con
import win32console

def enumerate_windows(include_empty_title=False):
windows = []
def enum_callback(hwnd, results):
if win32gui.IsWindowVisible(hwnd):
title = win32gui.GetWindowText(hwnd)
class_name = win32gui.GetClassName(hwnd)
if include_empty_title or title:
results.append((hwnd, title, class_name))
win32gui.EnumWindows(enum_callback, windows)
return windows

def enumerate_child_windows(parent_hwnd):
children = []
def enum_child_callback(hwnd, results):
if win32gui.IsWindowVisible(hwnd):
title = win32gui.GetWindowText(hwnd)
class_name = win32gui.GetClassName(hwnd)
results.append((hwnd, title, class_name))
win32gui.EnumChildWindows(parent_hwnd, enum_child_callback, children)
return children

def move_window(hwnd, x=100, y=100):
if not win32gui.IsWindow(hwnd):
raise ValueError("Invalid window handle")
if not win32gui.IsWindowVisible(hwnd):
print("Warning: Window is not visible, but attempting move anyway")

style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
is_child = bool(style & win32con.WS_CHILD)

# Get current size
rect = win32gui.GetWindowRect(hwnd)
width = rect[2] - rect[0]
height = rect[3] - rect[1]

if is_child:
# For children, use relative client coords (move to near top-left of parent)
print("Detected child window; moving relative to parent at (10, 10)")
win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 10, 10, width, height, win32con.SWP_SHOWWINDOW)
else:
# For top-level, use screen coords (primary monitor)
print("Detected top-level window; moving to primary monitor at (100, 100)")
win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, x, y, width, height, win32con.SWP_SHOWWINDOW)

def main():
parser = argparse.ArgumentParser(description="Window management tool for enumerating and repositioning windows.")
parser.add_argument('--enumerate', action='store_true', help='Enumerate all open top-level windows (includes empty titles)')
parser.add_argument('--enumerate-children', type=int, help='Enumerate child windows of the given parent hwnd')
parser.add_argument('--move-window', type=int, help='Move the window with the given hwnd to visible position')

args = parser.parse_args()

if args.enumerate:
windows = enumerate_windows(include_empty_title=True)
if windows:
print("Open top-level windows:")
for hwnd, title, class_name in windows:
print(f"Handle: {hwnd}, Title: '{title}', Class: {class_name}")
else:
print("No visible windows found.")

elif args.enumerate_children:
parent_hwnd = args.enumerate_children
if not win32gui.IsWindow(parent_hwnd):
print(f"Invalid parent handle: {parent_hwnd}")
return
children = enumerate_child_windows(parent_hwnd)
if children:
print(f"Child windows of parent {parent_hwnd}:")
for hwnd, title, class_name in children:
print(f"Handle: {hwnd}, Title: '{title}', Class: {class_name}")
else:
print(f"No visible child windows found for parent {parent_hwnd}.")

elif args.move_window:
hwnd = args.move_window
console_hwnd = win32console.GetConsoleWindow()
if hwnd == console_hwnd:
print("Skipping move: This is the console window itself.")
return
try:
title = win32gui.GetWindowText(hwnd)
class_name = win32gui.GetClassName(hwnd)
print(f"Moving window (handle: {hwnd}, title: '{title}', class: {class_name})")
move_window(hwnd)
except ValueError as e:
print(f"Error: {e}")
except Exception as e:
print(f"Failed to move window: {e}")

else:
parser.print_help()

if __name__ == "__main__":
main()

[2026-03-13 21:28:24]
John - SC Support - Posts: 45920
First, select "Chart >> Reset Child Windows".

If that does not solve it then there are numerous articles in the Internet about how to bring windows that are off-screen back on-screen. Just do an Internet search for "moving windows from off screen" or something along those lines.
For the most reliable, advanced, and zero cost futures order routing, use the Teton service:
Sierra Chart Teton Futures Order Routing
[2026-03-13 21:49:16]
User719512 - Posts: 433
Ooh...did not know that one John.
One side note, first select/click the window from which the Trade Window is a child. If a different chart is selected, this won't reset the Trade Window. Otherwise, it will appear that the "reset" didn't work.
[2026-03-14 08:21:00]
Sierra_Chart Engineering - Posts: 23678
Yes that is correct.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, use the Teton service:
Sierra Chart Teton Futures Order Routing

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account