как вписать условие: если стоп лосс то перевернуть позицию?? - Программирование на языке MQL (Meta Quotes Language) | MMGP
Присоединяйтесь к нашему инвестиционному форуму, на котором уже 434,875 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение -  .
Вход через:  
Обсуждение синтаксиса, функций и процедур языка MQL. Обмен опытом, своими фрагментами кода. Оптимизация кода. Предложения и заказы на разработку советников.
Важная информация
Есть опыт работы с криптовалютами? Заведи Крипто-Блог и заработай на нём!
Торгуешь криптовалютой? Оставь свой отзыв о бирже!
Разбираешься в криптовалюте? Прими участие в акции Крипторайтер 2.0 (2-10 поинтов за 1000 символов)
Изменения в акции "Оплата за сообщения".
Как на одной публикации заработать $100
Ответить
 
Первый пост Опции темы
Сообщения прочитаны и/или просмотрены Сегодня, 05:56
Старый 09.12.2013, 12:17
#1
Интересующийся
 
Инвестирую в: Форекс
Регистрация: 15.11.2013
Сообщений: 15
Благодарностей: 0
УГ: 0
КП: 0.000
как вписать условие: если стоп лосс то перевернуть позицию??

Собственно тема.. Хочу что б после стоп лосса мой робот открывал противоположную позицию... Помогите с кодом.
Гарэгин Диноян вне форума  
Старый 10.12.2013, 15:07
#2
bvn
Заблокированный
 
Имя: Виталий
Пол: Мужской
Адрес: Полтава, Украина
Инвестирую в: Форекс
Регистрация: 17.06.2008
Сообщений: 7,352
Благодарностей: 3,603
УГ: 0
КП: 0.000
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от Гарэгин Диноян Посмотреть сообщение
Собственно тема.. Хочу что б после стоп лосса мой робот открывал противоположную позицию... Помогите с кодом.
Код писать не буду, но могу попытаться прояснить логику.

Советник по-идее должен отслеживать текущую сделку (хранить ее тикет в переменной) SELECT_BY_TICKET и как только у нее появится время заркрытия проверить, OrderProfit() < 0 или нет.
Баннер: {{ slide.title }}
bvn вне форума  
Старый 10.12.2013, 15:10
#3
Интересующийся
 
Пол: Мужской
Адрес: Омск
Инвестирую в: HYIP
Регистрация: 23.12.2011
Сообщений: 30
Благодарностей: 8
УГ: 0
КП: 0.000
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Можно поставить отложенный ордер BUY_LIMIT или SELL_LIMIT по цене StopLoss и советник не нужен
EvgeTrofi вне форума  
Сказали спасибо:
bvn (10.12.2013)
Старый 10.12.2013, 15:28
#4
bvn
Заблокированный
 
Имя: Виталий
Пол: Мужской
Адрес: Полтава, Украина
Инвестирую в: Форекс
Регистрация: 17.06.2008
Сообщений: 7,352
Благодарностей: 3,603
УГ: 0
КП: 0.000
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от EvgeTrofi Посмотреть сообщение
Можно поставить отложенный ордер BUY_LIMIT или SELL_LIMIT по цене StopLoss и советник не нужен
Тоже вариант, но в исходном варианте речь идет уже о роботе, который, вероятно, и открывает указанную сделку. Однако, лимит-ордер может этот же робот и выставлять.
Баннер: {{ slide.title }}
bvn вне форума  
Старый 10.12.2013, 15:30
#5
Мастер
 
Имя: Влад
Пол: Мужской
Возраст: 41
Адрес: Россия
Инвестирую в: Свой бизнес
Регистрация: 10.04.2011
Сообщений: 2,212
Благодарностей: 1,896
УГ: 0
КП: 0.565
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от Гарэгин Диноян Посмотреть сообщение
Собственно тема.. Хочу что б после стоп лосса мой робот открывал противоположную позицию... Помогите с кодом.
Здравствуйте.
Мне на блоге задавали вопрос, который включает и Ваш. Вот код. Выцепите из него блок работы с историей закрытых ордеров:
PHP код:
//+------------------------------------------------------------------+
//|                                         Martingale - classic.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 21;
extern string s3 "Уровень тейк-профита, пунктов";
extern double takeprofit 84;
extern string s4 "Уникальная метка для ордеров, открываемых только этим советником";
extern double MagicNumber 600;
extern string s5 "Максимальное отклонение от запрошенной цены, пунктов";
extern double slip 3;
 
