Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 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;}

------robot utiliza a rede de arrasto em %balanceamento, favor aconselhar como adicionar mudanças de passo aqui. Se eu entendi corretamente, é necessário para o Tralingprocent. Por exemplo, se o passo =2%, então o retrocesso aumenta em pelo menos 2%.
 
khorosh:

Artyom Trishkin:

Objetos - eles podem ser enviados para qualquer janela terminal e suas subjanelas.

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

Eu tentei desta maneira, mas não funciona.

Talvez haja algo errado com a numeração das janelas. Se houver uma janela separada no gráfico, seu número ===1?

númerowndNum da janela onde exibir

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, eu não posso responder em particular - o bate-papo não funciona!
 
Vitaly Muzichenko:

númerowndNum da janela onde exibir

P.S.khorosh, não posso responder a você em particular - a conversa não está funcionando!

Obrigado, Vitaliy! E como prendê-lo à ponta da curva de um indicador que está em uma janela separada? Tentei definir o tempo[0] e o valor do buffer de curva em barra zero como coordenadas, mas não funcionou.

 
khorosh:

Obrigado, Vitaly! E como amarrá-lo à ponta da curva do indicador que está na janela separada? Tentei definir o Tempo[0] e o valor do buffer da curva na barra de zero como coordenadas, mas isso não funciona.

Foi assim que ele respondeu a essa pergunta. A única nuança que aparece com freqüência é o próprio valor do wndNum. O valor da wndNum não é uma constante. Ela deve ser constantemente monitorada. O usuário pode apagar a subjanela indicadora, que precede a atual. Também não procure o indicador em si no OnInit(). Este código deve ser movido para OnCalculate(). Em qualquer caso, você deve sempre verificar se o índice da subjanela está correto.

 
Ihor Herasko:

Foi assim que ele respondeu à pergunta. A única nuança que aparece com freqüência é o próprio valor do wndNum. O valor da wndNum não é uma constante. Ela deve ser constantemente monitorada. O usuário pode apagar a subjanela indicadora, que precede a atual. Também não procure o indicador em si no OnInit(). Este código deve ser movido para OnCalculate(). Em qualquer caso, você deve sempre verificar se o índice da subjanela está correto.

Ele tem um exemplo onde as coordenadas do objeto são inicialmente assumidas em pixels (objeto estático). Mas eu preciso me ligar a uma curva indicadora. Portanto, primeiro temos que calcular estas coordenadas. Não é mostrado em seu trabalho. Eu tentei desta forma, mas não funciona (na variável LevLabelSpread há um valor de buffer de curva na primeira barra):

....
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:

Ele tem um exemplo onde as coordenadas do objeto são inicialmente assumidas em pixels (objeto estático). Mas eu preciso ligá-lo a uma curva indicadora. Portanto, tenho que calcular estas coordenadas com antecedência. Não é mostrado em seu trabalho. Eu tentei desta forma, mas não funciona (a variável LevLabelSpread tem o valor de tampão de curva na primeira barra):

Por que eu deveria calcular o preço em pixels para um objeto do tipo TEXT? Ela é posicionada por tempo de barra e preço. Tenho-o assim:

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);
}

Resultado:


 
Ihor Herasko:

Por que calcular o preço em pixels de um objeto TEXT? Ela é posicionada por tempo de barra e preço. Tenho-o assim:

Resultado:


Muito obrigado.

 
Ihor Herasko:


Funcionou bem:


 
Explique o significado e a finalidade dos dois conceitos: manipulação do gráfico eidentificador do gráfico. Qual é a diferença entre eles e como e quando são utilizados.
 
khorosh:
Explique o significado e a finalidade de duas noções: manipulação do gráfico eidentificador do gráfico. Qual é a diferença entre eles e como e quando são utilizados.

Mostre-me como você consegue os dois. Até agora, parece que estamos falando da mesma coisa.