igr-yard

 
Уровень 5

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Магик к советнику.

Уважаемые программисты! Прошу добавить к советнику магик. Чтобы работал только с ордерами с одинаковым магическим числом. Больше в советнике ничего менять не надо. Надеюсь это не сложная задача для вас. У самого не получается, пытался, не работает.e-Smart_Tralling.mq4 (5 Kb)
С уважением.
  • 0
  • Просмотров: 4524
  • 5 декабря 2015, 01:18
  • igr-yard
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Изменить советник по индикатору «BBands_Stop_v1»
03 декабря 2015
05 декабря 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (9)

+
0
Пожалуйста :) 
При магик = -1 будет работать со всеми магиками.
yadi.sk/d/lAQkL-iZkz8Hx
avatar

  2  ZhSerg Сообщений: 2 - ZhSerg

  • 5 декабря 2015, 05:41
+
0
забыл отписаться. не работает нормально ваш вариант советника. сам был свидетелем как советник тралил другие ордера, кроме указанного в советнике магика. видно где то ошибка.
avatar

  5  igr-yard Автор Сообщений: 77

  • 13 декабря 2015, 09:23
+
0
Добавил в советник магик и отключаемую торговую функцию.


extern int BuySell = 1; // 0-не торгуем. 1-бай. 2-селл.


Сейчас советник можно использовать для открытия ордеров и простестировать в тестере: www.opentraders.ru/downloads/954/




//+--------------------------------------------------------+
//|                  e-Smart_Tralling                      |
//+--------------------------------------------------------+

extern   bool     UseOneAccount=true;
extern   bool     UseCloseOneThird=true;
extern   double   Lots         = 1;
extern   int      StopLoss     = 500;
extern   int      TakeProfit   = 1500;
extern   int      Slippage     = 20;
extern   int      BuySell      = 1;     // 0-не торгуем. 1-бай. 2-селл.
extern   int      Magic        = 123;
extern   int      LevelProfit1 = 200;
extern   int      LevelMoving1 = 10;
extern   int      LevelProfit2 = 350;
extern   int      LevelMoving2 = 100;
extern   int      LevelProfit3 = 550;
extern   int      LevelMoving3 = 300;
extern   int      TrailingStop = 300;
extern   int      TrailingStep = 50;

extern   bool     ShowComment=true;
extern   bool     UseSound=true;
string   var_132="expert.wav";
//+------------------------------------------------------------------+

void deinit()
  {
   Comment("");
  }
//+------------------------------------------------------------------+

void start()
  {
   double point,sl,tp;
   int    digits,r;
   string msg="";

   if(CountTrades()<1)
     {
      //--- sell conditions
      if(BuySell==2)
        {
         if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,sl,tp,"",Magic,0,Red);
         return;
        }
      //--- buy conditions
      if(BuySell==1)
        {
         if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,sl,tp,"",Magic,0,Blue);
         return;
        }
     }

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic)
           {
            if(UseOneAccount || (OrderSymbol()==Symbol()))
              {
               ThreeLevelSystemOfOutput();
               digits= MarketInfo(OrderSymbol(),MODE_DIGITS);
               point = MarketInfo(OrderSymbol(),MODE_POINT);
               msg=msg+OrderSymbol()+"  Цена: "+DoubleToStr(OrderOpenPrice(),digits)+"  SL = "+DoubleToStr(OrderStopLoss(),digits)+" ("+StopLossInPoint()+")\n";
              }
           }
        }
     }

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

void ThreeLevelSystemOfOutput()
  {
   int profit=ProfitPosition();
   int sl=StopLossInPoint();
   int spread=MarketInfo(OrderSymbol(),MODE_SPREAD);

   if((profit>LevelProfit1) && (profit<=LevelProfit2) && (sl<LevelMoving1))
     {
      ModifyStopLossInPoint(LevelMoving1);
      if(UseCloseOneThird) CloseOneThird();
     }
   if((profit>LevelProfit2) && (profit<=LevelProfit3) && (sl<LevelMoving2)) ModifyStopLossInPoint(LevelMoving2);
   if((profit>LevelProfit3) && (sl<LevelMoving3)) ModifyStopLossInPoint(LevelMoving3);
   if(profit>LevelMoving3+TrailingStop+TrailingStep) TrailingPositions();
  }
//+------------------------------------------------------------------+

void CloseOneThird()
  {
   bool   result=false;
   double lots=MathCeil(OrderLots()/3.0*10.0)/10.0;

   if(lots>0.0)
     {
      if(OrderType()==OP_BUY)
        {
         result=OrderClose(OrderTicket(),lots,Bid,Slippage,CLR_NONE);
        }
      if(OrderType()==OP_SELL)
        {
         result=OrderClose(OrderTicket(),lots,Ask,Slippage,CLR_NONE);
        }
      if(result && UseSound) PlaySound(var_132);
     }
  }
//+------------------------------------------------------------------+

void TrailingPositions()
  {
   double bid;
   double ask;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);

   if(OrderType()==OP_BUY)
     {
      bid=MarketInfo(OrderSymbol(),MODE_BID);
      if(bid-OrderOpenPrice()>TrailingStop*point)
        {
         if(OrderStopLoss()<bid -(TrailingStop+TrailingStep-1)*point)
           {
            ModifyStopLoss(bid-TrailingStop*point);
            return;
           }
        }
     }

   if(OrderType()==OP_SELL)
     {
      ask=MarketInfo(OrderSymbol(),MODE_ASK);
      if(OrderOpenPrice()-ask>TrailingStop*point)
        {
         if((OrderStopLoss()>ask+(TrailingStop+TrailingStep-1)*point) || (OrderStopLoss()==0))
           {
            ModifyStopLoss(ask+TrailingStop*point);
           }
        }
     }
  }
//+------------------------------------------------------------------+

void ModifyStopLoss(double sl)
  {
   bool result=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
   if(result && UseSound) PlaySound(var_132);
  }
//+------------------------------------------------------------------+

void ModifyStopLossInPoint(int stoploss)
  {
   bool   result;
   double sl=0;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);

   if(OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
   if(OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;

   result=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
   if(result && UseSound) PlaySound(var_132);
  }
//+------------------------------------------------------------------+

int ProfitPosition()
  {
   double bid;
   double ask;
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double profit=0;

   if(OrderType()==OP_BUY)
     {
      bid=MarketInfo(OrderSymbol(),MODE_BID);
      profit=(bid-OrderOpenPrice())/point;
     }
   if(OrderType()==OP_SELL)
     {
      ask=MarketInfo(OrderSymbol(),MODE_ASK);
      profit=(OrderOpenPrice()-ask)/point;
     }
   return(MathRound(profit));
  }
//+------------------------------------------------------------------+

int StopLossInPoint()
  {
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double sl=0;

   if(OrderType() == OP_BUY) sl = (OrderStopLoss() - OrderOpenPrice()) / point;
   if(OrderType() == OP_SELL) sl = (OrderOpenPrice() - OrderStopLoss()) / point;
   if(OrderStopLoss()==0.0) sl<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/010.gif' alt=' *shock* '> rderOpenPrice()/point;
   return(MathRound(sl));
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 5 декабря 2015, 10:15
+
0
Андрей! торговая функция не предусматривает торговлю в оба направления? если идёт торговля сразу по 5 парам, то это и бай и селл на разных парах. да и потом если разворот тренда, то надо опять переключать вручную. если можно — подправьте. или просто надо задать число большее двум?
avatar

  5  igr-yard Автор Сообщений: 77

  • 5 декабря 2015, 10:56
+
0
Огромное вам спасибо!
avatar

  5  igr-yard Автор Сообщений: 77

  • 5 декабря 2015, 10:25
+
0
Больше в советнике ничего менять не надо.

Делал больше для наглядности.

Андрей! торговая функция не предусматривает торговлю в оба направления?


На одной паре ставите BuySell = 1 на другой BuySell = 2 и будут 2 направления.

да и потом если разворот тренда, то надо опять переключать вручную.


Здесь конечно вручную, в советнике нет идентификации тренда.
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 5 декабря 2015, 11:12
+
0
Андрей! при выставлении BuySell=0 советник просто не будет сам открывать сделки? сохранит ли способность работать в обоих направлениях? мне он нужен для контроля другого советника. в котором 2 магика. советник вешается на одно окно и работает со всеми открытыми сделками. или теперь надо открывать 2 окна и задавать в одном бай, в другом селл?
avatar

  5  igr-yard Автор Сообщений: 77

  • 6 декабря 2015, 08:50
+
0
при выставлении BuySell=0 советник просто не будет сам открывать сделки?

С параметром 0 эксперт не торгует. Остальное завтра проверите :) 
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 6 декабря 2015, 09:09
+
0
ещё раз спасибо Андрей! всё работает отлично. С параметром 0 эксперт не торгует, а только контролирует ордера с указанным магиком.*good* 
avatar

  5  igr-yard Автор Сообщений: 77

  • 13 декабря 2015, 09:26

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий