[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 250

Artyom Trishkin
Модератор
58847
Artyom Trishkin  
Vovo4ka:


попробовал написать так как ты сказал, что то пашет...по прежднему открывает позиции по закрытию предыдущей...((

может ты не понял что я имел ввиду, нужно что бы скажем открывал сделку не раньше чем через 1час после закрытия предыдущей...а в твоем случаи, он исключает возможность открытия повторной, но как только она закрывается, то сразу открывается следующая

А подумать над кодом функции? Найдите четыре отличия :) :

//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy, int op, int mn) 
{
   datetime t;
   int      i, k=OrdersHistoryTotal();

   if (sy=="0") sy=Symbol();
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue; 
         if (OrderMagicNumber()!=mn)   continue; 
         if (t<OrderCloseTime()) t=OrderCloseTime();
         }
      }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
Roma
1010
Roma  
как закрыть ордер частично? просто изменить объем сделки с OrderModify?
Владимир
100
Владимир  
artmedia70:

А подумать над кодом функции? Найдите четыре отличия :) :




нашел ....отличия...))))) ух-ха...я просто в учебнике закапался по программированию говова не варит))
Artyom Trishkin
Модератор
58847
Artyom Trishkin  
eddy:
как закрыть ордер частично? просто изменить объем сделки с OrderModify?
Нет. Закрывать позу меньшим лотом.
alexander
198
alexander  
eddy:
как закрыть ордер частично? просто изменить объем сделки с OrderModify?

Открыть противоположный ордер лотом меньше. Разница - остаток, который должен продолжить существование.

Противоположный лот и часть существующего лота закрыть функцией OrderCloseBy().


Artyom Trishkin
Модератор
58847
Artyom Trishkin  
coronel:

Открыть противоположный ордер лотом меньше. Разница - остаток, который должен продолжить существование.

Противоположный лот и часть существующего лота закрыть функцией OrderCloseBy().

В пятёрке такой фокус не пройдёт. Не забывайте о реквотах и проскальзываниях тоже...
alexander
198
alexander  
artmedia70:
В пятёрке такой фокус не пройдёт. Не забывайте о реквотах и проскальзываниях тоже...

Простите, в какой пятёрке? )) Мы на MQL4.

Реквоты и проскальзывания не учитываю как естественный фактор. Суть не меняется.

Artyom Trishkin
Модератор
58847
Artyom Trishkin  
coronel:

Простите, в какой пятёрке? )) Мы на MQL4.

Реквоты и проскальзывания не учитываю как естественный фактор. Суть не меняется.

Делайте что хотите - ваш выбор сделать две операции вместо одной.
alexander
198
alexander  
artmedia70:
Делайте что хотите - ваш выбор сделать две операции вместо одной.
"две операции вместо одной" - поподробнее, пожалуйста. Может оказаться полезным.
Artyom Trishkin
Модератор
58847
Artyom Trishkin  
coronel:
"две операции вместо одной" - поподробнее, пожалуйста. Может оказаться полезным.

Для частичного закрытия позиции лотом 1.0 можно сделать одну операцию, закрыв её меньшим лотом, например 0.5.

Стандартная функция:

__________________________________________________________________________________________________

bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

Закрытие позиции. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket - Уникальный порядковый номер ордера.
lots - Количество лотов для закрытия.
price - Цена закрытия.
slippage - Значение максимального проскальзывания в пунктах.
Color - Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.

__________________________________________________________________________________________________

Вы же предлагаете сделать две операции:
1. Открыть противоположную позицию меньшим лотом;

2. Встречно их закрыть, чтобы осталась та позиция, лот которой был больше.

__________________________________________________________________________________________________

bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE)

Закрытие одной открытой позиции другой позицией, открытой по тому же самому инструменту, но в противоположном направлении. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
ticket - Уникальный порядковый номер закрываемого ордера.
opposite - Уникальный порядковый номер противоположного ордера.
Color - Цвет стрелки закрытия на графике. Если параметр отсутствует или его значение равно CLR_NONE, то стрелка на графике не отображается.

_________________________________________________________________________________________________

Соответственно увеличивается и количество неблагоприятных факторов вдвое на одну позицию.

Зачем?