Спасите помогите кто может с советником SimpleMACD - страница 2

 
Talex:
Alexander1984:

Снова нужна помощь! Попробовал в писать в этот же советник StopLoss и TakeProfit, но не получается намудрил...:( В таком виде баиться не хочет, только продает и невидать ни ST TP.Вот такие вот дела. ...

Подскажите что не так

//---- input parameters
extern int       StopLoss=20;
extern int       TakeProfit=50;
 ............ 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 
    ... double StopLoss = 0;
    ... double TakeProfit = 0;
    ...}
//+----------------------------------------------------------------


Переменные объявлены сначала на глобальном уровне, а потом внутри ф-ции Start(), а это не правильно. Причем только для OP_SELL, для OP_BUY остаются переменные с типом int.
Ммммм, посмотрите сейчас так
//---- input parameters
extern int       MAFastPeriod=12;
extern int       MASlowPeriod=26;
extern int       MASignalPeriod=9;
extern int       MACDOpenLevel=5;
extern double    Lots=0.1;
extern int       StopLoss=20;
extern int       TakeProfit=50;
extern int       MagicNumber=501;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
bool CheckOrders(int Type)
{
 bool Result=True;
 for(int i=0;i>OrdersTotal();i++)
  if(OrderSelect(i,SELECT_BY_POS))
   if(OrderMagicNumber()==MagicNumber && OrderSymbol() == Symbol())
      if(OrderType()==Type)
        {
         if(Type==OP_BUY)
           if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
             Result=False;
         if(Type==OP_SELL)
           if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
             Result=False;
         } 
        else Result=False;
 return(Result); 
}
  
  
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
// Узнаем уровень стопов и спред
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
    
// Рассчитываем значения
    double MACD1 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_MAIN, 1);
    double MACD2 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_MAIN, 2);
    double Signal1 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 1);
    double Signal2 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 2);
    
// открытие позиции Buy
    if(MACD2 < Signal2 && MACD1 > Signal1 )
     if(CheckOrders(OP_SELL))
      {
       if(StopLoss <= StopLevel+Spread)
         StopLoss = 0;
        else
         StopLoss = Ask - StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         double TakeProfit = 0;
        else
         TakeProfit = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, StopLoss, TakeProfit,NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
// Открытие позиции Sell  
    if(MACD2 > Signal2 && MACD1 < Signal1 )
     if(CheckOrders(OP_BUY))
      {
      if(StopLoss <= StopLevel+Spread)
         StopLoss = 0;
        else
         StopLoss = Bid + StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         TakeProfit = 0;
        else
         TakeProfit = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, StopLoss, TakeProfit, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Нет не так.... Черт вообще все прлохо стало...
 
Alexander1984:
Нет не так.... Черт вообще все прлохо стало...
У Вас на протяжении всех постов в тексте прослеживаются сплошные ошибки, опИски, а может быть это опечатки! Не важно! Русский язык, как говорится, стерпит все, но если подобный подход к выражению собственных идей относится и к языку MQL4, то неудивительно, что Черт вообще все прлохо стало...

P.S. При написании постов можно использовать опцию
правка .
 
Alexander1984:
Ммммм, посмотрите сейчас так
//---- input parameters
extern int       MAFastPeriod=12;
extern int       MASlowPeriod=26;
extern int       MASignalPeriod=9;
extern int       MACDOpenLevel=5;
extern double    Lots=0.1;
extern int       StopLoss=20;
extern int       TakeProfit=50;
extern int       MagicNumber=501;
double    sl,tp;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
bool CheckOrders(int Type)
{
 bool Result=True;
 for(int i=0;i>OrdersTotal();i++)
  if(OrderSelect(i,SELECT_BY_POS))
   if(OrderMagicNumber()==MagicNumber && OrderSymbol() == Symbol())
      if(OrderType()==Type)
        {
         if(Type==OP_BUY)
           if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
             Result=False;
         if(Type==OP_SELL)
           if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
             Result=False;
         } 
        else Result=False;
 return(Result); 
}
  
  
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
// Узнаем уровень стопов и спред
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
    
// Рассчитываем значения
    double MACD1 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_MAIN, 1);
    double MACD2 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_MAIN, 2);
    double Signal1 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 1);
    double Signal2 = iMACD(NULL, 0, MAFastPeriod, MASlowPeriod, MASignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 2);
    
// открытие позиции Buy
    if(MACD2 < Signal2 && MACD1 > Signal1 )
     if(CheckOrders(OP_SELL))
      {
       if(StopLoss <= StopLevel+Spread)
         sl= 0;
        else
         sl = Ask - StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         tp= 0;
        else
         tp= Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 10, sl, tp,NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
// Открытие позиции Sell  
    if(MACD2 > Signal2 && MACD1 < Signal1 )
     if(CheckOrders(OP_BUY))
      {
      if(StopLoss <= StopLevel+Spread)
         sl= 0;
        else
         sl= Bid + StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         tp= 0;
        else
         tp= Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, sl, tp, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
//+------------------------------------------------------------------+


Попробуйте, так. Похоже исправить легче, чем все время пытаться навести на ошибки.
 
Спасибо огромное!!! не обращал внимание... Можно еще один вопрос? А что нужно исправить что бы было без TakeProfita?
 
Alexander1984:
Спасибо огромное!!! не обращал внимание... Можно еще один вопрос? А что нужно исправить что бы было без TakeProfita?


Убрать его нафиг. И еще читать справку, прежде чем спрашивать. А спрашивать только, то что непонятно.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Параметры:

symbol - Наименование финансового инструмента, с которым проводится торговая операция.
cmd - Торговая операция. Может быть любым из значений торговых операций.
volume - Количество лотов.
price - Цена открытия.
slippage - Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
stoploss - Цена закрытия позиции при достижении уровня убыточности (0 в случае отсутствия уровня убыточности).
takeprofit - Цена закрытия позиции при достижении уровня прибыльности (0 в случае отсутствия уровня прибыльности).
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.
magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.
expiration - Срок истечения отложенного ордера.
arrow_color - Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.

 
Talex:
Alexander1984:
Спасибо огромное!!! не обращал внимание... Можно еще один вопрос? А что нужно исправить что бы было без TakeProfita?


Убрать его нафиг. И еще читать справку, прежде чем спрашивать. А спрашивать только, то что непонятно.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Параметры:

symbol - Наименование финансового инструмента, с которым проводится торговая операция.
cmd - Торговая операция. Может быть любым из значений торговых операций.
volume - Количество лотов.
price - Цена открытия.
slippage - Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
stoploss - Цена закрытия позиции при достижении уровня убыточности (0 в случае отсутствия уровня убыточности).
takeprofit - Цена закрытия позиции при достижении уровня прибыльности (0 в случае отсутствия уровня прибыльности).
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.
magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.
expiration - Срок истечения отложенного ордера.
arrow_color - Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.

 
Alexander1984:
Talex:
Alexander1984:
Спасибо огромное!!! не обращал внимание... Можно еще один вопрос? А что нужно исправить что бы было без TakeProfita?


Убрать его нафиг. И еще читать справку, прежде чем спрашивать. А спрашивать только, то что непонятно.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Параметры:

symbol - Наименование финансового инструмента, с которым проводится торговая операция.
cmd - Торговая операция. Может быть любым из значений торговых операций.
volume - Количество лотов.
price - Цена открытия.
slippage - Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
stoploss - Цена закрытия позиции при достижении уровня убыточности (0 в случае отсутствия уровня убыточности).
takeprofit - Цена закрытия позиции при достижении уровня прибыльности (0 в случае отсутствия уровня прибыльности).
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.
magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.
expiration - Срок истечения отложенного ордера.
arrow_color - Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.


По индикатору MACD! Как сделать так чтобы вся гистограмма выше "0" красилась в синий, а ниже "0" в красный.

Файлы:
macd.mq4  3 kb
 
Есть такой в Code Base - 3ColorMACD
 
Alexander1984:

По индикатору MACD! Как сделать так чтобы вся гистограмма выше "0" красилась в синий, а ниже "0" в красный.

Надо использовать два буфера вместо одного. в 1-й буфер заносить значения > 0, в другой < 0.
Причина обращения: