Custom NinjaTrader 8 Developer – Global Drawing Coordinate Translation Tool (C# / WPF)
Only freelancers located in the U.S. may apply.U.S. located freelancers only
Project Overview: I am a retail trader looking for an experienced NinjaTrader 8 (NinjaScript/C#) developer to build a custom chart tool to streamline my daily chart preparation. Currently, I manually manage roughly 100 multi-part support and resistance zones on a 5-minute ES chart. Each zone is made up of a combination of separate user-drawn objects: a filled Rectangle, an internal Text block, an external Text block (e.g., "SELLERS 1st Test"), and directional Arrows. Because NinjaTrader 8 does not support multi-object selection and dragging, maintaining these daily and adjusting them for quarterly contract rollovers is a manual bottleneck. I need a programmatic tool (a collapsible WPF sidebar panel) that interacts locally with the active chart's ChartControl.DrawObjects collection to mathematically translate their X (Time) and Y (Price) anchors simultaneously. This ensures the macro only modifies objects drawn on the main chart where the sidebar is active, and will not interfere with other separate charts in the workspace. This is a math-based translation project, not an object-classification database. Key Technical & Architectural Requirements: 1. Daily X-Axis Time Shift Matrix Trigger: A large button labeled [ SHIFT FORWARD 24 HOURS ] on the custom sidebar. Operation: When executed outside market hours, the script must loop through all active user-drawn objects on the chart except for infinite Horizontal Lines (Draw.HorizontalLine). Logic: Add exactly 24 hours to the Start Time and End Time properties of every object. This must seamlessly slide the entire visual layout forward by one day, preserving all exact spatial relationships between text, boxes, and arrows. Text Re-centering: When this nightly shift occurs, any manual text positioning adjustments done during the trading day must be cleared. The internal text must automatically re-center itself inside its parent rectangle for the start of the next day. All custom text phrases, colors, and arrow quantities must be perfectly preserved. 2. Quarterly Y-Axis Contract Rollover Adjuster Trigger: An input box on the sidebar where I can type a custom numerical value (e.g., 58.25 or -58.25) and click an [ APPLY ROLLOVER OFFSET ] button. Operation: The script must loop through ALL user-drawn objects on the chart without exception (including horizontal lines, rectangles, arrows, and text). Logic: Add or subtract the user-specified value to/from the Start Y and End Y price properties of every object. This must instantly teleport all historical levels vertically to match the new contract price scale. Instrument Continuity: Note that when NinjaTrader rolls the chart over to a new contract month, the platform natively copies all existing drawing objects to the new instrument chart at their legacy Y-values. This script must simply intercept those existing objects on the active chart after the rollover has occurred and shift their Y-values by the user-defined point offset. It does not need to duplicate or recreate shapes across instruments. 3. User Interface & Safety Settings Native WPF Sidebar: A clean, native-looking WPF sidebar panel on the right side of the chart window that can be expanded or minimized. Confirmation Prompts: The Rollover execution button must trigger a confirmation box (e.g., "Are you sure you want to adjust all levels by X points?") to prevent accidental misclicks. Undo (Ctrl + Z) Grouping: All batch coordinate loops must be safely wrapped inside a NinjaScript Undo Group. If a shift is executed on the wrong chart or night, pressing Ctrl + Z on the keyboard must instantly reverse the macro and return all objects to their original positions. (This allows the rollover adjuster to be fully tested by the client at any time, well ahead of the actual calendar rollover date). Global Object Support: Some objects (Rectangles and Horizontal Lines) have their "Attach to" property set to "All charts". The script must safely update these global objects without duplicating them or breaking their visibility on secondary charts in the workspace. 4. Version Compatibility & Bug-Mitigation Requirement Environment: I am currently running NinjaTrader version 8.0.28.0 (64-bit). The final script must compile perfectly here, but also remain functional without breaking changes if I upgrade to modern 8.1.x builds. Critical Rendering Fix: Note that many of the rectangles on my charts are explicitly set to "Attach to All Charts." In recent NinjaTrader 8.1.x updates, a known platform rendering bug frequently causes legacy version (8.0.28.0) rectangles with global attachment properties to disappear or fail to load from old workspace files. The Solution: To future-proof this project, the script must NOT rely on hardcoded class filtering for rectangles. Instead, iterate through the global collection using generic IDrawingTool interfaces. The time-shift and price-shift loops must modify the underlying anchor coordinates generically so that the macro functions seamlessly on both version 8.0.28.0 and modern 8.1.x builds without dropping global shapes. Project Timeline & Escrow Milestones (Fixed-Price Contract): This project will be managed and funded through a strict three-phase milestone structure. Do not apply if you cannot deliver editable source code. Milestone 1 (30% of Budget) – Prototype Development:The developer delivers a working mock-up indicator providing the basic WPF sidebar UI, proving the generic IDrawingTool loop successfully executes the global 24-hour time shift on a test chart using sample data provided. Milestone 2 (40% of Budget) – Advanced Logic Integration:Integration of the Y-axis contract rollover point adjustment, confirmation boxes, independent text re-centering logic, and full Ctrl + Z Undo Group integration. Milestone 3 (30% of Budget) – Final Review & Source Code Delivery:Following 48 hours of live testing by the client on sample data to ensure no bugs, rendering issues, or chart loop lag, the developer delivers the raw, fully commented .cs C# source code file. Intellectual Property & Ownership Terms (Strict Work-For-Hire): This project is a proprietary, custom tool intended solely for my private trading use. This is a strict "Work for Hire" agreement. Upon final payment milestone release, 100% of the intellectual property, copyright, and ownership rights to the raw C# / NinjaScript source code will transfer exclusively to me. The developer agrees not to resell, distribute, publish, or reuse this specific tool, its interface layout, or its exact underlying script architecture for any other commercial purposes, products, or clients. How to Apply: Please respond with your experience coding custom drawing tools or layout engines in NinjaTrader 8. In your application, please briefly explain how your code will target the DrawObjects registry to perform the time adjustments cleanly without duplicating globally attached shapes.
$250.00
Fixed-price- ExpertExperience Level
- Remote Job
- One-time projectProject Type
Skills and Expertise
Activity on this job
- Proposals:Less than 5
- Last viewed by client:4 weeks ago
- Hires:1
- Interviewing:0
- Invites sent:0
- Unanswered invites:0
About the client
- USATarzana3:22 AM
- $905 total spent1 hire, 1 active
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by