int init()
{
   return(
0);
}
 
int deinit()
{
   return(
0);
}
 
int start()

  
//инициализация параметров
  
bool flag false;
  
int ticket 0;
  
double lots Lot;
  
int old_order_type = -1;
 
  
//ищем среди всех открытых ордеров открытый советником ордер 
  
RefreshRates();
  for ( 
int trade OrdersTotal() - 1trade >= 0trade-- ) 
  {
      
//проверяем есть ли среди всех открытых ордеров именно тот ордер, который открыт данным советником.
      //ВНИМАНИЕ! MagicNumber - должен быть свой для каждого советника!
      
if ( OrderSelect(tradeSELECT_BY_POSMODE_TRADES) && (OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
      {
            
flag true//значение флага наличия ордера - ордер открыт
            
break; //закончим поиск
      
}        
  }
  
//ордер советником открыт - выходим без действий, ожидая его закрытия по тейк профиту или стоп лоссу.
  
if ( flag )
  {
      return (
0);
  }
  
//нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  
flag false;
  for ( 
trade OrdersHistoryTotal() - 1trade >= 0trade-- ) 
  {
     if ( 
OrderSelect(tradeSELECT_BY_POSMODE_HISTORY) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         if ( 
OrderProfit()>=lots Lot;   //последний закрытый советником ордер был прибыльным или безубыточным, значит, следующий ордер открываем с начальным объемом
                    
else lots 2*OrderLots(); //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем удвоенным объемом
                
old_order_type OrderType(); //запоминаем тип ордера - прокупка или продажа.
                
flag true;
                break; 
//прекращаем поиск
     
}
  }
  if ( !
flag 
      
old_order_type OP_BUY//в истории нет ордеров открытых этим советников, значит, стартуем с покупок
  //если раньше покупали, то теперь продаем
  
if ( old_order_type == OP_BUY )
  {
      
ticket OrderSend(Symbol(), OP_SELLNormalizeDouble(lots,2),  NormalizeDouble(BidDigits), slipNormalizeDouble(Ask+stoploss*PointDigits), NormalizeDouble(Ask-takeprofit*PointDigits), "Martingale-Sell"MagicNumber0Red);
      
Sleep (1000); //задержка в одну секунду для обрабатки запроса торговым сервером брокера
      
return (0);  
  }
  
//если раньше продавали, то теперь покупаем
  
if ( old_order_type == OP_SELL )
  {
      
ticket OrderSend(Symbol(), OP_BUYNormalizeDouble(lots,2), NormalizeDouble(AskDigits), slipNormalizeDouble(Bid-stoploss*PointDigits), NormalizeDouble(Bid+takeprofit*PointDigits), "Martingale-Buy"MagicNumber0Green);
      
Sleep (1000); //задержка в одну секунду для обрабатки запроса торговым сервером брокера
      
return (0);  
  }               
  return (
0); 
Думаю, это то, что Вы искали (в смысле мартингейл)

Если захотите встроенный РМ, а не постоянный объем, то объявите дополнительную переменную
PHP код:
extern int Risk=1//риск на сделку, % 
в самом начале функции start() напишите:
PHP код:
Lot NormalizeDouble (Risk*AccountEquity()/1000002); //расчет по средствам 
if ( Lot<0.01 Lot 0.01

Последний раз редактировалось Владислав Сергеев; 10.12.2013 в 17:26.
Владислав Сергеев вне форума  
Старый 11.12.2013, 13:57
#6
Интересующийся
 
Инвестирую в: Форекс
Регистрация: 15.11.2013
Сообщений: 15
Благодарностей: 0
УГ: 0
КП: 0.000
Автор темы Re: как вписать условие: если стоп лосс то перевернуть позицию??

Мой робот при запуске покупал 0.01 евро/бакса со стопом 10п. и профитом 50п. После срабатывания стопа или профита опять покупал с теми же параметрами:

// Внешние параметры советника
extern int stoploss=100;
extern int takeprofit=500;
extern double lots=0.01;

void start() // Функция start советника вызывается терминалом при приходе каждого нового тика от сервера
{
if(OrdersTotal()==0) // Если ордеров нет (либо это первый запуск, либо предыдущий ордер только что закрылся по СЛ или ТП)
{
OrderSend(Symbol(), OP_BUY, lots, Ask, 100, Ask-stoploss*Point, Ask+takeprofit*Point);
/*
Отправка ордера
На инструменте Symbol
Тип ордера - покупка (OP_BUY)
Лотность ордера - внешний параметр lots
Цена, по которой покупаем - текущая цена Ask
Максимально допустимое проскальзывание - 100 пипсов
Стоплосс ниже цены покупки (Ask) на stoploss (внешний параметр) пунктов (Point)
Тейкпрофит выше цены покупки (Ask) на takeprofit (внешний параметр) пунктов (Point)
*/
}
}

Потом я решил добавить условие что б при стоп лоссе позиция переворачивалась… Мне подсказали что Для этого нужно:
1. Найти последний закрытый ордер.
2. Если найден, выбрать его и извлечь параметры, а именно тип и прибыль.
3. Если есть параметры и прибыль ордера отрицательная, задать тип открываемого ордера противоположный типу закрытого.

int OrdType=OP_BUY;
//Если найден последний исторический ордер
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
//Если прибыль его отрицательная и ордер Buy типа
if(OrderProfit()<0 && OrderType()==OP_BUY)OrdType=OP_SELL;
}

Дальше, при открытии указывать тип не OP_BUY, а переменную OrdType
Как это сделать что б работало хотя бы на стандартных счетах??
Гарэгин Диноян вне форума  
Старый 11.12.2013, 20:16
#7
Мастер
 
Имя: Влад
Пол: Мужской
Возраст: 41
Адрес: Россия
Инвестирую в: Свой бизнес
Регистрация: 10.04.2011
Сообщений: 2,212
Благодарностей: 1,896
УГ: 0
КП: 0.565
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от Гарэгин Диноян Посмотреть сообщение
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
Данная запись некорректна. Представьте, что на счете работают сразу несколько советников или дополнительно "приторговываете ручками".
Поэтому последний ордер в массиве закрытых ордеров надо искать именно тот, который был открыт данным советником, т.е. условие поиска должно иметь вид:
PHP код:
flag false;
  for ( 
trade OrdersHistoryTotal() - 1trade >= 0trade-- ) 
  {
     if ( 
OrderSelect(tradeSELECT_BY_POSMODE_HISTORY) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         if ( 
OrderProfit()>=lots Lot;   //последний закрытый советником ордер был прибыльным или безубыточным, значит, следующий ордер открываем с начальным объемом
                    
else lots 2*OrderLots(); //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем удвоенным объемом
                
old_order_type OrderType(); //запоминаем тип ордера - прокупка или продажа.
                
flag true;
                break; 
//прекращаем поиск
     
}
  } 
То есть мы ищем именно тот последний ордер, который был открыт, а впоследствии закрыт (OrderSelect(trade, SELECT_BY_POS, MODE_HISTORY) именно данным советником (OrderMagicNumber() == MagicNumber), именно по данному инструменту (OrderSymbol() == Symbol())
Цитата:
OrderSend(Symbol(), OP_BUY, lots, Ask, 100, Ask-stoploss*Point, Ask+takeprofit*Point);
Данный код также неправильный. Уровни стоп лосс и тейк профит в Вашем случае при расчетах необходимо округлять на количество цифр после десятичной точки в цене текущего инструмента. Следующая ошибка: ордера открываются на покупку по цене Ask, а на продажу по цене Bid. Соответственно, уровень стоп лосс и тейк профит для первого случая рассчитываются от цены Bid, а для второго от цены Ask:
Т.е. эта строка в идеале должна иметь вид:
для покупок
Цитата:
OrderSend(Symbol(), OP_BUY, lots, Ask, 100, NormalizeDouble(Bid-stoploss*Point, Digits), NormalizeDouble(Bid+takeprofit*Point, Digits));
для продаж
Цитата:
OrderSend(Symbol(), OP_SELL, lots, Bid, 100, NormalizeDouble(Ask+stoploss*Point, Digits), NormalizeDouble(Ask-takeprofit*Point, Digits));
Ну, и проскальзывание в 100 пипсов - это, по-моему, чрезмерно (да еще при таких параметрах stoploss=100 takeprofit=500). Вы на новостях что ли торговать собрались с таким проскальзыванием (допустимое отклонение от запрошенной цены)?

Последний раз редактировалось Владислав Сергеев; 11.12.2013 в 21:03.
Владислав Сергеев вне форума  
Старый 11.12.2013, 23:10
#8
Интересующийся
 
Инвестирую в: Форекс
Регистрация: 15.11.2013
Сообщений: 15
Благодарностей: 0
УГ: 0
КП: 0.000
Автор темы Re: как вписать условие: если стоп лосс то перевернуть позицию??

Довайте пока без magic... А то у меня и так мозг взрывается от натуги. С проскальзыванием тоже потом разберусь.. Как мне до кучи собрать код чтоб он при запуске покупал 0.01 лот. а после срабатывания стопа переворачивался?
Гарэгин Диноян вне форума  
Старый 12.12.2013, 11:05
#9
Мастер
 
Имя: Влад
Пол: Мужской
Возраст: 41
Адрес: Россия
Инвестирую в: Свой бизнес
Регистрация: 10.04.2011
Сообщений: 2,212
Благодарностей: 1,896
УГ: 0
КП: 0.565
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Вот Вам сова. Но вообще, нужно и самому хоть как-то изучать программирование, если, действительно, хотите вникнуть.
PHP код:
//+------------------------------------------------------------------+
//|                                     Для Гарэгин Диноян(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() - 1trade >= 0trade-- ) 
  {
      
//проверяем есть ли среди всех открытых ордеров именно тот ордер, который открыт данным советником.
      
if ( OrderSelect(tradeSELECT_BY_POSMODE_TRADES) && (OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
      {
          
//если есть незакрытый ордер - выходим
          
return (0);        
      }
  }
  
//нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  
for ( trade OrdersHistoryTotal() - 1trade >= 0trade-- ) 
  {
     if ( 
OrderSelect(tradeSELECT_BY_POSMODE_HISTORY) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         
old_order_type OrderType();
         if ( 
OrderProfit()<//последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         
{
                break; 
//прекращаем поиск
         
}
     }
  }
  
//если раньше покупали, то теперь продаем
  
if ( old_order_type == OP_BUY )
  {
      
ticket OrderSend(Symbol(), OP_SELLLot,  NormalizeDouble(BidDigits), slipNormalizeDouble(Ask+stoploss*PointDigits), NormalizeDouble(Ask-takeprofit*PointDigits), "Martingale-Sell"MagicNumber0Red);
      
Sleep (2000); //задержка в 2 секунды для обработки запроса торговым сервером брокера
      
return (0);  
  }
  
//если раньше продавали, то теперь покупаем
  
if ( old_order_type == OP_SELL )
  {
      
ticket OrderSend(Symbol(), OP_BUYLotNormalizeDouble(AskDigits), slipNormalizeDouble(Bid-stoploss*PointDigits), NormalizeDouble(Bid+takeprofit*PointDigits), "Martingale-Buy"MagicNumber0Green);
      
Sleep (2000); //задержка в 2 секунды для обработки запроса торговым сервером брокера
      
return (0);  
  }               

Алгоритм ее работы:
1. Стартует с покупок
2. Если ловит стоп, то продает.
3. После профита оставляет позицию неизменной. Теоретически, сова может зарабатывать, дожидаясь, сливая, попутного тренда.
Советник будет, скорее всего, сливатором, за счет того, что кроме параметров профита и лоса зависим от точки старта. Пробуйте оптимизировать на истории, а потом запустите с оптимальными параметрами, сдвинув, например, дату старта на неделю-две, месяц, год внутрь самой истории. Увидите совсем другой результат (сливной). То есть проблема этой совы очевидна.

Последний раз редактировалось Владислав Сергеев; 12.12.2013 в 11:51.
Владислав Сергеев вне форума  
Старый 12.12.2013, 11:41
#10
Топ Мастер
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 04.05.2010
Сообщений: 5,685
Благодарностей: 1,654
УГ: 2
КП: 0.156
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

На каждом тике проверяем, если открытых позиций нет и последняя сделка в истории была закрыта по стоп-лоссу, то открываем что надо
capitalistas вне форума  
Старый 12.12.2013, 14:07
#11
Интересующийся
 
Инвестирую в: Форекс
Регистрация: 15.11.2013
Сообщений: 15
Благодарностей: 0
УГ: 0
КП: 0.000
Автор темы Re: как вписать условие: если стоп лосс то перевернуть позицию??

Благодарю!!! Пашет!!! Он даже на ECN счетах пашет...
Гарэгин Диноян вне форума  
Старый 12.12.2013, 15:00
#12
Мастер
 
Имя: Влад
Пол: Мужской
Возраст: 41
Адрес: Россия
Инвестирую в: Свой бизнес
Регистрация: 10.04.2011
Сообщений: 2,212
Благодарностей: 1,896
УГ: 0
КП: 0.565
награды Волшебный горшочек 
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от Гарэгин Диноян Посмотреть сообщение
Благодарю!!! Пашет!!! Он даже на ECN счетах пашет...
А в чем радость-то? Это ж потенциальный сливатор. Или вход у Вас идет по какой-либо системе?
Владислав Сергеев вне форума  
Старый 24.02.2014, 21:38
#13
 
Пол: Мужской
Инвестирую в: Форекс
Регистрация: 24.02.2014
Сообщений: 1
Благодарностей: 0
УГ: 0
КП: 0.000
Re: как вписать условие: если стоп лосс то перевернуть позицию??

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

добавлено через 5 минут
Вот наброски ))):

extern double Lots = 0.1;
extern int Magic = 345;
extern int Slippage = 5;
extern int StopLoss = 40;
extern int TakeProfit = 20;

extern int MaPeriod = 20; // Переменные Период усреднения для вычисления индикатора
extern int MaShift = 1; // Переменные Сдвиг индикатора относительно ценового графика.
bool flag = false;
int old_order_type = -1;

double maprice, SL, TP;
int tameprev;

int init()
{
if(Digits == 3 || Digits == 5)
{
StopLoss *= 10;
Slippage *= 10;
TakeProfit *= 10;
}
return(0);
}

int deinit()
{

return(0);
}

int start()
{




if(tameprev == Time[0]) return(0);
tameprev = Time[0];



maprice = iMA(Symbol(), 0, MaPeriod, MaShift, MODE_SMMA, PRICE_CLOSE, 1);

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);
TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);
if(CountBuy() + CountSell() == 0 && Ask > maprice)
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, "Покупка", Magic, 0, Red);

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);
TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);
if(CountBuy() + CountSell() == 0 && Bid < maprice)
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, "Продажа", Magic, 0, Blue);




return (0);

}



