нужна помощь! - страница 2

 

надо

for(int i = OrdersHistoryTotal()-1; i >= 0; i--)

и это тоже лишнее

 + _Period * 60
 
Alexey Valeev:

Запомнили бар на котором произошло закрытие, то есть запомнили текущий бар) всё на нём не открываем, пока новый бар не откроется. То что вы скинули, так там сперва нужно историю перерыть. У меня точно такое же условие по сути, но быстрее работает)

1. Это не я скинул. Это Сергей.
2. Ок. Запомнили при инициализации. А после закрытия ордера в любом случае опять нужно "запомнить бар". Я же говорил что надёжнее перед открытием нового ордера проверить.

 
Andrei Fandeev:

1. Это не я скинул. Это Сергей.
2. Ок. Запомнили при инициализации. А после закрытия ордера в любом случае опять нужно "запомнить бар". Я же говорил что надёжнее перед открытием нового ордера проверить.

Ну так мой вариант рабочий ведь?) Вы просто написали неверно. Оба варианта рабочие.

 
Vladimir Mametov:

надо

и это тоже лишнее

https://www.mql5.com/ru/forum/231460#comment_6769488

 
Alexey Valeev:

Ну так мой вариант вполне рабочий ведь?) Вы просто написали неверно. Оба варианта рабочие.

Вы про проверку в инициализации ничего не говорили в первом сообщении. Без неё "запоминание" чревато. Я об этом.

 
Andrei Fandeev:

Ваша правда - цикл неправильный , поторопился... то что выложил поправил.

А можете сказать почему это лишнее? Что тут не так?

+ _Period * 60
 
OrderCloseTime() <= Time[0] + _Period * 60

Проверка ведь идет на текущем баре

Time[0] - это время открытия текущего бара, если сделка закрылась раньше то false

если после, то true

Time[0] + _Period * 60

это уже будет время следующего бара

 
if(OrderCloseTime() >= Time[0] )return true; else return false;
 

Всем привет! Столкнулся с такой проблемой:

Открываю сделку без стоплосса и тэйкпрофита:

OrderSend("EURUSD",OP_BUY,0.1,Ask,0,0,0,"",Magic,0,Red);

Если цена поднялась на 100 пунктов, хочу закрыть этот ордер

OrderClose(Magic,OrderOpenPrice(),Ask,0,Red);

Вылезает ошибка: OrderClose error 131

Если вместо OrderOpenPrice() укажу 0.1 или OrderLots() (как в примерах), то ошибка:  OrderClose error 138

В чем проблема?


 
labvic:

Всем привет! Столкнулся с такой проблемой:

Открываю сделку без стоплосса и тэйкпрофита:

Если цена поднялась на 100 пунктов, хочу закрыть этот ордер

Вылезает ошибка: OrderClose error 131

Если вместо OrderOpenPrice() укажу 0.1 или OrderLots() (как в примерах), то ошибка:  OrderClose error 138

В чем проблема?


OrderClose

Осуществляет закрытие ордера.

bool  OrderClose(
   int        ticket,      // номер ордера
   double     lots,        // количество лотов
   double     price,       // цена закрытия
   int        slippage,    // максимальное проскальзывание
   color      arrow_color  // цвет
   );

Параметры

ticket            [in]  Уникальный порядковый номер ордера.

lots               [in]  Количество лотов для закрытия.

price             [in]  Цена закрытия.

slippage        [in]  Значение максимального проскальзывания в пунктах.

arrow_color  [in]  Цвет стрелки закрытия на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.


Возвращаемое значение

Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().