Подскажите как лучше сделать?

 

Добрый день.

Сделал вот такой индюк информационного типа для себя. Но вычисления для него есть и в советнике и в самом индикаторе.

Вопрос: как сделать проще чтобы одни и те же данные не пересчитывать по несколько раз?

Закинуть всё в советник или наоборот лучше всё брать из индикатора?

 
TEXX >>:

Добрый день.

Сделал вот такой индюк информационного типа для себя. Но вычисления для него есть и в советнике и в самом индикаторе.

Вопрос: как сделать проще чтобы одни и те же данные не пересчитывать по несколько раз?

Закинуть всё в советник или наоборот лучше всё брать из индикатора?

Привет.

Советник не может выполнять функции индюка!

Решение простое. В индикатор добавь внешний буфер (это после внешних переменных "extern int nameVar = 0"), и советником получай эти значения через iCustom().


Вот ссылка для индюка https://book.mql4.com/ru/samples/icustom

 
rensbit писал(а) >>

Привет.

Советник не может выполнять функции индюка!

Решение простое. В индикатор добавь внешний буфер (это после внешних переменных "extern int nameVar = 0"), и советником получай эти значения через iCustom().

Вот ссылка для индюка https://book.mql4.com/ru/samples/icustom

С первого раза не понял. Наверное в танке :((

А можно в индюке показать?

//+------------------------------------------------------------------+
//|                                           MILANA_PROFIT_INFO.mq4 |
//|                                                     Isaev Sergey |
//|                                                serj.7777@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Isaev Sergey"
#property link      "serj.7777@mail.ru"

#property indicator_chart_window

string mmm, nnn;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }

int CountBuy()
{
int countbuy=0;
for (int i=OrdersTotal(); i>=0; i--)  
    {                                                  
     OrderSelect(i,SELECT_BY_POS, MODE_TRADES);       
     if (OrderSymbol () !=Symbol()) continue;   
     if (OrderSymbol () ==Symbol()) 
     if (OrderType()==OP_BUY) countbuy ++;
    } 
return(countbuy);
}

int CountSell()
{
int countsell=0;
for (int i=OrdersTotal(); i>=0; i--)   
    {                                                  
     OrderSelect(i,SELECT_BY_POS, MODE_TRADES);       
     if (OrderSymbol () !=Symbol()) continue;   
     if (OrderSymbol () ==Symbol())
     if (OrderType()==OP_SELL) countsell ++;
    } 
return(countsell);
}



//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  ObjectDelete("Profit");
  ObjectDelete("Sell");
  ObjectDelete("Buy"); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   //int    counted_bars=IndicatorCounted();
   double profit = NormalizeDouble((AccountProfit()*100)/AccountBalance(),2);
   if (profit<0)
     {
      mmm="УБЫТОК ";
      //nnn=" Допустимый -1.00%";
     }
      else
          {
           mmm="ПРИБЫЛЬ ";
           //nnn="";
          }
   
   
//----
   string PROFIT=mmm + DoubleToStr(profit,2) +"%";//+nnn;
   ObjectCreate("Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Profit", OBJPROP_CORNER,1);
   ObjectSet("Profit", OBJPROP_XDISTANCE,1);
   ObjectSet("Profit", OBJPROP_YDISTANCE,10);
   ObjectSetText("Profit", PROFIT,16,"Garamond",Yellow);
//----
   string ORDER= "Ордеров на рынке " + DoubleToStr(OrdersTotal(),0);
   ObjectCreate("Order", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Order", OBJPROP_CORNER,1);
   ObjectSet("Order", OBJPROP_XDISTANCE,1);
   ObjectSet("Order", OBJPROP_YDISTANCE,30);
   ObjectSetText("Order",ORDER,16,"Garamond",DeepPink);
//----
   string BUY= "Ордеров Buy " + DoubleToStr(CountBuy(),0)+"/Максимум "+"10";
   ObjectCreate("Buy", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Buy", OBJPROP_CORNER,1);
   ObjectSet("Buy", OBJPROP_XDISTANCE,1);
   ObjectSet("Buy", OBJPROP_YDISTANCE,50);
   ObjectSetText("Buy",BUY,16,"Garamond",Aqua);
//----
   string SELL= "Ордеров Sell " + DoubleToStr(CountSell(),0)+"/Максимум "+"10";
   ObjectCreate("Sell", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Sell", OBJPROP_CORNER,1);
   ObjectSet("Sell", OBJPROP_XDISTANCE,1);
   ObjectSet("Sell", OBJPROP_YDISTANCE,70);
   ObjectSetText("Sell",SELL,16,"Garamond",Red);
  
   
   
   return(0);
  }
//+------------------------------------------------------------------+
 
TEXX >>:

С первого раза не понял. Наверное в танке :((

А можно в индюке показать?

//+------------------------------------------------------------------+
//|                                           MILANA_PROFIT_INFO.mq4 |
//|                                                     Isaev Sergey |
//|                                                serj.7777@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Isaev Sergey"
#property link      "serj.7777@mail.ru"

#property indicator_chart_window

#property indicator_buffers 1       // Количество буферов                <<<<<<<<<<<<<<<<  строчка добавлена

string mmm, nnn;

double buf_0[];                     // первый буфер (номерация начиается с нуля)<<<<<<<<<<<<<<<<  строчка добавлена

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }

int CountBuy()
{
int countbuy=0;
for (int i=OrdersTotal(); i>=0; i--)  
    {                                                  
     OrderSelect(i,SELECT_BY_POS, MODE_TRADES);       
     if (OrderSymbol () !=Symbol()) continue;   
     if (OrderSymbol () ==Symbol()) 
     if (OrderType()==OP_BUY) countbuy ++;
    } 
return(countbuy);
}

int CountSell()
{
int countsell=0;
for (int i=OrdersTotal(); i>=0; i--)   
    {                                                  
     OrderSelect(i,SELECT_BY_POS, MODE_TRADES);       
     if (OrderSymbol () !=Symbol()) continue;   
     if (OrderSymbol () ==Symbol())
     if (OrderType()==OP_SELL) countsell ++;
    } 
return(countsell);
}



//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  ObjectDelete("Profit");
  ObjectDelete("Sell");
  ObjectDelete("Buy"); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   //int    counted_bars=IndicatorCounted();
   double profit = NormalizeDouble((AccountProfit()*100)/AccountBalance(),2);
   if (profit<0)
     {
      mmm="УБЫТОК ";
      //nnn=" Допустимый -1.00%";
     }
      else
          {
           mmm="ПРИБЫЛЬ ";
           //nnn="";
          }
   
   
//----
   string PROFIT=mmm + DoubleToStr(profit,2) +"%";//+nnn;
   buf_0[0]=profit;                    // заносим в буфер         <<<<<<<<<<<<<<<<  строчка добавлена
   Alert(PROFIT);                      // Это можно убрать :)         <<<<<<<<<<<<<<<<  строчка добавлена
   ObjectCreate("Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Profit", OBJPROP_CORNER,1);
   ObjectSet("Profit", OBJPROP_XDISTANCE,1);
   ObjectSet("Profit", OBJPROP_YDISTANCE,10);
   ObjectSetText("Profit", PROFIT,16,"Garamond",Yellow);
//----
   string ORDER= "Ордеров на рынке " + DoubleToStr(OrdersTotal(),0);
   ObjectCreate("Order", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Order", OBJPROP_CORNER,1);
   ObjectSet("Order", OBJPROP_XDISTANCE,1);
   ObjectSet("Order", OBJPROP_YDISTANCE,30);
   ObjectSetText("Order",ORDER,16,"Garamond",DeepPink);
//----
   string BUY= "Ордеров Buy " + DoubleToStr(CountBuy(),0)+"/Максимум "+"10";
   ObjectCreate("Buy", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Buy", OBJPROP_CORNER,1);
   ObjectSet("Buy", OBJPROP_XDISTANCE,1);
   ObjectSet("Buy", OBJPROP_YDISTANCE,50);
   ObjectSetText("Buy",BUY,16,"Garamond",Aqua);
//----
   string SELL= "Ордеров Sell " + DoubleToStr(CountSell(),0)+"/Максимум "+"10";
   ObjectCreate("Sell", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Sell", OBJPROP_CORNER,1);
   ObjectSet("Sell", OBJPROP_XDISTANCE,1);
   ObjectSet("Sell", OBJPROP_YDISTANCE,70);
   ObjectSetText("Sell",SELL,16,"Garamond",Red);
  
   
   
   return(0);
  }
//+------------------------------------------------------------------+


Остальное делай сам :)

 
rensbit писал(а) >>

Остальное делай сам :)

Спасибо! Буду думать .....

 
перенесите все функции в советник, то что в старте прописано вынесите в какую-нибудь функцию и ее вставьте в старт и все ..
 
keekkenen писал(а) >>
перенесите все функции в советник, то что в старте прописано вынесите в какую-нибудь функцию и ее вставьте в старт и все ..

После переноса вот такая фигня стала появляться на графике. Подскажите в чём дело?

 

гм.. покажите новый код..

 
keekkenen писал(а) >>

гм.. покажите новый код..

Вот

void MILANA_INFO(double profit, int openbuy, int opensell)
{
  string mmm;
  if (profit<0)
     {
      mmm="УБЫТОК ";
     }
      else
          {
           mmm="ПРИБЫЛЬ ";
          }

//----    
   string _profit = mmm + DoubleToStr(profit,2) +"%";
   string _order = "Ордеров на рынке " + DoubleToStr(OrdersTotal(),0);
   string _buy  = "Ордеров Buy " + DoubleToStr(openbuy,0)+"/Максимум "+DoubleToStr(MaxBuy ,0);
   string _sell = "Ордеров Sell " + DoubleToStr(opensell,0)+"/Максимум "+DoubleToStr(MaxSell,0);

//----
   ObjectSetText("_profit",_profit,16,"Garamond",Yellow);
   ObjectSet("_profit", OBJPROP_CORNER,1);
   ObjectSet("_profit", OBJPROP_XDISTANCE,1);
   ObjectSet("_profit", OBJPROP_YDISTANCE,10);
//----
   ObjectSetText("_order",_order,16,"Garamond",DeepPink);
   ObjectSet("_order", OBJPROP_CORNER,1);
   ObjectSet("_order", OBJPROP_XDISTANCE,1);
   ObjectSet("_order", OBJPROP_YDISTANCE,30);
//----
   ObjectSetText("_buy",_buy,16,"Garamond",Aqua);
   ObjectSet("_buy", OBJPROP_CORNER,1);
   ObjectSet("_buy", OBJPROP_XDISTANCE,1);
   ObjectSet("_buy", OBJPROP_YDISTANCE,50);
//----
   ObjectSetText("_sell",_sell,16,"Garamond",Red);
   ObjectSet("_sell", OBJPROP_CORNER,1);
   ObjectSet("_sell", OBJPROP_XDISTANCE,1);
   ObjectSet("_sell", OBJPROP_YDISTANCE,70);

return(0);
}
 

а ObjectCreate куда потеряли ?

 
keekkenen писал(а) >>

а ObjectCreate куда потеряли ?

int init()
  {
//---- indicators
  ObjectCreate("_profit", OBJ_LABEL, 0, 0, 0);
  ObjectCreate("_order", OBJ_LABEL, 0, 0, 0);
  ObjectCreate("_buy", OBJ_LABEL, 0, 0, 0);
  ObjectCreate("_sell", OBJ_LABEL, 0, 0, 0);
//----
   return(0);
  }

это перед Start

int deinit()
   {
    Comment("");
    ObjectDelete("_profit");
    ObjectDelete("_order");
    ObjectDelete("_buy"); 
    ObjectDelete("_sell");
    return(0);
   }
это после Start прописано....
Причина обращения: