Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 544

 
if(TralProcent!=0)
{
NewProfProc=Profit(-1)/(AccountBalance()/100);

if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<NewProfProc))
  {ProfitProcent=NormalizeDouble(NewProfProc, 2);}
if(ProfitProcent>0 && ProfitProcent>(TralProcent+TralStartProcent))
  {TrallingProcent=ProfitProcent-TralProcent;}
//+------------------------------------------------------------------+
if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent)
{CloserS();
 CloserB();
  ProfitProcent=0;
   TrallingProcent=0;}

------робот использует трал в %баланса, подскажите пожалуйста как сюда добавить step изменения. Если я правильно понимаю он нужен для Tralingprocent. К примеру если step =2%, то trailingprocent увеличивается не менее чем на 2%.
 
khorosh:

 Artyom Trishkin:

Объектами - они могут выводиться в любое окно терминала и его подокна.

--------------------------------------------------------------------------------------------------------------------------------------

Я пробовал вот так, но что то не работает.

Может, что то с нумерацией окон. Если на графике одно сепаратное окно его номер ==1?

wndNum номер окна, где отображать

int wndNum=1;

int OnInit()
 {
 string short_name=MQLInfoString(MQL_PROGRAM_NAME);
 short_name+=": MyIndicator";
 IndicatorSetString(INDICATOR_SHORTNAME,short_name);
 wndNum=ChartWindowFind(0,short_name);
 //---
   return(INIT_SUCCEEDED);
 }

// Функция создания объекта
void SetLabel(string nm,string text,long xd,long yd,int fs,string font,int cr,int an,color cl,string tooltip,bool sel) {
 if(ObjectFind(0,nm)<0) {
    ObjectCreate(0,nm,OBJ_LABEL,wndNum,0,0);
    ObjectSetInteger(0,nm,OBJPROP_CORNER,cr);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,an);
    ObjectSetString (0,nm,OBJPROP_FONT,font);
    ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
    ObjectSetInteger(0,nm,OBJPROP_BACK,false);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,sel);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,sel);
    ObjectSetString (0,nm,OBJPROP_TOOLTIP,tooltip);
  }
    ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,yd);
    ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,xd);
    ObjectSetString (0,nm,OBJPROP_TEXT,text);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,cl); 
 }
P.S. khorosh, не могу ответить в личку - не работает чат!
 
Vitaly Muzichenko:

wndNum номер окна, где отображать

P.S. khorosh, не могу ответить в личку - не работает чат!

Спасибо, Виталий!  А как привязать к кончику кривой индикатора, находящегося в сепаратном окне? Я пытался задавать в качестве координат Time[0] и значение буфера кривой на нулевом баре,  но не получается.

 
khorosh:

Спасибо, Виталий!  А как привязать к кончику кривой индикатора, находящегося в сепаратном окне? Я пытался задавать в качестве координат Time[0] и значение буфера кривой на нулевом баре,  но не получается.

Так ведь он на этот вопрос и ответил. Единственный нюанс, который часто всплывает, это само значение wndNum. Значение wndNum не есть константа. Его нужно отслеживать постоянно. Ведь пользователь может удалить подокно индикатора, который предшествует текущему подокну. Также не стоит искать индикатору самого себя в OnInit(). Такой код стоит перенести в OnCalculate(). В любом случае нужно постоянно проверять правильность индекса подокна.

 
Ihor Herasko:

Так ведь он на этот вопрос и ответил. Единственный нюанс, который часто всплывает, это само значение wndNum. Значение wndNum не есть константа. Его нужно отслеживать постоянно. Ведь пользователь может удалить подокно индикатора, который предшествует текущему подокну. Также не стоит искать индикатору самого себя в OnInit(). Такой код стоит перенести в OnCalculate(). В любом случае нужно постоянно проверять правильность индекса подокна.

У него пример, когда координаты объекта изначально предполагаются в пикселях(статический объект). А мне надо привязать к кривой индикатора. Так, что предварительно надо эти координаты ещё вычислить. У него это не показано. Я вот так пробовал, но что то не работает(там в переменной LevLabelSpread значение буфера кривой на первом баре):

....
int X=0,Y=0;
   wndNum=ChartWindowFind(0,Shortname);  
   ChartTimePriceToXY( 0,wndNum,Time[1],LevLabelSpread,X,Y); Print("X=",X," Y=",Y);    
   if(ObjectFind("_Spread")<0) 
     {
      ObjectCreate(0,"_Spread", OBJ_TEXT, wndNum, 0,0);
      ObjectSetText("_Spread", "                Spread", 10, "Arial", clrYellow);
     }
   else
     {
      ObjectSetInteger(0,"_Spread",OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,"_Spread",OBJPROP_XDISTANCE,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh:

У него пример, когда координаты объекта изначально предполагаются в пикселях(статический объект). А мне надо привязать к кривой индикатора. Так, что предварительно надо эти координаты ещё вычислить. У него это не показано. Я вот так пробовал, но что то не работает(там в переменной LevLabelSpread значение буфера кривой на первом баре):

Зачем для объекта типа TEXT рассчитывать цену в пикселях? Он ведь позиционируется по времени бара и цене. У меня получилось так:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int nWndIndex = ChartWindowFind();
   if (nWndIndex < 0)
      return 0;
      
   string sName = "MyText";
   if (ObjectFind(0, sName) < 0)
      ObjectCreate(0, sName, OBJ_TEXT, nWndIndex, time[rates_total - 1], <здесь значение индикатора>);
      
   ObjectSetInteger(0, sName, OBJPROP_ANCHOR, ANCHOR_LEFT);
   ObjectSetString(0, sName, OBJPROP_TEXT, "Sample text");

   return(rates_total);
}

Результат:


 
Ihor Herasko:

Зачем для объекта типа TEXT рассчитывать цену в пикселях? Он ведь позиционируется по времени бара и цене. У меня получилось так:

Результат:


Большое спасибо.

 
Ihor Herasko:


Нормально получилось:


 
Объясните пожалуйста смысл и назначение двух понятий: хендл графика и идентификатор графика. В чём их отличие  и как они и в каких случаях используются .
 
khorosh:
Объясните пожалуйста смысл и назначение двух понятий: хендл графика и идентификатор графика. В чём их отличие  и как они и в каких случаях используются .

Покажите, как получаете то и другое. Пока складывается впечатление, что речь идет об одном и том же.

Причина обращения: