- Предлагаю функцию реверса ордеров, для сливающих советников.
- Советники: WPR EA
- Помогите вставить в код корректный стоп-лосс, заранее Спасибо :-)
Собственно тема.. Хочу что б после стоп лосса мой робот открывал противоположную позицию... Помогите с кодом.
Проще поставить вместо стоплосса стоповую отложку с двойным объёмом. Тогда поза сама перевернётся при срабатывании отложки.
В случае, когда приходится платить комиссию брокеру за сделку и эта комиссия снимается при открытии позиии, такой подход удвоит её [комиссию].
Проще поставить вместо стоплосса стоповую отложку с двойным объёмом. Тогда поза сама перевернётся при срабатывании отложки.
А при чём тут двойной объём?

- www.mql5.com
на кой мне двойной лот с отложеным ордером? и что значит минус спрэд? а если он плавающий ??
Как мне до кучи собрать код чтоб он при запуске покупал 0.01 лот. а после срабатывания стопа переворачивался?
на кой мне двойной лот с отложеным ордером? и что значит минус спрэд? а если он плавающий ??
Как мне до кучи собрать код чтоб он при запуске покупал 0.01 лот. а после срабатывания стопа переворачивался?
Стоп - это на самом деле отложенный ордер того же объёма и противоположного направления, просто от вас это скрывают :). А если объём будет двойной, то половина сработает как стоп и останется как раз противоположный ордер того же объёма. Если это не переворот, то что это по вашему? Вы может быть ещё не знаете что МТ5 работает с нетто-позицией?
Спред тут ни при чём, потому что и бай закрывается и селл открывается по биду (или оба по аску, если наоборот). Насчёт комиссии - не уверен, что она берётся за установку отложенного ордера. А открытых будет ровно столько же.
Другое дело если вам нужно переворачиваться не в момент стопа, а позже.
Проще поставить вместо стоплосса стоповую отложку с двойным объёмом. Тогда поза сама перевернётся при срабатывании отложки.
На самом деле это конечно не ответ а замена исходного вопроса на вопрос "как вписать условие: ставить отложку если отложки нет" :)
Исходный вариант будет экономнее по коду.
kpax , попробуйте так:
Когда ставите ордер первый раз, ставьте и флаг направления. Затем, если ордера нет, переворачиваете флаг и ставите ордер по новому значению флага.
Но при таком подходе проскальзывания будут больше.
на кой мне двойной лот с отложеным ордером? и что значит минус спрэд? а если он плавающий ??
Как мне до кучи собрать код чтоб он при запуске покупал 0.01 лот. а после срабатывания стопа переворачивался?
//| Для Гарэгин Диноян(mmgp).mq4 |
//| Copyright © 2013, MoneyInNetwork.ru |
//| http://moneyinnetwork.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, MoneyInNetwork.ru"
#property link "http://moneyinnetwork.ru"
extern string s1 = "Объем для первой сделки серии, лот";
extern double Lot = 0.01;
extern string s2 = "Уровень стоп-лосса, пипсов";
extern double stoploss = 100;
extern string s3 = "Уровень тейк-профита, пипсов";
extern double takeprofit = 500;
extern string s4 = "Уникальная метка для ордеров, открываемых только этим советником";
extern double MagicNumber = 600;
extern string s5 = "Максимальное отклонение от запрошенной цены, пипсов";
extern double slip = 15;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
//инициализация параметров
int ticket = 0;
int old_order_type = OP_SELL;
//ищем среди всех открытых ордеров открытый советником ордер
RefreshRates();
for ( int trade = OrdersTotal() - 1; trade >= 0; trade-- )
{
//проверяем есть ли среди всех открытых ордеров именно тот ордер, который открыт данным советником.
if ( OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) && (OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
{
//если есть незакрытый ордер - выходим
return (0);
}
}
//нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер
for ( trade = OrdersHistoryTotal() - 1; trade >= 0; trade-- )
{
if ( OrderSelect(trade, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
{
old_order_type = OrderType();
if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
{
break; //прекращаем поиск
}
}
}
//если раньше покупали, то теперь продаем
if ( old_order_type == OP_BUY )
{
ticket = OrderSend(Symbol(), OP_SELL, Lot, NormalizeDouble(Bid, Digits), slip, NormalizeDouble(Ask+stoploss*Point, Digits), NormalizeDouble(Ask-takeprofit*Point, Digits), "Martingale-Sell", MagicNumber, 0, Red);
Sleep (2000); //задержка в 2 секунды для обработки запроса торговым сервером брокера
return (0);
}
//если раньше продавали, то теперь покупаем
if ( old_order_type == OP_SELL )
{
ticket = OrderSend(Symbol(), OP_BUY, Lot, NormalizeDouble(Ask, Digits), slip, NormalizeDouble(Bid-stoploss*Point, Digits), NormalizeDouble(Bid+takeprofit*Point, Digits), "Martingale-Buy", MagicNumber, 0, Green);
Sleep (2000); //задержка в 2 секунды для обработки запроса торговым сервером брокера
return (0);
}
}

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования