Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 969

 
Sprut112:
L'EA fa trading su una copertura. Forse alcuni controlli dovrebbero essere aggiunti come standard?

Lo stai testando su un conto in centesimi per caso? Su alcuni conti in centesimi, il lotto minimo è di 0,1

 
Konstantin Nikitin:

Sto scambiando normalmente nel tester, build 1960. Che lotto ho messo, è quello che ci vuole su 12 coppie allo stesso tempo

Perché il #16 è un lotto di 0,01?
 
Konstantin Nikitin:

Stai testando su un conto in centesimi per caso? Su alcuni conti in centesimi, il lotto minimo è di 0,1

No, ci sono controlli su min max e incrementi di lotto
 
Sprut112:
E perché #16 lotto 0,01?

Se ti riferisci alla mia foto, è la chiusura parziale nell'esperto che ha funzionato. C'è scritto vicino.

Sprut112:
No, controlla gli incrementi di min max e di lotto.
Quindi forse questo controllo cerca un minimo maggiore di quello attuale e lo sostituisce.
 
Konstantin Nikitin:

Se ti riferisci alla mia foto, è la chiusura parziale nell'esperto che ha funzionato. Si dice vicino

Quindi forse questo controllo cerca un minimo maggiore di quello attuale e lo sostituisce.
Possiamo pensarla in questo modo. Non succede immediatamente nel tester, circa un mese dopo
 
Artyom Trishkin:

Perché il tuo codice non funziona come vuoi in mql4 con #property strict ?

Che differenza fondamentale c'è con il codice mostrato da Vladimir:

E non c'è differenza in queste implementazioni. E c'è solo una ragione per cui il tuo codice non produce descrizioni di testo - è l'assenza di #property strict nel codice mql4.


Non l'ho capito subito e ho pensato che non funzionasse per me a causa dell'assenza di =0, =1, ecc...

enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };

ma è risultato essere la stessa cosa...

string xx=EnumToString(Symboll_(1)); // risultato symbol_1

Avrei dovuto prendere NZDUSD

  в таком варианте всё Ок но не получается добавить символ с решёткой #CL
enum  Symboll_
  {
   AUDUSD,
   NZDUSD,
   USDCAD
   //#CL
  };
string xx=EnumToString(Symboll_(1)); // результат NZDUSD

Ma la variante dell'array è proprio quello di cui avevo bisogno...

 
xxz:

Non l'ho capito subito e ho pensato che stavo fallendo perché non avevo =0, =1, ecc...

ma è risultato essere la stessa cosa...

string xx=EnumToString(Symboll_(1)); // risultato symbol_1

Avrei dovuto prendere NZDUSD

Ma questa variante dell'array è proprio quello di cui avevo bisogno...

Naturalmente, quando si esporta un'enumerazione tramite EnumToString(), non si ottiene una descrizione della variabile dietro il "//" ma la variabile stessa così com'è.

Per stamparlo come volete, dovete fare una funzione analoga a EnumToString(), che lo stamperà.

Per un'enumerazione come questa:

enum ENUM_SYMBOL_NAMES
  {
   SYMBOL_NAME_AUDUSD,     // AUDUSD
   SYMBOL_NAME_NZDUSD,     // NZDUSD
   SYMBOL_NAME_USDCAD,     // USDCAD
   SYMBOL_NAME_USDCHF,     // USDCHF
   SYMBOL_NAME_USDJPY,     // USDJPY
   SYMBOL_NAME_EURJPY,     // EURJPY
   SYMBOL_NAME_EURUSD,     // EURUSD
   SYMBOL_NAME_GBPUSD,     // GBPUSD
   SYMBOL_NAME_SHARP_CL,   // #CL
  };
input ENUM_SYMBOL_NAMES InpNames; // Instrument

Come questo:

//+------------------------------------------------------------------+
string InstrumentToString(void)
  {
   string enm=EnumToString(InpNames);
   int index=StringFind(enm,"SHARP_");
   int shift=(index>WRONG_VALUE ? index+6 : 12);
   string name=StringSubstr(enm,shift);
   return(index>0 ? "#"+name : name);
  }
//+------------------------------------------------------------------+

E chiama:

Print(InstrumentToString());
 
double get_lot(int pair, double input_lots) {
   if(input_lots<min_lot[pair]) return(min_lot[ir]);
   return(input_lots);
 
Konstantin Nikitin


:

Se ti riferisci alla mia foto, è la chiusura parziale nell'esperto che ha funzionato. C'è scritto vicino.

Quindi forse questo controllo cerca di vedere se il minimo è maggiore di quello attuale e lo sostituisce.
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

Non credo che sia giusto.

 
Vladimir Karputov:

Meglio ancora, dichiarate chiaramente cosa volete ottenere. Probabilmente vi darò un esempio completo.

Una volta, nel 2010, in inverno. Ho anche chiesto di filtrare in un indicatore, la cui essenza: disegnare il Mach & Min HLine con PERIOD_MN1 per iBars....))))

L'ho capito da solo. Padroneggiare MT4.

Lentamente, non immediatamente, sto padroneggiando MT5.

...."Dichiara chiaramente ciò che vuoi ottenere" FORMULA: Sto convertendo (me stesso) ciò che ho programmato (me stesso), e allo stesso tempo sto padroneggiando (me stesso) MT5 ))))


MA quello che mi avete mostrato con esempi (visivamente) NON è andato via.


Se è così ci tornerò )))

Se SHO, tornerò indietro






 
Artyom Trishkin:

Naturalmente, quando si stampa un'enumerazione usando EnumToString(), non si ottiene una descrizione della variabile, che è dietro "//", ma la variabile stessa così com'è.

Per stamparlo come volete, dovete fare una funzione analoga a EnumToString(), che lo stamperà.


Questo è il problema, perché per risolvere il compito più semplice bisogna creare una funzione e questo è un mucchio di codice di cui nessuno ha bisogno,

invece di una linea di dieci...

Sto cercando di essere il più succinto possibile!...

Inizialmente potevo aggirare questo problema aggiungendo solo una linea al codice

            xx=iClose(Symbol_(i),0,50);
xx=iClose("#CL",0,50);

ma non mi piaceva solo a causa della linea extra nel codice...

Non mi piace il codice "sporco"...

Motivazione: