Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 831

 
tsd Tsepkov:

Intendo il primo nome, dice che devi cambiare il primo nome con il nome reale, ma non funziona

Sì, se il tuo stato è "Venditore" non puoi modificare i tuoi dati:

Prova a scrivere una richiesta a servicedesk con una spiegazione.

 
Vladimir Karputov:

Sì, se il tuo stato è "Venditore" non puoi modificare i tuoi dati:

Prova a scrivere una domanda a servicedesk con una spiegazione.

Questo è il punto, no, bisogna modificare per diventarlo. È un circolo vizioso...

La tuadomanda di registrazione come venditore è stata respinta dal moderatore.

Si prega di correggere i dati forniti.

 
tsd Tsepkov:

***

Per favore, correggi i dati che hai fornito.

Potrebbe essere questa la ragione? Le immagini sono storte o scure o non come richiesto...

 
tsd Tsepkov:

È questo il punto, no, bisogna modificare per diventarlo. È un circolo vizioso...

La tuadomanda di registrazione come venditore è stata respinta dal moderatore.

Si prega di correggere i dati forniti.

Bene, allora scrivi a servicedesk del problema. È più produttivo che sbattere sulla ringhiera del forum ;)
 
VHS:

Si prega di consigliare come usare void Ignore(long value) { m_ignore=value; } metodo della classe standard CExpertSignal nella classe Trailing personalizzata quando si programma in MQL5? Come posso accedervi?

Ho una classe di segnali personalizzata che mi dà metodi per aprire e chiudere posizioni. Ma in Trailing volevo mantenere la posizione con un altro metodo. Se si scrivono separatamente le classi personalizzate MySignal e MyTrailing, una posizione viene chiusa dalla condizione che è scattata per prima. Se la condizione Trailing è stata attivata prima, tutto va bene. Ma a volte arriva un nuovo segnale (di inversione) da MySignal e la posizione viene invertita, e ho bisogno che sia accompagnata da Trailing dopo l'apertura, non chiudendo e non aprendone una nuova. Ho guardato le classi base e c'è la sensazione che m_ignore dalla classe base signals sia responsabile di questo. Se gli viene assegnato il valore 1 nel filtro appropriato, sembra funzionare come dovrebbe. Ho aggiunto filter0.Ignore(0) alla classe Expert Advisor in OnInit. Ma sono nuovo di OOP e non capisco come cambiare questo valore nella classe MyTrailing, che non è ereditata dalla classe CExpertSignal, ma è sua "cugina" (diciamo filter0.Ignore(1) ). Per favore, consigliate come fare questo.

In realtà, una domanda più generale: come passare informazioni tra due classi che non sono discendenti? Come trasferire le informazioni dalla classe trailing alla classe signal? Probabilmente, potete creare una variabile globale e comunicare attraverso di essa. Ma questo sembra completamente perverso rispetto alla logica dei membri protetti in OOP.


Per favore, aiutatemi! Ho già provato ad allontanarmi da build Ignore (che, naturalmente, non è buono in sé, la gente ha cercato di includerlo nel codice base) e ancora non può connettersi. Sto cercando di inventare per il terzo giorno (non ho ancora un manuale).

Ho anche modificato i codici di classe: ho implementato il membro booleano protetto (m_permition) nella classe MySignal e ho creato un metodo Set per esso; ho infilato return(0) nella divisione lunga e nella divisione shot if !m_permition. In MyTrailing ha anche creato un membro booleano protetto m_signal_permition, creato i metodi Get e Set ad esso, insegnato CheckTrailing per controllarlo if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;

Non capisco solo una cosa, dove e come dovrei metterli insieme. Ho provato semplicemente a riferirmi a loro in OnTick, ma non funziona.

Ho letto l'articolo di Vladimir "Come insegnare...". L'idea di creare un'istanza di un altro segnale nel segnale personalizzato e di comunicare attraverso di esso sembra essere chiara, ma da qualche parte nel mio sistema non si adatta completamente: le classi di segnale e trailing non sono ereditate l'una dall'altra.

Aiutate, gente di buona volontà, in ogni modo possibile.

 

Salve colleghi. Oltre al prezzo di protezione, le quotazioni di MT5 contengono alcuni dati, come lo spread storico e lo slippage (che è lo stesso ovunque per default ed è di 10 punti a cinque cifre).

Facendo tale richiesta dopo aver aperto una posizione:

Print("Expert name: ",__FILE__,", Открыта поза Sell с магиком №: ",IntegerToString(m_trade.RequestMagic()),", Cпред ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
", Deviation ",IntegerToString(m_trade.RequestDeviation()));

Otteniamo questa risposta:

Ho capito bene che il tester MT5 conta sia lo spread che lo slippage insieme, esattamente come in MT4 che imposterei manualmente lo spread a 13 pips, per l'esempio specifico nello screenshot.

 

Ciao Qualcuno può aiutarmi con questo, come posso collegare un EA mt5 a un numero di conto specifico?

 
denis basuk:

Ciao, qualcuno può aiutarmi con questo, come posso collegare un Expert Advisor mt5 ad un numero di conto specifico?

Ho bisogno di controllare il numero di conto. Questo dovrebbe essere fatto in OnInit() e OnTick(). Esempio:

 

Ciao, sto cercando di trasferire gli indicatori da MT4 a MT5. Ho un semplice indicatore che mostra il tempo fino alla prossima barra. Questo indicatore usa OnTimer. Lo aggiorno in OnTimer usando la funzione void refreshClock(). È corretto usare questa costruzione per altri indicatori che richiedono l'uso di OnTimer? O si può ottimizzare il processo di indirizzamento a OnTimer?

#property description "Time"
#property indicator_chart_window
#property indicator_plots   0

                                    
                                                                                             
input int Offset_Minutes = 60;                                                                                                         
input int Font__Size = 10;                                   
input color  Font_Color = clrWhite;                         
input color  Font_No_Bar_Color = clrRed;                        
input ENUM_BASE_CORNER  Corner = CORNER_RIGHT_UPPER;        
input int Time_X = 140;                                          
input int Time_Y = 0;                                            


#define  Clock_Name "Тimer"
int selectTime;
int diff;
int offsetHour;

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

int  OnInit()
{   
   EventSetMillisecondTimer(1000); 
   return(0); 
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

void OnDeinit(const int reason) 
{ 
   if(reason==REASON_REMOVE      || 
      reason==REASON_CHARTCHANGE || 
      reason==REASON_RECOMPILE   || 
      reason==REASON_CHARTCLOSE  || 
      reason==REASON_CLOSE       || 
      reason==REASON_PARAMETERS)    
   { 
     ObjectDelete(0, "Тimer");
     EventKillTimer(); 
   }
  ChartRedraw();
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

void OnTimer( )                 
{ 
   refreshClock();  
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

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[])
{
   refreshClock();
   return(rates_total);
}
void refreshClock()
{
   static bool inRefresh = false;
           if (inRefresh) return;
               inRefresh = true;
                              ShowClock(); ChartRedraw();
               inRefresh=false;
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

void ShowClock()
{
   int periodMinutes     = periodToMinutes(Period());
   int currentTime       = (int)TimeCurrent();
   int localTime         = (int)TimeLocal();
   int barTime           = (int)iTime();
   
   diff = (int)MathMax(round((currentTime-localTime)/60.0)*60,-24*3600);
   offsetHour = (int)-Offset_Minutes*60; // сдвиг в минутах
   
   
   int currentTimeReal   = localTime+offsetHour;
   int sel_localTime     = localTime+diff;
   selectTime = sel_localTime;
   
     
      color  theColor;
      string time = getTime(barTime+periodMinutes*60-selectTime,theColor);
      int times = barTime+periodMinutes*60-selectTime;
      if(times < -60 || TerminalInfoInteger(TERMINAL_CONNECTED) == false || 
      currentTimeReal-currentTime > 60 || currentTime-currentTimeReal > 60)
      time = "Time Off";
             
   if(ObjectFind(0, Clock_Name) < 0)   
   ObjectCreate(0, Clock_Name, OBJ_LABEL, 0, 0, 0);
   ObjectSetString(0, Clock_Name, OBJPROP_TEXT, "Time: " + time);
   ObjectSetString(0, Clock_Name, OBJPROP_FONT, "Verdana");
   ObjectSetInteger(0, Clock_Name, OBJPROP_FONTSIZE, Font__Size);
   ObjectSetInteger(0, Clock_Name, OBJPROP_COLOR, theColor);
        ObjectSetInteger(0, Clock_Name, OBJPROP_CORNER, Corner);
        ObjectSetInteger(0, Clock_Name, OBJPROP_XDISTANCE, Time_X);
   ObjectSetInteger(0, Clock_Name, OBJPROP_YDISTANCE, Time_Y);
      
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

string getTime(int times, color& theColor)
{
   string stime = "";
   int    seconds;
   int    minutes;
   int    hours;
   int currentTime       = (int)TimeCurrent();
   int localTime         = (int)TimeLocal();
   
   
   offsetHour = (int)-Offset_Minutes*60;
   
   int currentTimeReal   = localTime+offsetHour;
  
   if (times < 0 || TerminalInfoInteger(TERMINAL_CONNECTED) == false || 
   currentTimeReal-currentTime > 60 || currentTime-currentTimeReal > 60) {
         theColor = Font_No_Bar_Color; times = (int)fabs(times); }
   else  theColor = Font_Color;
   
   seconds = (times%60);
   hours   = (times-times%3600)/3600;
   minutes = (times-seconds)/60-hours*60;

   if (hours>0)
   if (minutes < 10)
         stime = stime+(string)hours+":0";
   else  stime = stime+(string)hours+":";
         stime = stime+(string)minutes;
   if (seconds < 10)
         stime = stime+":0"+(string)seconds;
   else  stime = stime+":" +(string)seconds;
   return(stime);
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+
  
datetime iTime(ENUM_TIMEFRAMES forPeriod=PERIOD_CURRENT)
{
   datetime times[]; if (CopyTime(Symbol(),forPeriod,0,1,times)<=0) return(TimeLocal());
   return(times[0]);
}

//+------------------------------------------------------------------+  
  
//+------------------------------------------------------------------+

int periodToMinutes(int period)
{
   int i;
   static int _per[]={1,2,3,4,5,6,10,12,15,20,30,0x4001,0x4002,0x4003,0x4004,0x4006,0x4008,0x400c,0x4018,0x8001,0xc001};
   static int _min[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200};

   if (period==PERIOD_CURRENT)
       period = Period();  
            for(i=0;i<20;i++) if(period==_per[i]) break;
   return(_min[i]);  
}
 
VHS:

Qualcuno può aiutare per favore! Già provato ad allontanarsi dal built-in Ignore (che, naturalmente, non è buono in sé, la gente ha cercato di includere nel codice di base) e ancora non può connettersi. Sto cercando di inventare per il terzo giorno (non ho ancora un manuale).

Ho anche modificato i codici di classe: ho implementato il membro booleano protetto (m_permition) nella classe MySignal e ho creato un metodo Set per esso; ho infilato return(0) nella divisione lunga e nella divisione shot if !m_permition. In MyTrailing ha anche creato un membro booleano protetto m_signal_permition, creato i metodi Get e Set ad esso, insegnato CheckTrailing per controllarlo if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;

Non capisco solo una cosa, dove e come dovrei metterli insieme. Ho provato semplicemente a riferirmi a loro in OnTick, ma non funziona.

Ho letto l'articolo di Vladimir "Come insegnare...". L'idea di creare un'istanza di un altro segnale nel segnale personalizzato e di comunicare attraverso di esso sembra essere chiara, ma da qualche parte nel mio sistema non si adatta completamente: le classi di segnale e trailing non sono ereditate l'una dall'altra.

Aiutatemi, gente di buona volontà, in ogni modo possibile.

Ho fatto progressi in una settimana! Trovato metodo Signal nella classe CExpert. Inserito codice in OnTick.

CExpertSignal *my_signal = ExtExpert.Signal(); my_signal.Ignore(0);

Ora, se cambio "1" tra parentesi manualmente, il metodo Ingnore funziona - l'Expert Advisor non esegue nessun trade dal segnale.

Resta solo da capire come ottenere informazioni sull'oggetto trailing in OnTick. Sfortunatamente, non esiste un metodo ExtExpert.Trailing() per ottenere un riferimento all'oggetto trailing e, quindi, il compilatore non capisce a quale oggetto voglio applicare la mia implementazione nel metodo trailing GetPermition. Qualcuno può dirmi cosa fare?