Доработка ботов (советников, индикаторов)

Статус
Закрыто для дальнейших ответов.

Dendjo

Местный житель
и снова со старой просьбой, что там так трудно доработать хоть объясните, надо что бы закрывала сделку по обратному сигналу и открывала новую а не как там пока не сработает стоп так и весит хотя уже сигнал в другую сторону, помогите:please: наконец то уже:facepalm:
 

Вложения

asdfer

Активный участник
Приветмствую!
большая просьба. удалить из кода две линии из трех , оставив одну.
Два образца. В первом случае синию, во втором красную, оставить!
Для того, кто знает, минутное дело, а я никак :facepalm:
Вот скрин и индюк.
 

Вложения

  • usdjpym5mmb.png
    usdjpym5mmb.png
    71,1 КБ · Просмотры: 131
  • MBB_call (1).mq4
    MBB_call (1).mq4
    2,1 КБ · Просмотры: 62

zhserg

Местный знаток
и снова со старой просьбой, что там так трудно доработать хоть объясните, надо что бы закрывала сделку по обратному сигналу и открывала новую а не как там пока не сработает стоп так и весит хотя уже сигнал в другую сторону, помогите:please: наконец то уже:facepalm:
Так что-ли?
 

Вложения

zhserg

Местный знаток
Приветмствую!
большая просьба. удалить из кода две линии из трех , оставив одну.
Два образца. В первом случае синию, во втором красную, оставить!
Для того, кто знает, минутное дело, а я никак :facepalm:
Вот скрин и индюк.

Зачем из кода удалять? Если хочешь чтобы не было видно на экране, установи цвет ненужной линии такой как у тебя фон.
 

zhserg

Местный знаток
Это я знаю. Мне нужно для "солянки", чтобы не путаться при совмещении.
В приведенной части кода закомментирована синяя линия, т.е. она не будет отображаться.
PHP:
  int init()
  {
   string short_name;
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
//   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Line1Buffer);
//   SetIndexBuffer(1,Line2Buffer);
   SetIndexBuffer(2,Line3Buffer);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

   short_name="MBB_call("+PeriodRSI+","+StepSizeFast+","+StepSizeSlow+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"RSI");
//   SetIndexLabel(1,"SRSI fast");
   SetIndexLabel(2,"SRSI slow");

   SetIndexDrawBegin(0,1);
//   SetIndexDrawBegin(1,2);
   SetIndexDrawBegin(2,2);

   return(0);
  }
С красной можно поступить также.
 

asdfer

Активный участник
Вельми понеже!
Спасибо большое, понял, могу хоть одну линию заблокировать ,хоть две.
Вообще то я хотел вообще стереть две ненужных из кода , чтобы при дальнейшей работе указывать не линию в индикаторе( а это все равно придется, как я понимаю), а сам индикатор, имеющий одну линию, красную, или синию, по варианту.
Если это сложно, не нужно, потому что идея спорная, так справлюсь.
========
Гложут смутные сомненья. Если убрать из кода две линии, может индикатор перестанет работать, поскольку одна линия потеряет смысл?
 
Последнее редактирование:

Joker1394

Активный участник
Ребят всем привет еще раз,ну а что там с моим индюком можно его подправить как он должен работать или бызсмысленная трата времени?
 

zhserg

Местный знаток
Вельми понеже!
Спасибо большое, понял, могу хоть одну линию заблокировать ,хоть две.
Вообще то я хотел вообще стереть две ненужных из кода , чтобы при дальнейшей работе указывать не линию в индикаторе( а это все равно придется, как я понимаю), а сам индикатор, имеющий одну линию, красную, или синию, по варианту.
Если это сложно, не нужно, потому что идея спорная, так справлюсь.
========
Гложут смутные сомненья. Если убрать из кода две линии, может индикатор перестанет работать, поскольку одна линия потеряет смысл?

Нет, не сложно. Закомментированные строки = удаленные строки, т.е. как будто их и нет в коде.

Вообще то основная (черная) это RSI в чистом виде... А две остальные - производные от нее.
 
Последнее редактирование:

Елена4

Активный участник
Добрый вечер всем форумчанам. Помогите доработать скрипт. Необходимо добавить возможность указывать по каким парам выставлять отложенные ордера. Заранее всем спасибо.
PHP:
#property show_inputs

//--------------------------------------------------------------------
extern int     Takeprofit        = 0,     //тейкпрофит ордеров
               Delta            = 10,
               Candle            = 1;     //по какой свече ставим ордера (0- текущая  1- прошлая....)
extern double  Lot               = 0.1;   //лот
extern int     Magic             = 0;     //уникальный номер ордеров этого советника, если 0 то ведет все ордера, в том числе выставленные вручную
//--------------------------------------------------------------------
int start()
{
   double SL,TP;
   double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   double Price = NormalizeDouble(High[Candle]+(MarketInfo(Symbol(),MODE_SPREAD)+Delta)*Point,Digits);
   if(Price>=Ask+StopLevel) 
   {
      if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
      SL = NormalizeDouble(Low[Candle]-Delta*Point,Digits);
      if (OrderSend(Symbol(),OP_BUYSTOP,Lot,Price,0,SL,TP,"StopOrders",Magic,0,CLR_NONE)==-1) Print("Error ",GetLastError());
   }
   Price = NormalizeDouble(Low[Candle]-Delta*Point,Digits);
   if(Price<=Bid-StopLevel) 
   {
      if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
      SL = NormalizeDouble(High[Candle]+Delta*Point,Digits);
      if (OrderSend(Symbol(),OP_SELLSTOP,Lot,Price,0,SL,TP,"StopOrders",Magic,0,CLR_NONE)==-1) Print("Error ",GetLastError());
   }
   return(0);
}
//--------------------------------------------------------------------
 
Последнее редактирование модератором:

zhserg

Местный знаток
Добрый вечер всем форумчанам. Помогите доработать скрипт. Необходимо добавить возможность указывать по каким парам выставлять отложенные ордера. Заранее всем спасибо.
PHP:
#property show_inputs

//--------------------------------------------------------------------
extern int     Takeprofit        = 0,     //тейкпрофит ордеров
               Delta            = 10,
               Candle            = 1;     //по какой свече ставим ордера (0- текущая  1- прошлая....)
extern double  Lot               = 0.1;   //лот
extern int     Magic             = 0;     //уникальный номер ордеров этого советника, если 0 то ведет все ордера, в том числе выставленные вручную
//--------------------------------------------------------------------
int start()
{
   double SL,TP;
   double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   double Price = NormalizeDouble(High[Candle]+(MarketInfo(Symbol(),MODE_SPREAD)+Delta)*Point,Digits);
   if(Price>=Ask+StopLevel) 
   {
      if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
      SL = NormalizeDouble(Low[Candle]-Delta*Point,Digits);
      if (OrderSend(Symbol(),OP_BUYSTOP,Lot,Price,0,SL,TP,"StopOrders",Magic,0,CLR_NONE)==-1) Print("Error ",GetLastError());
   }
   Price = NormalizeDouble(Low[Candle]-Delta*Point,Digits);
   if(Price<=Bid-StopLevel) 
   {
      if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
      SL = NormalizeDouble(High[Candle]+Delta*Point,Digits);
      if (OrderSend(Symbol(),OP_SELLSTOP,Lot,Price,0,SL,TP,"StopOrders",Magic,0,CLR_NONE)==-1) Print("Error ",GetLastError());
   }
   return(0);
}
//--------------------------------------------------------------------

В начале, после
PHP:
//--------------------------------------------------------------------
добавляем
PHP:
extern string para="EURUSD";
Затем все Symbol() меняем на para.
 
Последнее редактирование модератором:

Vitas42

Активный участник
Зачем из кода удалять? Если хочешь чтобы не было видно на экране, установи цвет ненужной линии такой как у тебя фон.

:D +1 верно как это не могут понят они. хоть бы малость с терминалом разобрались а потом код бы учились писать. ;)
 

RTS

Прохожий
Добрый день!
Подскажите функцию удаления отложенных ордеров (BuyStop/SellStop) при срабатывании стоплосса у рыночного ордера. Магики у всех ордеров один. Сейчас при срабатывании стопа, отложки остаются в рынке. И подскажите еще, приведенный код на выставление отложек корректен? Не нарушает ли это логики MQL языка?
Вот код который я подправил самостоятельно,чтобы сов при открытии первого ордера, сразу выставлял отложку через N пунктов.
PHP:
//============================================== покупаем 1 ордер ==============================================
     if ((Signal == 1) && (totalB == 0)) {  
          if (Signal == 1 ) ticket = OPENORDER ("Buy")&& PlaySound(OpenOrderSound);
          if (Signal == 1 ) ticket = OPENORDER ("BuyStop");
          if (ticket < 0) {
          BarControl_0 = False;
          return (0);
          }
          BarControl_0 = BarControl;
     }
//=============================================== продаем 1 ордер =============================================     
     if ((Signal == -1) && (totalS == 0)) {             
        if (Signal == -1 ) ticket = OPENORDER ("Sell")&& PlaySound(OpenOrderSound);
        if (Signal == -1 ) ticket = OPENORDER ("SellStop");
        if (ticket < 0) {
           BarControl_0 = False;
           return (0);
        }
        BarControl_0 = BarControl;
     }    

  return (0);
}
и
PHP:
//====================================== выставление ордеров ===================================================
int OPENORDER(string ord)
{
   int error;
 
   if (ord=="Buy"   ) error=OrderSend(Symbol(),OP_BUY,  iLotsB, NormalizeDouble (Ask,Dig), slip, 0, 0, "Dubl Full",MagicNumberB,5,Blue);
   if (ord=="BuyStop"   ) error=OrderSend(Symbol(),OP_BUYSTOP,  iLotsB, NormalizeDouble (Ask+FirstPipStep*Point,Digits), slip, 0, 0, "Dubl Full",MagicNumberB,5,Blue);
   if (ord=="Sell"  ) error=OrderSend(Symbol(),OP_SELL, iLotsS, NormalizeDouble (Bid,Dig), slip, 0, 0, "Dubl Full",MagicNumberS,5,DeepPink);
   if (ord=="SellStop"  ) error=OrderSend(Symbol(),OP_SELLSTOP, iLotsS, NormalizeDouble (Bid+FirstPipStep*Point,Digits), slip, 0, 0, "Dubl Full",MagicNumberS,5,DeepPink);
   if (error==-1)   ShowERROR(error,0,0);
return (error);
}

А эта часть кода отвечает за тейки и стопы.
PHP:
//===================================  пересчитываем ТП  БАЙ ордеров  =========================================

void  RecalculationB() {
 double AveragePrice_B = 0;
 double PriceTarget_B  = 0;
 double CountB  = 0;
 int ErrorB = 0;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
       if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))  {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberB) {
             if (OrderType() == OP_BUY ) {
                AveragePrice_B += OrderOpenPrice() * OrderLots();
                CountB += OrderLots();
             }
          }
       }  
   }
   if (totalB > 0) AveragePrice_B = NormalizeDouble(AveragePrice_B / CountB, Dig);
   if (NewOrdersPlacedB) {
      for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
          if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
             if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberB) {
                if (OrderType() == OP_BUY) {
                   PriceTarget_B = AveragePrice_B + Take_Profit * Point;
                   StopperB = AveragePrice_B - StopLoss * Point;
                   flagB = TRUE;
                }
             }
          }
      }
   }  
   if (NewOrdersPlacedB) {
      if (flagB == TRUE) {
         for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
             if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {        
                if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberB) {
                   if (OrderType() == OP_BUY ) {
                      ErrorB = OrderModify(OrderTicket(), AveragePrice_B, StopperB, PriceTarget_B, 0, Blue);
                      if (ErrorB == -1) ShowERROR (ErrorB,0,0);
                      NewOrdersPlacedB = FALSE;
                   }
                }
             }  
         }
      }
   }
}

//===================================  пересчитываем ТП  СЕЛЛ ордеров  ========================================
void RecalculationS() {
   double AveragePrice_S = 0;
   double PriceTarget_S  = 0;
   double CountS  = 0;
   int ErrorS = 0;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
     if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))  {
       if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberS) {
          if (OrderType() == OP_SELL ) {
             AveragePrice_S += OrderOpenPrice() * OrderLots();
             CountS += OrderLots();
           }
        }
      }  
    }
   if (totalS > 0) AveragePrice_S = NormalizeDouble(AveragePrice_S / CountS, Dig);
   if (NewOrdersPlacedS) {
      for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
          if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
             if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberS) {
                if (OrderType() == OP_SELL) {
                   PriceTarget_S = AveragePrice_S - Take_Profit * Point;
                   StopperS = AveragePrice_S + StopLoss * Point;
                   flagS = TRUE; 
                }
             }
          }
      }
   }  
   if (NewOrdersPlacedS) {
      if (flagS == TRUE) {
         for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
            if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {        
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberS) {
                  if (OrderType() == OP_SELL) {
                     ErrorS = OrderModify(OrderTicket(), AveragePrice_S, StopperS, PriceTarget_S, 0, Red);
                     if (ErrorS == -1) ShowERROR (ErrorS,0,0);
                     NewOrdersPlacedS = FALSE;
                 }
               }
            }  
         }
      }
   }
}
 
Последнее редактирование модератором:

Joker1394

Активный участник
Ребят а реально сделать в обычном MACD,так что бы он свои значения показывал между уровнями -100 и 100,а не в плавающем режими?

Если возможно,то вот индюк,буду благодарен.Минимум и Максимум сделать -100 и 100 чтоб бегал в этих зонах))
 

Вложения

  • MACD.mq4
    MACD.mq4
    3,4 КБ · Просмотры: 20
Последнее редактирование модератором:

mobidik

-----
Если возможно,то вот индюк,буду благодарен.Минимум и Максимум сделать -100 и 100 чтоб бегал в этих зонах))

Разве, что так, но порой убегает за зоны +/-100, тогда можно отключить закрепление зон:
 

Вложения

  • MACD(m).mq4
    MACD(m).mq4
    3,5 КБ · Просмотры: 29
  • MACD(m).png
    MACD(m).png
    59,6 КБ · Просмотры: 111

Joker1394

Активный участник
Разве, что так, но порой убегает за зоны +/-100, тогда можно отключить закрепление зон:

не то у нас получилось нужно что бы настройки были как у штатного MACD,просто мне последний параметр нужна 1 а тут 9 меняю на один он на график не ставится (((
 

Вложения

  • MACD_1.jpg
    MACD_1.jpg
    63,6 КБ · Просмотры: 22

Joker1394

Активный участник
вообщем подобная картинка должна быть с+/-100 уровнями))
 

Вложения

  • gbpusdm1.png
    gbpusdm1.png
    31,5 КБ · Просмотры: 61

mobidik

-----
не то у нас получилось нужно что бы настройки были как у штатного MACD,просто мне последний параметр нужна 1 а тут 9 меняю на один он на график не ставится (((
Да, при значении 1 - не отображается, фиг его знает почему, но данный параметр отвечает за сигнальную линию.
вообщем подобная картинка должна быть с+/-100 уровнями))
а здесь сигнальная линия не отображается, так в чем проблема?
 
Статус
Закрыто для дальнейших ответов.

Отслеживают (859) Посмотреть

Верх