Имя:
Автор:
Valmars (29.09.2006 12:23)
Скачано:
3375
Скачать:
Переносит сделки из истории терминала на график в соответствии с имиджем, принятым в последней версии терминала. Все оптом. Прежние позиции удаляются с графика. Доработанный скрипт http://codebase.mql4.com/ru/360 .
Rosh писал(а):
Еще один вариант скрипта, в поле Description пишется время открытия/закрытия
с точностью до секунды. На рисунке подчеркнуто розовым цветом.
а как встроить подсчет ордеров ?
с http://forum.mql4.com/ru/16946
Еще один вариант скрипта, в поле Description пишется время открытия/закрытия
с точностью до секунды. На рисунке подчеркнуто розовым цветом.
#property copyright " Valmars "
#property link " valmars@bk.ru "
extern color BuyColor = Blue ;
int start ()
{
ObjectsDeleteAll ( 0 , OBJ_ARROW ) ;
for ( int i = 0 ; i < ObjectsTotal () ; i ++ )
{
if ( ObjectType ( ObjectName ( i )) == OBJ_TREND )
if ( ! ObjectGet ( ObjectName ( i ) , OBJPROP_RAY ))
ObjectDelete ( ObjectName ( i )) ;
}
string name ;
int Arrow ;
double Color ;
for ( i = 0 ; i < OrdersTotal () ; i ++ )
{
OrderSelect ( i , SELECT_BY_POS ) ;
if ( OrderSymbol () != Symbol ())
continue ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BuyColor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = Red ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLSTOP : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderOpenTime () , OrderOpenPrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , Arrow ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
ObjectSetText ( name , name + " : " + TimeToStr ( OrderOpenTime () , TIME_DATE | TIME_SECONDS )) ;
}
for ( i = 0 ; i < HistoryTotal () ; i ++ )
{
OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ;
if ( OrderSymbol () != Symbol ())
continue ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BuyColor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = Red ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLSTOP : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderOpenTime () , OrderOpenPrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , Arrow ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
ObjectSetText ( name , name + " : " + TimeToStr ( OrderCloseTime () , TIME_DATE | TIME_SECONDS )) ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BuyColor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = Red ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = Yellow ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ; break ;
case OP_SELLSTOP : Arrow = 2 ; Color = Yellow ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderCloseTime () , OrderClosePrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , 3 ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
ObjectSetText ( name , name + " : " + TimeToStr ( OrderCloseTime () , TIME_DATE | TIME_SECONDS )) ;
name = OrderTicket () + DoubleToStr ( OrderOpenPrice () , MarketInfo ( OrderSymbol () ,
MODE_DIGITS )) + " -> " + DoubleToStr ( OrderClosePrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
ObjectCreate ( name , OBJ_TREND , 0 , OrderOpenTime () , OrderOpenPrice () ,
OrderCloseTime () , OrderClosePrice ()) ;
ObjectSet ( name , OBJPROP_STYLE , STYLE_DOT ) ;
ObjectSet ( name , OBJPROP_WIDTH , 1 ) ;
ObjectSet ( name , OBJPROP_RAY , false ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
}
return ( 0 ) ;
}
Alex3 писал(а):
Как в него загрузить данные про открытые/закрытые позиции по
депозиту к которому нет on-line доступа. Возможно это делать из,
например, Statement'а или другого файла.
Никак. Скрипт берёт данные из истории счёта, а она загружается
с сервера. Для переноса с отчёта посмотрите скрипт KimIV
http://codebase.mql4.com/ru/334
Как в него загрузить данные про открытые/закрытые позиции
по депозиту к которому нет on-line доступа. Возможно это делать
из, например, Statement'а или другого файла.
Оказывается, забыл прицепить свой вариант скрипта. Цепляю.
#property copyright " Valmars "
#property link " valmars@bk.ru "
#property show_inputs
extern color BUYcolor = Blue ;
extern color SELLcolor = Red ;
extern color PENDINGcolor = Yellow ;
int start ()
{
ObjectsDeleteAll ( 0 , OBJ_ARROW ) ;
for ( int i = 0 ; i < ObjectsTotal () ; i ++ )
{
if ( ObjectType ( ObjectName ( i )) == OBJ_TREND )
if ( ! ObjectGet ( ObjectName ( i ) , OBJPROP_RAY ))
ObjectDelete ( ObjectName ( i )) ;
}
string name ;
int Arrow ;
double Color ;
for ( i = 0 ; i < OrdersTotal () ; i ++ )
{
OrderSelect ( i , SELECT_BY_POS ) ;
if ( OrderSymbol () != Symbol ())
continue ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BUYcolor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = SELLcolor ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLSTOP : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderOpenTime () , OrderOpenPrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , Arrow ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
}
for ( i = 0 ; i < HistoryTotal () ; i ++ )
{
OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ;
if ( OrderSymbol () != Symbol ())
continue ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BUYcolor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = SELLcolor ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLSTOP : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderOpenTime () , OrderOpenPrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , Arrow ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
switch ( OrderType ())
{
case OP_BUY : Arrow = 1 ; Color = BUYcolor ;
name = OrderTicket () + " buy " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELL : Arrow = 2 ; Color = SELLcolor ;
name = OrderTicket () + " sell " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYLIMIT : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buylimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_BUYSTOP : Arrow = 1 ; Color = PENDINGcolor ;
name = OrderTicket () + " buystop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
case OP_SELLLIMIT : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " selllimit " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ; break ;
case OP_SELLSTOP : Arrow = 2 ; Color = PENDINGcolor ;
name = OrderTicket () + " sellstop " +
DoubleToStr ( OrderLots () , 2 ) + " " +
OrderSymbol () + " at " +
DoubleToStr ( OrderOpenPrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
break ;
}
ObjectCreate ( name , OBJ_ARROW , 0 , OrderCloseTime () , OrderClosePrice ()) ;
ObjectSet ( name , OBJPROP_ARROWCODE , 3 ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
name = OrderTicket () + DoubleToStr ( OrderOpenPrice () , MarketInfo ( OrderSymbol () ,
MODE_DIGITS )) + " -> " + DoubleToStr ( OrderClosePrice () ,
MarketInfo ( OrderSymbol () , MODE_DIGITS )) ;
ObjectCreate ( name , OBJ_TREND , 0 , OrderOpenTime () , OrderOpenPrice () ,
OrderCloseTime () , OrderClosePrice ()) ;
ObjectSet ( name , OBJPROP_STYLE , STYLE_DOT ) ;
ObjectSet ( name , OBJPROP_WIDTH , 1 ) ;
ObjectSet ( name , OBJPROP_RAY , false ) ;
ObjectSet ( name , OBJPROP_COLOR , Color ) ;
}
return ( 0 ) ;
}
Очень полезный скрипт, добавил возможность выбора цвета стрелок.
Вообще говоря, код неверный. Написав и проверив на двух терминалах
с разными ДЦ отправил на публикацию. Одновременно переслал
по e-mail в офис. И уже там, запустив на офисном компе обнаружил
ошибку. Она заключается в том,что при равенстве цен открытия
и закрытия ордера, для закрытых ордеров создаются два объекта
одного типа с одним именем: стрелка для окрытия позиции и стрелка
для закрытия. В результате значок открытия заменяется значком
закрытия позиции, т. е. вновь созданный объект заменяет существующий
с таким же именем. Исправленную версию закачал, но здесь вижу
первоначальный вариант. Достаточно добавить ещё один пробел
после названий операций в описании name= для стрелки закрытия
позиции и имена станут уникальными.