Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 544

 
se(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 usa la pesca a strascico in %balance, si prega di consigliare come aggiungere i cambiamenti di passo qui. Se ho capito bene è necessario per Tralingprocent. Per esempio, se passo =2%, allora il trailingprocent aumenta almeno del 2%.
 
khorosh:

Artyom Trishkin:

Oggetti - possono essere emessi in qualsiasi finestra del terminale e nelle sue sottofinestre.

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

Ho provato così, ma non funziona.

Forse c'è qualcosa di sbagliato nella numerazione delle finestre. Se c'è una finestra separata nel grafico, il suo numero ==1?

wndNum numero della finestra in cui visualizzare

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, non posso rispondere in privato - la chat non funziona!
 
Vitaly Muzichenko:

wndNum numero della finestra in cui visualizzare

P.S.khorosh, non posso risponderti in privato - la chat non funziona!

Grazie, Vitaliy! E come posso attaccarlo alla punta della curva di un indicatore che si trova in una finestra separata? Ho provato a impostare Time[0] e il valore del buffer della curva sulla barra zero come coordinate, ma non ha funzionato.

 
khorosh:

Grazie, Vitaly! E come legarlo alla punta della curva dell'indicatore che si trova nella finestra separata? Ho provato a impostare Time[0] e il valore del buffer della curva sulla barra zero come coordinate, ma non funziona.

Ecco come ha risposto a questa domanda. L'unica sfumatura che spesso viene fuori è il valore wndNum stesso. Il valore di wndNum non è una costante. Deve essere costantemente monitorato. L'utente può cancellare la sottofinestra dell'indicatore che precede quella attuale. Inoltre non cercate l'indicatore stesso in OnInit(). Questo codice dovrebbe essere spostato in OnCalculate(). In ogni caso dovreste sempre controllare se l'indice della sottofinestra è corretto.

 
Ihor Herasko:

È così che ha risposto alla domanda. L'unica sfumatura che viene spesso fuori è il valore wndNum stesso. Il valore di wndNum non è una costante. Deve essere costantemente monitorato. L'utente può cancellare la sottofinestra dell'indicatore che precede quella attuale. Inoltre non cercate l'indicatore stesso in OnInit(). Questo codice dovrebbe essere spostato in OnCalculate(). In ogni caso dovete sempre controllare se l'indice della sottofinestra è corretto.

Il suo esempio mostra che le coordinate dell'oggetto sono inizialmente assunte in pixel (oggetto statico). Ma ho bisogno di legarmi a una curva indicatore. Quindi, prima dobbiamo calcolare queste coordinate. Non è mostrato nel suo lavoro. Ho provato in questo modo, ma non funziona (nella variabile LevLabelSpread c'è un valore di buffer di curva sulla prima 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:

Ha un esempio in cui le coordinate dell'oggetto sono inizialmente assunte in pixel (oggetto statico). Ma ho bisogno di collegarlo a una curva indicatrice. Quindi, devo calcolare queste coordinate in anticipo. Non è mostrato nel suo lavoro. Ho provato in questo modo ma non funziona (la variabile LevLabelSpread ha il valore del buffer della curva sulla prima barra):

Perché devo calcolare il prezzo in pixel per un oggetto di tipo TEXT? Si posiziona in base all'ora della barra e al prezzo. Io ce l'ho così:

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

Risultato:


 
Ihor Herasko:

Perché calcolare il prezzo in pixel per un oggetto TEXT? Si posiziona in base all'ora della barra e al prezzo. Ho capito così:

Risultato:


Grazie mille.

 
Ihor Herasko:


Ha funzionato bene:


 
Per favore, spiega il significato e lo scopo dei due concetti: maniglia del grafico eidentificatore del grafico. Qual è la differenza tra loro e come e quando si usano.
 
khorosh:
Si prega di spiegare il significato e lo scopo di due nozioni: maniglia del grafico eidentificatore del grafico. Qual è la differenza tra loro e come e quando si usano.

Mostratemi come fate ad avere entrambi. Finora sembra che stiamo parlando della stessa cosa.