Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 969

 
Sprut112:
A EA negoceia numa sebe. Talvez alguns controlos devam ser acrescentados como padrão?

Por acaso está a testá-lo numa conta de cêntimos? Em algumas contas de cêntimos, o lote mínimo é de 0,1

 
Konstantin Nikitin:

Estou a negociar normalmente no testador, construir 1960. O lote que eu ponho, é o que é preciso em 12 pares ao mesmo tempo

Porque é que #16 é um lote 0,01?
 
Konstantin Nikitin:

Por acaso está a testar numa conta em cêntimos? Em algumas contas de cêntimos, o lote mínimo é de 0,1

Não, há verificações de aumento de mínimo e máximo de lote
 
Sprut112:
E porquê #16 lote 0,01?

Se se refere à minha fotografia, é o encerramento parcial no perito que funcionou. Diz perto.

Sprut112:
Não, verifica se há incrementos de mín-máx e de lote.
Assim, talvez esta verificação procure um mínimo maior do que o actual e o substitua.
 
Konstantin Nikitin:

Se se refere à minha fotografia, é o encerramento parcial no perito que funcionou. Diz "fechar

Assim, talvez esta verificação procure um mínimo maior do que o actual e o substitua.
Podemos pensar nisso dessa forma. Não acontece imediatamente no testador, cerca de um mês depois
 
Artyom Trishkin:

Porque é que o seu código não funciona como pretende em mql4 com #propriedade estrita?

Que diferença fundamental do código que lhe foi mostrado por Vladimir?

E não há diferença nestas implementações. E só há uma razão para o seu código não dar descrições de texto - é a ausência de #propriedade estrita em código mql4.


Não descobri logo e pensei que não funcionava para mim por causa da ausência de =0, =1, etc...

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

mas acabou por ser a mesma coisa...

string xx=EnumToString(Symboll_(1)); // símbolo do resultado_1

Devia ter conseguido o NZDUSD

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

Mas a variante da matriz é mesmo o que eu precisava...

 
xxz:

Não percebi logo e pensei que estava a falhar porque não tinha =0, =1, etc...

mas acabou por ser a mesma coisa...

string xx=EnumToString(Symboll_(1)); // símbolo do resultado_1

Devia ter conseguido o NZDUSD

Mas esta variante de matriz é mesmo o que eu precisava...

Naturalmente, ao produzir uma enumeração via EnumToString(), não obterá uma descrição da variável por detrás do "//" mas a própria variável tal como ela é.

Para produzir a enumeração da forma desejada, é necessário fazer uma função análoga à EnumToString(), que a imprimirá.

Para uma enumeração como esta:

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

Assim:

//+------------------------------------------------------------------+
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 chamamento:

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 se refere à minha fotografia, é o encerramento parcial no perito que funcionou. Diz perto.

Assim, talvez esta verificação procure ver se o mínimo é maior do que o actual e o substitua.
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

Não creio que isso seja correcto.

 
Vladimir Karputov:

Melhor ainda, diga claramente o que pretende alcançar. Vou provavelmente dar-vos um exemplo completo.

Era uma vez, em 2010, no Inverno. Também pedi para filtrar num indicador, cuja essência é: desenhar a linha Mach & Min HLine com PERIOD_MN1 para iBars....))))

Descobri por mim próprio. Dominado o MT4.

Lentamente, não imediatamente, estou a dominar o MT5.

"Diga claramente o que quer obter" FORMULA: Estou a converter (eu próprio) o que programei (eu próprio), e ao mesmo tempo estou a domin ar (eu próprio) o MT5 ....


MAS o que me mostrou com exemplos (visualmente) NÃO desapareceu.


SE SO I'll voltar atrás ))))

Se SHO, eu volto atrás






 
Artyom Trishkin:

Naturalmente, ao imprimir uma enumeração utilizando EnumToString(), não obterá uma descrição da variável, que está por detrás do "//", mas a própria variável tal como ela é.

Para o imprimir da forma desejada, é necessário fazer uma função análoga à EnumToString(), que o imprimirá.


Este é o problema, porque para resolver a tarefa mais simples é preciso criar uma função e isto é um monte de código de que ninguém precisa,

em vez de uma linha de dez...

Estou a tentar ser o mais sucinto possível!...

Inicialmente podia contornar este problema acrescentando apenas uma linha ao código

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

mas não gostei só por causa da linha extra no código.

Eu não gosto de código "sujo"...

Razão: