Скачать MetaTrader 5

Модификация тейка

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши статьи и зарабатывай. Мы платим за них 200 USD!
а
77
а 2010.10.19 12:14 
допустим есть 1 открытый ордер и тут открывается второй отложенный, как сделать тейк профи первого ордера равным тейку второго ордера? и так далее, 1,2=3 1,2,3=4 1,2,3,4=5 ?
Андрей
166
Андрей 2010.10.19 16:04  

Попробуй так:

1. Присвоить ордерам тикеты.

2. Выбрать по тикету первый ордер (OrderSelect).

3. Изменить тейк первого ордера (OrderModify).

а
77
а 2010.10.19 16:06  
Это понятно, а код примерный можно?
hasayama
610
hasayama 2010.10.19 16:48  
int tickets[], i = 0, total = OrdersTotal() - 1;
double tps[], open_price[], sls[];
datetime open_time[];

for ( i = total; i >= 0; i -- )
{
   if ( !OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) { Print( "OrderSelect error #", GetLastError() ); continue; }
   if ( OrderSymbol() != Symbol() ) { continue; } //--только по символу
   if ( OrderType() > 1 ) { continue; } //--и только рыночные
   if ( OrderMagicNumber() != MagicNumber ) { continue; } //--опционально, имеет смысл только, если ордера ставятся экспертом и им задают нужный мейджик

   //--теперь творим, то есть инициализируем наши массивы
   ArrayResize( tickets, ArraySize( tickets ) + 1 );
   ArrayResize( tps, ArraySize( tps ) + 1 );
   ArrayResize( open_time, ArraySize( open_time ) + 1 );
   
   tickets[ArraySize(tickets)-1] = OrderTicket();
   open_time[ArraySize(open_time)-1] = OrderOpenTime();
   tps[ArraySize(tps)-1] = OrderTakeProfit();
   open_price[ArraySize(open_price)-1] = OrderOpenPrice();
   sls[ArraySize(sls)-1] = OrderStopLoss();
}

//--теперь все позиции в массивах нужно отсортировать по времени открытия

//--после сортировки на 0 позиции в массиве будет самый первый ордер, на ArraySize(ARRAY_NAME) - 1 соответственно последний открывшийся
//--все, что нужно теперь, просмотреть все позиции и передвинуть ТП в случае необходимости

int index = ArraySize(tickets) - 1;

for ( i = 0; i < index; i ++ ) //--все кроме последнего
{
   if ( MathAbs( tps[i] - tps[index] ) > Point/2.0 ) { OrderModify( tickets[i], open_price[i], sls[i], tps[index], 0 ); }
}

//--как-то так, наверное
а
77
а 2010.10.19 17:04  
не изменят :(
hasayama
610
hasayama 2010.10.19 17:09  
Это примерный код для того, чтобы натолкнуть на мысль. Если чуть-чуть подумать и дописать все недостающее будет изменять как нужно.
а
77
а 2010.10.19 17:10  
ну а где хоть? а?
а
77
а 2010.10.19 17:35  
Up
а
77
а 2010.10.20 07:40  
Up
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий