[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 233

 
hoz:

Quantas vezes já usei o autopoint, mas a primeira vez não funciona.

Aqui está Init()

Coloquei-o em qualquer lugar do programa (neste caso, mesmo no início da experiência):

A função retorna ao registro:

Onde está a lógica?

VladislavVG me disse: Porquena função init() você não tem a garantia de carregar os dados do instrumento financeiro.
 
GaNDarM:
VladislavVG me sugeriu:Porque na fase de função init() você não tem garantia de carregar os dados do instrumento financeiro.

Portanto, o valor da variável Ponto sem Init() deve retornar o mesmo...
 
hoz:
Por que haveria um absurdo se a função retorna um nome de objeto especificamente?
E você está 100% certo de que esta função funcionará sempre e em todos os lugares corretamente, não irá apresentar falhas em algum lugar ou se engasgar com algum nome de objeto complicado, ou você mesmo não irá acidentalmente inserir o número de um objeto inexistente nele, de repente? E o resultado retornado da função não pode ser usado para julgar se funcionou corretamente ou não. Isto é o que diz na documentação. A única maneira correta é obter o código de erro e depois contorná-lo. É assim que você se protege contra seus próprios erros (ou contra os de outra pessoa).
 
hoz:

Quantas vezes já usei o autopoint, mas na primeira vez não funciona.


Onde está a lógica?

Experimente assim:

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Nem mesmo assim, mas assim:

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Porque Digits é uma variável interna, assim como Piont.

Isso deve funcionar :)



 
hoz:

Portanto, o valor da variável Ponto sem Init() deve retornar o mesmo...

Não é um fato... O ponto é uma variável interna do processador MQL e requer algum tempo e algumas ações de inicialização para atualizá-lo. Tudo isso geralmente acontece apenas antes do início das chamadas do processador() e no estágio de init() os valores das variáveis internas do processador podem não ser definidos.
 
GaNDarM:


"Chorando" sobre isso:

e aqui está o diário de bordo:

18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0


As variáveis não são intrigantes por acaso?


Eu já me peguei assim algumas vezes

 
ilunga:

Variáveis, por acaso, int?


Já me peguei fazendo isso um par de vezes


Não, o dobro. O que há de errado com int, eu me pergunto?
 
Olá! Uma situação ocorreu no dia anterior. Em 19.03.2013 por volta das 17-00 GMT eu fiz um pedido para colocar uma parada de venda. O preço aberto foi 1.2903, Stop loss 1.2913, trailing stop 15 pips, M15, lote -0.5. Como mostra o histórico da conta, a posição foi aberta em 17-49. A posição foi fechada às 21:15 novamente pela GMT com o lucro menos 90. Quando vi a história, tive muitas perguntas em minha mente. Por exemplo, por que a posição foi fechada no topo do espigão (ver figura). Por que não foi desencadeada a parada móvel, porque se funcionasse, o lucro seria positivo, porque o movimento de preços estava correto. Após a parada móvel, uma parada móvel não seria de 90 USD. E mais uma vez - por que a posição foi fechada no topo da ascensão. Ponto a ponto. Eu não entrei em contato com o centro de negociações sobre este assunto. Provavelmente, eles não responderão. Eu me lembrei deste fórum e espero que os profissionais sejam capazes de explicar a razão desta anomalia em linguagem simples. Comecei a negociar na MT4 não faz muito tempo. Eu ainda estou farejando e olhando ao redor.
 
Olá. Você pode me dizer se uma EA é anexada a várias janelas de pares de moedas ao mesmo tempo, então mudanças na EA em uma janela afetam a EA em outra janela???? ou seja, as variáveis locais mudam ou não????
 

Cavalheiros, por favor, me dêem uma dica!

Estou tentando implementar uma idéia simples, que é descrita nos comentários ao programa.

O programa abre pedidos no TESTER a um preço que não coincide com os especificados no código.

Por exemplo, o pedido abre ao preço de 0,86084, enquanto que o valor mais próximo na matriz é de 0,85375.

A diferença é positiva enquanto o código especifica para abrir ordens se a diferença for < 0,00000, ou seja, negativa.


Favor nos informar onde o erro está localizado.

Obrigado.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
  }                                  

   }
Razão: