Скрипты: ClosePosition

 

ClosePosition:

Данный скрипт предназначен для закрывания открытых позиций.

Автор: Nikolay Kositsin

 

Если открыться скриптои OpenBuyPosition  два раза подряд, то скрипт ClosePosition не закрывает всю позицию целиком.

 

Скрипт перестал работать правильно. Вместо закрытия позиций, открывает их.  ((

 
Alivru:

Скрипт перестал работать правильно. Вместо закрытия позиций, открывает их.  ((

В принципе, скрипт выполнен для брокеров, имеющих всего по одной позиции для каждой валюты. Потому как непонятно, а что, собственно говоря, закрывать, когда объект для приложения усилий не один, а во множественном числе.

Так что с открыванием проблема закрыта, новый код опубликуют, а вот с кучей позиций всё-равно будет некоррект.

 
fxsaber:
Вроде, понятно же
input int Deviation = 100;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
#define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))

void OnStart()
{
  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS) && (OrderSymbol() == _Symbol) && (OrderType() <= OP_SELL))
      OrderClose(OrderTicket(), OrderLots(), (OrderType() == OP_BUY) ? Bid : Ask, Deviation);
}
Едва ли! Ваш код как носорог в посудной лавке просто грохнет все позиции и всё, а не закроет требуемый объём. Удачи.
 
Nikolay Kositsin:
Едва ли! Ваш код как носорог в посудной лавке просто грохнет все позиции и всё, а не закроет требуемый объём. Удачи.
Ну так элементарно же добавить в код закрытый объем.
 
fxsaber:
Ну так элементарно же добавить в код закрытый объем.

Вы самой сути скрипта не понимаете! Название скрипта - "Закрыть позицию"! А позиций десять! В изначальной логике скрипта предполагается только одна позиция. И код ваш вообще никчемушний напрочь. Вполне достаточно строчки:

request.position=PositionGetInteger(POSITION_TICKET);
 
Nikolay Kositsin:
Вы самой сути скрипта не понимаете! Название скрипта - "Закрыть позицию"! А позиций десять! В изначальной логике скрипта предполагается только одна позиция.

Нетто-позиция даже на MT5-Hedge и MT4 всегда одна. Алгоритм такой

  1. Вычислили размер и направление нетто-позы.
  2. В противоход ей открыли позу на указанный объем.
  3. Схлопнули НОВУЮ позу по OrderCloseBy.

 
Nikolay Kositsin:

И код ваш вообще никчемушний напрочь. Вполне достаточно строчки:

request.position=PositionGetInteger(POSITION_TICKET);
Если говорить о никчемности, то вот она
request.type_filling=ORDER_FILLING_FOK;
 
fxsaber:

Нетто-позиция даже на MT5-Hedge и MT4 всегда одна. Алгоритм такой

  1. Вычислили размер и направление нетто-позы.
  2. В противоход ей открыли позу на указанный объем.
  3. Схлопнули НОВУЮ позу по OrderCloseBy.

Это разговор ни об чём в стиле: "Ежели бы бабушка была бы дедушкой и имела бы пенис...." Скрипт закрывает всего одну позицию в терминале и всё!
 
Nikolay Kositsin:
Это разговор ни об чём в стиле: "Ежели бы бабушка была бы дедушкой и имела бы пенис...." Скрипт закрывает всего одну позицию в терминале и всё!
Metaquotes-Demo, Si-3.17, Netting - пробуйте!
Причина обращения: