Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
вот и искусство локирование есть
http://dewinforex.com/ru/osnovy-foreks/iskusstvo-lokirovaniia-gramotno-vykhodim-iz-zamka.html
https://nalivator.com/articles/lokirovanie-pravilnyy-vykhod-iz-loka
Видите, это называется ЛОК, ЗАМОК, ... компенсаторный - это новое название старого ржавого велосипеда. Вы говорите о сохранности средств. А закрытие любого ордера приводит к изменению депозита, средства остаются без изменения. Проверьте на демо
Видите, это называется ЛОК, ЗАМОК, ... компенсаторный - это новое название старого ржавого велосипеда. Вы говорите о сохранности средств. А закрытие любого ордера приводит к изменению депозита, средства остаются без изменения. Проверьте на демо
депа имел в виду.
по прежнему - не вижу смысла закрываться в убыток. Лучше вообще не открываться, если не уверен в правильности прогноза. Иначе ничего не заработать, то плюс, то минус в итоге - ничего.
Видите, это называется ЛОК, ЗАМОК, ... компенсаторный - это новое название старого ржавого велосипеда. Вы говорите о сохранности средств. А закрытие любого ордера приводит к изменению депозита, средства остаются без изменения. Проверьте на демо
если владеете программированием на mql4 , то прошу помощи : как сравнить два открытых OrderTicket()?
OrderTicket() - это функция. Возвращает номер тикета текущего выбранного ордера. Ордер должен быть предварительно выбран (сделан текущим) с помощью функции OrderSelect(). Открыт может быть ордер. Что конкретно Вы хотите сравнить?
Если Вы хотите сравнить тикеты двух открытых ордеров, то нужно выбрать один ордер и запомнить его тикет Т1=OrderTicket() затем выбрать второй ордер и сравнить
if( Т1==OrderTicket() ) ...
OrderTicket() - это функция. Возвращает номер тикета текущего выбранного ордера. Ордер должен быть предварительно выбран (сделан текущим) с помощью функции OrderSelect(). Открыт может быть ордер. Что конкретно Вы хотите сравнить?
Если Вы хотите сравнить тикеты двух открытых ордеров, то нужно выбрать один ордер и запомнить его тикет Т1=OrderTicket() затем выбрать второй ордер и сравнить
if( Т1==OrderTicket() ) ...
нужно сравнить цену открытия двух ордеров (типа так: если уже существует ордер с ценой Р, то по этой цене нельзя больше открывать ордер), спасибо за подсказку. Чтот я сам не догадался что нужно запомнить тикет первого и сравнивать.
А вообще идея такова: если есть ордер у которого OrderProfit()<=OrderLots()*L*(-1) ( L - это задаваемый параметр убытка в пунктах), то открывает новый ордер противоположный другому. Эту функцию я написал.
Самая проблема у меня в том, что ордера открываются бесконечное количество раз, насколько позволяет депозит. А нужно так: если у убыточного ордера уже открыт противоположный, то больше не открывать. И если этот противоположный закрыть по безубытку (снова убыточный ордер остается без своего компенсаторного при условии, что у убыточного убыток больше либо равно OrderLots()*L*(-1) ) , то снова открыть противоположный. Вот с такой проблемой борюсь.
void CompensatorOrders()
{
int Type;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol())
double OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Type=OrderType();
{
if (Type==OP_BUY)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Bid<=OOP-L*Point)
if(OrderSend(Symbol(),OP_SELL,OrderLots(),Bid,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
if (Type==OP_SELL)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Ask>=OOP+L*Point)
if(OrderSend(Symbol(),OP_BUY,OrderLots(),Ask,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
}
}
}
}
А вообще идея такова: если есть ордер у которого OrderProfit()<=OrderLots()*L*(-1) ( L - это задаваемый параметр убытка в пунктах), то открывает новый ордер противоположный другому. Эту функцию я написал.
Самая проблема у меня в том, что ордера открываются бесконечное количество раз, насколько позволяет депозит. А нужно так: если у убыточного ордера уже открыт противоположный, то больше не открывать. И если этот противоположный закрыть по безубытку (снова убыточный ордер остается без своего компенсаторного при условии, что у убыточного убыток больше либо равно OrderLots()*L*(-1) ) , то снова открыть противоположный. Вот с такой проблемой борюсь.
void CompensatorOrders()
{
int Type;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol())
double OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Type=OrderType();
{
if (Type==OP_BUY)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Bid<=OOP-L*Point)
if(OrderSend(Symbol(),OP_SELL,OrderLots(),Bid,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
if (Type==OP_SELL)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Ask>=OOP+L*Point)
if(OrderSend(Symbol(),OP_BUY,OrderLots(),Ask,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
}
}
}
}
вместо (или вместе) с "Reverse" запишите в коммент тикет ордера который локируете. Тогда всё можно будет легко найти.
а вообще - это всё полумеры :-) надо в своём советнике поддерживать базу (список/таблицу) его ордеров. и в ней держать всю необходимую в работе информацию.
А вообще идея такова: если есть ордер у которого OrderProfit()<=OrderLots()*L*(-1) ( L - это задаваемый параметр убытка в пунктах), то открывает новый ордер противоположный другому. Эту функцию я написал.
Самая проблема у меня в том, что ордера открываются бесконечное количество раз, насколько позволяет депозит. А нужно так: если у убыточного ордера уже открыт противоположный, то больше не открывать. И если этот противоположный закрыть по безубытку (снова убыточный ордер остается без своего компенсаторного при условии, что у убыточного убыток больше либо равно OrderLots()*L*(-1) ) , то снова открыть противоположный. Вот с такой проблемой борюсь.
void CompensatorOrders()
{
int Type;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol())
double OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Type=OrderType();
{
if (Type==OP_BUY)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Bid<=OOP-L*Point)
if(OrderSend(Symbol(),OP_SELL,OrderLots(),Bid,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
if (Type==OP_SELL)
{
if (L!=0 && OrderProfit()<=OrderLots()*L*(-1)) // или так Ask>=OOP+L*Point)
if(OrderSend(Symbol(),OP_BUY,OrderLots(),Ask,7,0,0,"Reverse",0,0,CLR_NONE)) return;
}
}
}
}
}
OrderProfit()>=OrderLots()*L*(-1) больше либо равно
ой
OrderProfit()>=OrderLots()*L*(-1) больше либо равно
а ненене, в первый раз я правильно написал
OrderProfit()<=OrderLots()*L*(-1)