//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
count++;
}
}

return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
count++;
}
}

return(count);
}
Баннер: {{ slide.title }}

Последний раз редактировалось sergey19898; 24.02.2014 в 21:43. Причина: Добавлено сообщение
sergey19898 вне форума  
Старый 06.04.2014, 00:28
#14
Интересующийся
 
Пол: Мужской
Регистрация: 23.01.2011
Сообщений: 17
Благодарностей: 2
УГ: 0
КП: 0.000
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Цитата:
Сообщение от sergey19898 Посмотреть сообщение
Добрый вечер, подскажите пожалуйста, как проделать примерно тоже самое, но с добавлением индикатора, а то не могу разобрать, вставляю индикатор и тогда советник работает не так как хотел...и есть еще одна проблема в выложенном здесь советнике, он с каждым стоплоссом увеличивает лот, и потом его не понижает, а только удваивает, пока полностью не сольет средства, заранее спасибо!

добавлено через 5 минут
Вот наброски ))):

extern double Lots = 0.1;
extern int Magic = 345;
extern int Slippage = 5;
extern int StopLoss = 40;
extern int TakeProfit = 20;

extern int MaPeriod = 20; // Переменные Период усреднения для вычисления индикатора
extern int MaShift = 1; // Переменные Сдвиг индикатора относительно ценового графика.
bool flag = false;
int old_order_type = -1;

double maprice, SL, TP;
int tameprev;

int init()
{
if(Digits == 3 || Digits == 5)
{
StopLoss *= 10;
Slippage *= 10;
TakeProfit *= 10;
}
return(0);
}

int deinit()
{

return(0);
}

int start()
{




if(tameprev == Time[0]) return(0);
tameprev = Time[0];



maprice = iMA(Symbol(), 0, MaPeriod, MaShift, MODE_SMMA, PRICE_CLOSE, 1);

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);
TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);
if(CountBuy() + CountSell() == 0 && Ask > maprice)
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, "Покупка", Magic, 0, Red);

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);
TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);
if(CountBuy() + CountSell() == 0 && Bid < maprice)
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, "Продажа", Magic, 0, Blue);




return (0);

}



//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
count++;
}
}

return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
count++;
}
}

return(count);
}
Здесь нет удвоения
__________________

Бонус сразу на ваш WMZ - 10$!!! Инфо в личке
luxor вне форума  
Старый 27.11.2015, 17:22
#15
Интересующийся
 
Пол: Женский
Возраст: 49
Инвестирую в: Свой бизнес
Регистрация: 08.04.2010
Сообщений: 99
Благодарностей: 13
УГ: 0
КП: 0.026
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Можно воспользоваться AutoGraf 4.

В нём уже реализован инструмент Торговый разворот - автоматически открывает противоположный ордер при закрытии ордера по стоп-лосс (или тейк-профит).
Также есть инструмент Торговый разворот по цене - автоматически закрывает ордер и открывает противоположный, если рынок достигает заданной цены.

Инструменты очень удобны в работе. На сайте есть подробное описание с картинками и видео.



Например, на рисунке показан инструмент "Торговый разворот по тейк-профит", установленный на ордер Sell.
Параметры инструмента:

Лоты = 1.3
SL = 10 (стоп-лосс)
TP = 5 (тейк-профит)

Если ордер Sell закроется по тейк-профит - автоматически откроется противоположный ордер Buy на 1.3 лота со стоп-лосс (на расстоянии 10 пунктов от цены Bid) и тейк-профит (на расстоянии 5 пунктов от цены Bid).
Параметры SL и TP можно установить равными нулю, тогда противоположный ордер откроется без стопов.
Миниатюры
Нажмите на изображение для увеличения
Название: About_turn_sl_tp.png
Просмотров: 70
Размер:	3.9 Кб
ID:	143284  
Alyona_AG вне форума  
Старый 29.11.2015, 01:18
#16
Интересующийся
 
Пол: Мужской
Инвестирую в: Форекс
Регистрация: 28.11.2015
Сообщений: 4
Благодарностей: 0
УГ: 0
КП: 0.000
Re: как вписать условие: если стоп лосс то перевернуть позицию??

Хорошая штука AutoGraf 4.
coder777 вне форума  
Ответить
Войдите, чтобы оставить комментарий.
Сообщения прочитаны и/или просмотрены Сегодня, 05:56
Опции темы

Быстрый переход
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условие добавления сайтов в данный раздел mysilver Оценка сайта! 30 25.04.2016 01:24
Автоматическая система выставления стопа и тейк профита после входа в позицию! Avreh Программное обеспечение 0 05.11.2013 01:57
Стоп - лосс dimamal Forex: общий форум 430 25.06.2013 15:42
Webmoney обозначила свою позицию по поводу российского закона о НПС mysilver WebMoney 12 04.10.2011 22:35


Случайные темы
Аватар Drum13
США не дадут контролировать России критическими энергетическими активами
От Drum13 в разделе «Новости в мире финансов и инвестиций»
Аватар dengov
Как заработать 420 млн рублей за 48 часов
От dengov в разделе «Политика и экономика»
Аватар Oliver Frank
Альфа-банк прогнозирует укрепление доллара до 80 рублей
От Oliver Frank в разделе «Новости в мире финансов и инвестиций»
Аватар ttxz
Nvidia представила первый в мире суперкомпьютер для беспилотных машин
От ttxz в разделе «Новости технологий и интернета»
Аватара нет
Лучший почтовый спонсор рунета!
От Dimitry в разделе «Список проблемных/неактивных/закрытых программ»
Аватара нет
На производителей хлеба распространят патентную систему налогообложения
От Wind of freedom в разделе «Новости в мире финансов и инвестиций»
.     
Пользователей
434,875
Тем
504,678
Сообщений
12,669,776

mmgp.telegram