Все знают как порой бывает неудобен интерфейс нового WealthLab. Например, у нас открыт график, но для того чтобы посмотреть на сколько акций (контрактов) и по какой цене выставлять ордер, нам надо перейти во вкладку Alerts, там запомнить количество акций (контрактов), цену ордера и перейти обратно в график чтобы визуально посмотреть где будет ордер. Но пока будете рассматривать график, уже забудете количество акций или цену, или и то и другое. В старом WealthLab было все продумано и ордера появлялись внизу графика, поэтому никуда переключаться не было нужды. Поэтому, для удобства рекомендую создать новую панель и туда вынести описание ордера, например вот так: Но, интересно, что стандартным способом получалось что ордера на открытие позиции отображались правильно, а на закрытие позиции цена всегда была равна нулю. Пришлось написать на форум WealthLab, где быстро получил ответ от Eugene (это их главный представитель) о том что напрямую это сделать не получится, так как что-то там у них не так, но можно все провернуть окольными путями. И привел пример кода. http://www.wealth-lab.com/Forum/Posts/Alert-BasisPrice-is-zero-for-sell-orders-35546 Вроде бы все работает нормально. Только одна незначительная загвоздка теперь. Если тестировать фьючерсы, то, как и прежде, ордера на открытие позиции отображаются нормально, а вот на закрытие позиции получается что-то такое: Sell 1 contract of ES at Stop 2097.826256522141421 Правильнее было бы, конечно так: Sell 1 contract of ES at Stop 2097.75 Потому что шаг цены для фьючерса ES -- 0,25. Если интересно, привожу код. Пример системы -- покупаем на пробой двухбарного канала по high, продаем на пробой двухбарного канала по low. Остальной код для отображения ордера в верхней панели: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab; using WealthLab.Indicators; namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { ChartPane zPane = CreatePane ( 10, true , true ); Font font = new Font( "Arial" , 10, FontStyle.Regular); for ( int bar = 20; bar < Bars .Count; bar++) { if ( IsLastPositionActive ) { Position p = LastPosition ; double exitPrice = Lowest.Value(bar, Low , 2); p.Tag = ( object )exitPrice; SellAtStop (bar+1, p, exitPrice); } else { BuyAtStop (bar+1, Highest.Value(bar, High , 2)); } for ( int i = 0; i < Alerts .Count; i++ ) { WealthLab.Alert a = Alerts [i]; bool exit = (a.AlertType == TradeType.Sell || a.AlertType == TradeType.Cover); string basis = exit == true ? (( double )a.Position.Tag). ToString () : a.BasisPrice. ToString (); DrawText ( zPane, a.AlertType + " " + a.Shares + " contracts of " + a.Symbol + " at " + a.OrderType + " " + basis, 0, 0, Color.White, Color.Black, font); } } } } }