Ещё одну функцию добавил. Надо только проверить в реальном времени в терминале.
эта версия так - В Тестере Играться
Не плохая функция - я Вам скажу. Туда сюда, берёт свою прибыль и в ус, не дует
только вот код - надо до ума довести- вроде так всё отлично работает
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotBuy(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
PROFIT_BUY=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotSell(void)
{
bool res=false;
double level;
double PROFIT_SELL=0.00;
PROFIT_SELL=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotBuy(void)
{
bool res=false;
double PROFIT_BUY=0.00;
CloseTikB=iClose(NULL,Period(),0);
OpenTikB=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikB<CloseTikB)
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetOpenLot)
{
double price=m_symbol.Ask();
for(uint y=0; y<maxLimits; y++)
{
//--- open positionif(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,InpLots,price,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price,0.0);
}
res=true;
}
}
}
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotSell(void)
{
bool res=false;
double PROFIT_SELL=0.00;
CloseTikS=iClose(NULL,Period(),0);
OpenTikS=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikS>CloseTikS)
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetOpenLot)
{
double price0=m_symbol.Bid();
for(uint y=0; y<maxLimits; y++)
{
if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_SELL,InpLots,price0,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening SELL position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price0,0.0);
}
res=true;
}
}
}
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
Испытал сейчас на реальном счёте - хотел небольшую прибыль, от двух открытых позиции, вписал в настройках 160 , думал закроет от самой большой минусовой позиции, но нет зараза, закрыла
у которой профит стал 160 и закрыло обе позиции, и я лопух . Оказывается, нужно вести расчёт от первой открытой позиции, прибавляя минусовую
#property version "1.017"
на пятый день - только до тюкался, как правильно эту функцию прописать. Теперь закрывает по общей прибыли на одной паре всех Buy или Sell
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
{
string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позицииif(position_GetSymbol==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT);
}
else
{
PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT);
}
}
}
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profit
ClosePosition(m_position.Symbol()); // close a position by the specified symbo
}
res=true;
}
for(int u=PositionsTotal()-1; u>=0; u--) // returns the number of current positionsif(m_position.SelectByIndex(u)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profit
ClosePosition(m_position.Symbol()); // close a position by the specified symbo
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
и от этих Горизонтальных линии откроет позицию и выставит первые Горизонтальные линии - и так будет повторятся, пока цена не сможет их достать рисунок 2
Вот закрыла - заданную в настройках, ПРИБЫЛЬ
рисунок 3
---------------------------------------------
как на паре достигнет прибыль 200 - закроет позицию
рисунок 4
достигла 200 и закрыла все позиции на buy или sell - ведь можно открывать в обе стороны и каждая сторона имеет свою, прибыль или убыток
- теперь как достанет Горизонтальную линию, откроет позицию - но можно вручную их подвинуть
Про тестировал сегодня эту функцию с функцией дублирование Горизонтальных линии на убыток( как цена пошла не в ту сторону, встречает на пути горизонтальную линию, от неё открывается позиция и линия отпрыгивает ещё дальше, на заданное расстояние, убыток увеличивается и при следующем касании горизонтальной линии, лот откроется с увеличением).
Я офигел. - эта логика, вытаскивает всё в плюс. Интересно! за сколько можно продать, такое чудо?!
----------------------------------------- вот еще пример - цена идёт против меня . это первая картинка, вторую выставлю, как от работает свою задачу
Здесь команды, которые могут выполнятся --------------------------------
//+------------------------------------------------------------------+//| ENUM_TRADE_COMMAND |//+------------------------------------------------------------------+enum ENUM_TRADE_COMMAND
{
Turn_Off=0, // TURN OFF
Line1_Line1=1, // Line: LOWER
Line2_Line2=2, // Line: TOP
Line_Line=3, // Line: LOWER+Line: TOP
Line1_buys=4, // Line: LOWER+Buy's
Line2_sells=5, // Line: TOP+Sell's
sells_Line1=6, // Line: LOWER+Sell's
buys_Line2=7, // Line: TOP+Buy's
close_buys=8, // Close All Buy's
close_sells=9, // Close All Sell's
close_all=10, // Close All Buy's and Sell's
open_buy=11, // Open Buy
open_sell=12, // Open Sell
close_open_b=13, // Close Sell+Open Buy
close_open_s=14, // Close Buy+Open Sell
open_buy_sell=15, // Open Buy and Sell
};
//+------------------------------------------------------------------+
Функция прибыль
------------ Прибыль не общая - у BUY своя прибыль у SELL своя (например у вас открыто две позиции одна в buy а другая в sell в настройках Вы хотите заработать 100, так вот, Пока каждая из них не возьмёт по 100.) ещё и у каждой пары разная прибыль , каждая должна взять по 100(это если Вы множеством пар работаете,- на каждую пару, нужно отдельно устанавливать Утилиту)
inputdouble TargetTakeProfit = 1000000; // Прибыль на паре в валюте
Важно!!! правильно настроить , открытии лота (До убытка валюте)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ещё одну функцию добавил. Надо только проверить в реальном времени в терминале.
эта версия так - В Тестере Играться
Не плохая функция - я Вам скажу. Туда сюда, берёт свою прибыль и в ус, не дует
только вот код - надо до ума довести- вроде так всё отлично работает
Испытал сейчас на реальном счёте - хотел небольшую прибыль, от двух открытых позиции, вписал в настройках 160 , думал закроет от самой большой минусовой позиции, но нет зараза, закрыла
у которой профит стал 160 и закрыло обе позиции, и я лопух . Оказывается, нужно вести расчёт от первой открытой позиции, прибавляя минусовую
#property version "1.017"
на пятый день - только до тюкался, как правильно эту функцию прописать. Теперь закрывает по общей прибыли на одной паре всех Buy или Sell
Не плохая функция - я Вам скажу. Туда сюда, берёт свою прибыль и в ус, не дует
только вот код - надо до ума довести- вроде так всё отлично работает
Не удается создать код что бы эта функция работала В одном терминале. Хочу попробовать на 4 терминалах, не знаю пока, что из этого получится
Не удается создать код что бы эта функция работала В одном терминале. Хочу попробовать на 4 терминалах, не знаю пока, что из этого получится
Все эти 4 терминала - не какого результата, не дало. И вообще, эта функция от Убытка - мне не по силам, в написание кода.
Но у меня, давно создана такая логика работы, только с помощью Горизонтальных линии. Осталось придумать, что бы умножался лот
Устанавливаем Горизонтальную линию с верху
Устанавливаем Горизонтальную линию с низу
как цена коснётся этих линии, откроется позиция и выставит Горизонтальные линии
вот эти -
и от этих Горизонтальных линии откроет позицию и выставит первые Горизонтальные линии - и так будет повторятся, пока цена не сможет их достать
рисунок 2
Вот закрыла - заданную в настройках, ПРИБЫЛЬ
---------------------------------------------
как на паре достигнет прибыль 200 - закроет позицию
достигла 200 и закрыла все позиции на buy или sell - ведь можно открывать в обе стороны и каждая сторона имеет свою, прибыль или убыток
- теперь как достанет Горизонтальную линию, откроет позицию - но можно вручную их подвинуть
Функция увеличивает лот , от убытка .
спасибо этому человеку https://www.mql5.com/ru/forum/107406#comment_3018721
Igor Kim
#property version "1.018"
добавил возможность , увеличивать лот от Убытка в Валюте
--------------------------------
увеличение лота в действии. Надо только подобрать сумму в настройках, 4 уровня - последняя сумма, больше 2000 будет открывать лот 0.08
на картинке от этих линии, открывается позиция, а также можно в настройках задать трал этих линии
в место 0 задать растояние = 0; // Obj: Trailing Stop (distance from price to object, in pips)
----------------------------ВАЖНО!
с тралом - нужно рассчитать так, что бы, когда сработал сигнал , линия отпрыгнула дальше от бара, а то будет срабатывать сигнал повторно
Вот ситуация - когда тралилась Горизонтальная линия и при срабатывании команды отпрыгивала на тот же бар
----------------------------------
Что бы Горизонтальная линия не повторялась установите 0 = 20; // Obj: Шаг сетки, пунктов("0" -> false)
при нуле, она выполнит команду и удалится
Функция увеличивает лот , от убытка .
спасибо этому человеку https://www.mql5.com/ru/forum/107406#comment_3018721
Igor Kim
Про тестировал сегодня эту функцию с функцией дублирование Горизонтальных линии на убыток( как цена пошла не в ту сторону, встречает на пути горизонтальную линию, от неё открывается позиция и линия отпрыгивает ещё дальше, на заданное расстояние, убыток увеличивается и при следующем касании горизонтальной линии, лот откроется с увеличением).
Я офигел. - эта логика, вытаскивает всё в плюс. Интересно! за сколько можно продать, такое чудо?!
----------------------------------------- вот еще пример - цена идёт против меня . это первая картинка, вторую выставлю, как от работает свою задачу
Что бы понять, как это всё работает
В Утилите есть кнопки(BUY и SELL), они выполняют все команды, что и Горизонтальные линии - можно просто в тестере просмотреть как это работает .
настройка Кнопок ----------------
настройка Горизонтальных линии --------------------
Здесь команды, которые могут выполнятся --------------------------------
Функция прибыль
------------ Прибыль не общая - у BUY своя прибыль у SELL своя (например у вас открыто две позиции одна в buy а другая в sell в настройках Вы хотите заработать 100, так вот, Пока каждая из них не возьмёт по 100.) ещё и у каждой пары разная прибыль , каждая должна взять по 100(это если Вы множеством пар работаете,- на каждую пару, нужно отдельно устанавливать Утилиту)
Важно!!! правильно настроить , открытии лота (До убытка валюте)На паре есть два убытка - Общий убыток и ( buy и sell у каждого из них, свой убыток )
Вот, расчёт ведётся в убытке от buy свой убыток у sell свой
Немного исправил - что бы Горизонтальная линия, быстрее реагировала на сигнал.
была ситуация - цена коснулась, пересекла Горизонтальную линию, но не сработала.
#property version "1.019"
Испытываю новую функцию . Календарь даёт сигнал, от сигнала можно выбрать команду
ещё надо продумать, какие ещё команды, нужны для календаря.
вот такие уже есть
на картинке установил Утилиту, это рисунок 1. второй будет с выполненной командой (Горизонтальные линии на заданном расстоянии)