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

 
Alexey Viktorov:

Eu li esses argumentos. Mas não foi um argumento, foi apenas uma indisponibilidade para compreender explicações e tentativas de provar a culpa do terminal. As suas palavras não foram apoiadas por nada. É demasiado preguiçoso para fazer screenshots e explicar claramente os seus pensamentos.

Que screenshots?! Eu forneci o código, ele está a funcionar no MT4 e vai cair no MT5. O tipo de erro é escrito no código que também é comentado.
 
comp:
Que screenshots?! Desde que funcione em MT4 e caia com um erro em MT5. O tipo de erro é escrito no código que também é comentado.

Está bem. Esse é o seu ponto de vista. Pensa que todos têm de fazer algo para compreender o seu ponto de vista, mas não pensa que é mais fácil não discutir consigo, e é realmente mais fácil ser banido por ser demasiado exigente.

Felizmente, não tenho o direito de proibir, por isso estou apenas a parar este diálogo.

 
Por favor, diga-me porque é que as encomendas não estão a abrir
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
Por favor, digam-me porque é que as encomendas não estão a abrir.
 
edutak:
Por favor, digam-me porque é que as encomendas não estão a abrir.

Tenho pelo menos 4 erros

'RSI_uroven1' - identificador não declarado 32.mq4 13 12

'RSI_uroven2' - identificador não declarado 32.mq4 14 12

'RSI' - identificador não declarado 32.mq4 16 24

'pos' - variável já definida 32.mq4 19 12

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
Por favor, digam-me porque é que as encomendas não estão a abrir.

Antes de mais, dei-lhe uma função normal que conta o número de encomendas, mas continua a usar a que está errada.

Segundo se(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) as condições forem mutuamente contraditórias.

 
Vitalii Ananev:

Antes de mais, dei-lhe uma função normal que conta o número de encomendas, mas continua a usar a que está errada.

Segundo se(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) as condições são mutuamente inconsistentes.

Vou usar funções normais, isto é um rascunho por agora, para o testador - só copio em blocos, é mais rápido assim.

Se ao atravessar RSI de qualquer um dos níveis uma ordem abre, e ao atravessar qualquer outro nível - fecha e abre imediatamente outro, então não há contradição.

Ou será que existe?

 
Vladislav Andruschenko:

Tenho pelo menos 4 erros

'RSI_uroven1' - identificador não declarado 32.mq4 13 12

'RSI_uroven2' - identificador não declarado 32.mq4 14 12

'RSI' - identificador não declarado 32.mq4 16 24

'pos' - variável já definida 32.mq4 19 12


Obrigado, funciona.
 
edutak:

Vou utilizar funções normais, este é um rascunho por agora, para o testador - apenas copio em blocos, é mais rápido dessa forma.

Se quando o RSI atravessa qualquer um dos níveis uma ordem abre e quando atravessa qualquer outro nível fecha e abre imediatamente outro, então não há contradição.

Ou será que existe?

Basta pensar nisso. Vamos supor que uroven1 = 80; rsi = 30; a condição rsi > 80 ou rsi < 80 significa que (30 > 80 [falso] ou 30 < 80[verdadeiro]) não existe na natureza. Embora a condição seja verdadeira, porque utiliza um operador OR, mas é essencialmente inútil.

A segunda parte da expressão Suponha que uroven2 = 20; rsi = 30 (30 > 20 [verdadeiro] ou 30< 20[falso] ) é a mesma.

 

A segunda parte da expressão Suponha que uroven2 = 20; rsi = 30 (30 > 20 [verdadeiro] ou 30< 20[falso] ) é a mesma.

Quando eu escrevo ou, quero dizer que em qualquer passagem de nível, a ordem será aberta. Quando a segunda condição 30<20[falsa] ocorrer, nesse momento, a ordem anterior será fechada e tornar-se-á verdadeira.

Se o entendi correctamente.

 
Se se verificar que tem razão, acrescentarei um segundo LER.