Частичное закрытие ордеров - страница 3

 
fxsaber:

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

Изначально, задача реализовать частичное закрытие ордера по определённым ценовым уровням в процентах от первоначального лота. Как можно это сделать, если не сверяться по тому, какой ордер какой ордер породил?

Я вижу, ещё один вариант. Каждый новый ордер получает новый магик, но там другой момент. Их же нужно будет отслеживать т.е. фильтровать своих ордера при отборе их в OrdersTotal(). Это тоже нюанс. Если магик длинный, то можно, в принципе, на некотором участке отсеивать всё, кроме некой подстроки числа. Хотя, этот вариант мне не очень нравится.


Ihor Herasko:

Глобальные переменные или файл привязаны к определенному терминалу. Запустить советник на другом терминале без переноса этих данных не получится. Таким образом, такой вариант подходит только для более узкого круга задач. С историей счета универсально получается.

Бот торгует в конкретном терминале, поэтому какая нам разница, что в другом терминале его использовать не будешь?

Ihor Herasko:

Эту мысль не понял.

Вот смотрите. Если, всё-таки, использовать комментарии алгоритм будет такой:

1) Цена оказалась за 1-ым ценовым уровнем. Закрывает часть позиции.

2) На каждом тике перебираем рыночные ордера и ищем, есть ли ордера, порождённые от других (с комментарием from #..).

3) Если находится ордер, порождённый от другой позиции, нам нужно знать есть ли ещё ордер, порождённый найденной позицией, но уже в истории т.к. если эта позиция закрылась, то она уже в архиве позиций так сказать. Логично?

4) Когда цена окажется за очередным ценовым уровнем, нам нужно знать всё вышеуказанную информацию, чтобы знать закрыть ли нам часть позиции на этом уровне и высчитать какой процент позиции закрывать (если нужно закрывать). С другой стороны, на очередной уровне, возможно уже не нужно закрывать часть позиции т.к. на этом уровне уже закрыта часть позиции и нужно пропустить этот уровень. А для этого нам нужно знать, закрывалась ли на этом уровне часть позиции или нет.

Я к тому веду, что не всё так однозначно и просто в этой реализации.

 
Viktar Dzemikhau:

задача реализовать частичное закрытие ордера по определённым ценовым уровням в процентах от первоначального лота.

Просьба пример привести. Совсем не понимаю формулировку задачи.
 
fxsaber:
Просьба пример привести. Совсем не понимаю формулировку задачи.

Вот скрин:

Так понятно?

 
Viktar Dzemikhau:

Вот скрин:

Так понятно?

доброго дня. Сам сейчас решаю подобную задачу. Там все элементарно просто, например, берете в Стартовой позиции цену открытия - она не меняется при частичном ее закрытии - с ней работаете, сейчас выложу робота, как у меня это организовано.

Тикет и лот - можно исключить из внешних переменных, считывать в коде.

//+------------------------------------------------------------------+
//|                               Copyright © 2021, R0MANBEST 
//+------------------------------------------------------------------+
#property copyright "Copyright © 30/05/2021, R0MANBEST"
#property strict
//-------------------------------------------------------------------
extern ENUM_TIMEFRAMES timeframe = 5;

extern int    Magic            = 12;
extern   int   Ticket          = 0;        // iTicket, ДЛЯ ЧАСТИЧНОГО ЗАКРЫТИЯ  (считать и работать с ценой его открытия, т.к. тикет при частичном закрытии изменится)
extern double Lot              = 1.24;

/* extern int    period_RSI    = 14;
extern int    level_buy        = 30;
extern int    level_sell       = 70;
extern int    MinStep          = 100;
*/

extern int    TakeProfit       = 1000;      // Takeprofit
extern int    StopLoss         = 300;      // SL 

//extern int    Takeprofit2      = 200;      // Takeprofit2 - сделать на обратном ходе цены к позиции
//extern int    Takeprofit3      = 300;      // Takeprofit3 - сделать на обратном ходе цены к позиции

extern int    Not_Loss         = 10;       //  цена (ЖАДНОСТЬ) перевода в бу  от цены безубытка позиции по магику


extern int    TrailingStop     = 100;        // TrailingStop ТРАЛЛ простой - если > 0 
extern bool   Trailing_ATR     = true;     // Trailing_ATR использовать трал по ATR  
extern bool   Trailing_MA      = true;     // Trailing_MA использовать трал по МА.          
extern bool   TrailingByShadow = true;     // TrailingByShadow использовать трал по теням.       
extern bool   Traling_Fractal  = true;     // Traling_Fractal  использовать трал по фракталам   


пока сделано частичное закрытие на пять частей


/* https://www.mql5.com/ru/forum/160683/page1432

lots_1to4=NormalizeLots(lots/5); // лоты для 1,2,3,4 ; округление лота сами добавите

lots5 = NormalizeLots(lots - lots_1to4*5); // для 5 - оставшиеся лоты
*/

Это у меня - рабочий вариант - частичного закрытия тралами. Также буду добавлять уровни для частичного закрытия на откатах.

Вам для правки под свои условия - во вложении.

Пока реализован вариант для одной Стартовой позы с магиком, если например, их несколько с одним магиком и надо каждую закрывать частично - по своим видам  (условиям) и процентам закрытия  - тут надо решать, может через массивы, может проще...

 
Viktar Dzemikhau:

Вот скрин:

Так понятно?

Поставить три SellLimit, где должно быть частичное.

 

Roman Shiredchenko, у вас так, при беглом обзоре этого мессива, нет того, что мне нужно. К тому же, там слишком много чего набросано и как-то хаотично. Трейлинги, как я понимаю,

Юрия Дзюбана и тд, в перемешку с чем-то ещё.

fxsaber:

Поставить три SellLimit, где должно быть частичное.

Так не факт, что закроется та позиция, которую нужно закрыть. Хотя, конечно, теоритически это вариант.
 
Viktar Dzemikhau:

Так не факт, что закроется та позиция, которую нужно закрыть.

CloseBy поможет точно закрыть нужную позицию.

 
fxsaber:

CloseBy поможет точно закрыть нужную позицию.

товарисчь, CloseBy не вариант, да и не все все брокеры имеют эту функцию в наличии в рабочем виде, поэтому она какбы есть, но никто ей не пользуется потому что она обычно не работает у брокера
 
Aleksey Semenov:
товарисчь, CloseBy не вариант, да и не все все брокеры имеют эту функцию в наличии в рабочем виде, поэтому она какбы есть, но никто ей не пользуется потому что она обычно не работает у брокера

Вы занимаетесь всем, чем угодно, но только не торговлей.

 
fxsaber:

CloseBy поможет точно закрыть нужную позицию.

Она не у всех работает.

Причина обращения: