Помощь по MACD

 
Советник хороший НО не ставит стопы и профиты!!!! Почему не ставятся не могу понять!
 
Сергей Дыбленко:
Советник хороший НО не ставит стопы и профиты!!!! Почему не ставятся не могу понять!

Пожалуйста вставьте код правильно - при помощи кнопки  Code или можно прикрепит файл к сообщения при помощи кнопки  Прикрепить файл.

 
//+-------------------------------------------------------------------------------------------------------------------+
//| Разработчик:   Андрей Минаев                                                                                      |
//| Советник:      MACD                                                                                               |
//| Почта:         minaev.work@mail.ru                                                                                |
//| Скайп:         live:minaev.work                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
#property copyright "Safe-Forex.ru"
#property link      "http://safe-forex.ru"
#property version   "1.0"
#property strict

input string             expSettings  = "";            // Настройки советника
input int                expMagic     = 123;           // Магик
input double             posVolume    = 0.01;           // Объем
input int                posProfit    = 23;            // Прибыль
input int                posLoss      = 0;            // Убыток

input string             indSettings  = "";            // Настройки индикатора MACD
input int                fastPeriod   = 12;            // Быстрое EMA
input int                slowPeriod   = 26;            // Медленное EMA
input int                signalPeriod = 9;             // MACD SMA
input ENUM_APPLIED_PRICE priceType    = PRICE_CLOSE;   // Тип цены

datetime newCandle;           // новая свеча
int      posTicket;           // тикет позиции
bool     permOpenBuy;         // true - разрешено открыть позицию на покупку
bool     permOpenSell;        // true - разрешено открыть позицию на продажу
bool     permSetOrdersStop;   // true - разрешено установить стоп ордера
//+-------------------------------------------------------------------------------------------------------------------+

void OnTick(void)
{
   //--- проверим наличие сигнала на новой свече
   if(newCandle != Time[0]) CheckSignalExist();
   newCandle = Time[0];
   //--- откроем позицию
   if(permOpenBuy)  OpenPosition(OP_BUY,  posVolume, Ask);
   if(permOpenSell) OpenPosition(OP_SELL, posVolume, Bid);
   //--- установим стоп ордера
   if(permSetOrdersStop) SetOrdersStop();
}
//+-------------------------------------------------------------------------------------------------------------------+
//| Функция устанавливает стоп ордера                                                                                 |
//+-------------------------------------------------------------------------------------------------------------------+
void SetOrdersStop(void)
{
   double oop = 0;
   double sl  = 0;
   double tp  = 0;
   //--- выберем позицию по тикету
   if(OrderSelect(posTicket, SELECT_BY_TICKET))
   {
      oop = OrderOpenPrice();
      //--- расчитаем цены установки стоп ордеров
      if(OrderType() == OP_BUY)
      {
         tp = oop + posProfit * _Point;
         sl = oop - posLoss   * _Point;
      }
      if(OrderType() == OP_SELL)
      {
         tp = oop + posProfit * _Point;
         sl = oop - posLoss   * _Point;
      }
      //--- модифицируем позицию
      if(OrderModify(posTicket, oop, sl, tp, 0)) permSetOrdersStop = false;   // запретим устанавливать стоп ордера
      else PrintFormat("Стоп ордера не установлены, тикет: %i, ошибка: %i", posTicket, GetLastError());
   }
   else PrintFormat("Позиция не выбрана, тикет: %i, ошибка: %i", posTicket, GetLastError());
}
//+-------------------------------------------------------------------------------------------------------------------+
//| Функция открывает позицию                                                                                         |
//+-------------------------------------------------------------------------------------------------------------------+
void OpenPosition(int type, double volume, double price)
{
   posTicket = OrderSend(_Symbol, type, volume, price, 0, 0, 0, "", expMagic, 0);
   
   if(posTicket > 0)
   {
      permSetOrdersStop = true;   // разрешим устанавливать стоп ордера
      
      if(type == OP_BUY)  permOpenBuy  = false;   // запретим открывать позицию на покупку
      if(type == OP_SELL) permOpenSell = false;   // запретим открывать позицию на продажу
   }
   if(posTicket < 0) PrintFormat("Позиция не открылась, ошибка: %i", GetLastError());
}
//+-------------------------------------------------------------------------------------------------------------------+
//| Функция проверяет наличие сигнала                                                                                 |
//+-------------------------------------------------------------------------------------------------------------------+
void CheckSignalExist(void)
{
   //--- получим значения индикатора
   double mainLine1 = iMACD(_Symbol, PERIOD_CURRENT, fastPeriod, slowPeriod, signalPeriod, priceType, MODE_MAIN, 1);
   double mainLine2 = iMACD(_Symbol, PERIOD_CURRENT, fastPeriod, slowPeriod, signalPeriod, priceType, MODE_MAIN, 2);
   
   if(mainLine1 > 0 && mainLine2 < 0) permOpenBuy  = true;   // разрешим открывать позицию на покупку
   if(mainLine1 < 0 && mainLine2 > 0) permOpenSell = true;   // разрешим открывать позицию на продажу
}
//+-------=============================================================================================
 
вот советник который мне оч нравиться НО он не ставит стопы и профиты!
 
Сергей Дыбленко:
вот советник который мне оч нравиться НО он не ставит стопы и профиты!

Знаки надо поменять и всё заработает

//+-------------------------------------------------------------------------------------------------------------------+
//| Функция устанавливает стоп ордера                                                                                 |
//+-------------------------------------------------------------------------------------------------------------------+
void SetOrdersStop(void)
{
   double oop = 0.0;
   double sl  = 0.0;
   double tp  = 0.0;
   //--- выберем позицию по тикету
   if(OrderSelect(posTicket, SELECT_BY_TICKET))
   {
      oop = OrderOpenPrice();
      //--- расчитаем цены установки стоп ордеров
      if(OrderType() == OP_BUY)
      {
         if(posProfit>0) tp = NormalizeDouble(oop + posProfit * _Point, Digits); 
         if(posLoss>0) sl = NormalizeDouble(oop - posLoss * _Point, Digits);
      }
      if(OrderType() == OP_SELL)
      {
         if(posProfit>0) tp = NormalizeDouble(oop - posProfit * _Point, Digits);
         if(posLoss>0) sl = NormalizeDouble(oop + posLoss * _Point, Digits);
      }
      //--- модифицируем позицию
      if(OrderModify(posTicket, oop, sl, tp, 0)) permSetOrdersStop = false;   // запретим устанавливать стоп ордера
      else PrintFormat("Стоп ордера не установлены, тикет: %i, ошибка: %i", posTicket, GetLastError());
   }
   else PrintFormat("Позиция не выбрана, тикет: %i, ошибка: %i", posTicket, GetLastError());
}