Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 374

 

Olá a todos. ajudam a entender a situação atual.

porque em um caso, testeF2, quando tomo Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i); tudo acontece como deveria,

mas em outro caso, testF1, com as mesmas ações Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i); a última barra está colapsada? porque não acontece no caso de iCCI mas iMA colapsa??????

Existe alguma maneira de consertá-la?

Arquivos anexados:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

para que o yem seja infinito você será lançado ao calcular -1 barra quando i=0

é melhor assim:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

e se você precisar de um turno como na variante citada por 1-n barra à direita, é melhor implementá-lo explicitamente no init via SetIndexShift(0,1);

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

para que o yem seja infinito você será lançado ao calcular -1 barra quando i=0

é melhor assim:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

e se você precisar de um turno como na variante citada por 1-n barra à direita, é melhor implementá-lo explicitamente no init via SetIndexShift(0,1);



Muito obrigado, mas entendo tudo perfeitamente, mas por que está tudo bem com a iCCI e não com a iMA?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


você está calculando a distância do preço até o preço de colocação do pedido, e você precisa do preço até a parada atual!)

Se um curto está em pé, então é dirigido para o primeiro bloco, se um longo está em pé, então é dirigido para o segundo bloco, e então o trilho pára.

Se os calções forem bons, então eles vão para o primeiro bloco, se forem longos, então para o segundo, depois disso os cálculos, as verificações e as paradas de trilha.


eu ainda não posso fazer isso... Eu só tento por muito tempo, já tentei tantas coisas, não consigo lembrar o que fiz))
 
clubsmi:


Muito obrigado, mas eu entendo perfeitamente, mas por que funciona com iCCI e não com iMA?


Houve erros ali e ali, é que com iCCI não é óbvio, por causa das peculiaridades dos cálculos,

e a aplicação dos MAs, em particular dos EMAs, creio que leva à sua visibilidade.

 
vadynik:

ainda nada sai... Só estou tentando por muito tempo, tentei tantas coisas, não me lembro o que fiz))

colocar OrderStopLoss() em vez de sl
 
Vinin:

Você vai viver de gorjetas?
Até que eu seja um especialista nisso.
Você não precisa de dicas agora, precisa? :)
 

Há um programa que abre dois pedidos para comprar ou vender, digamos para EURAUD e AUDUSD. O programa só funciona se não houver ordens em aberto no terminal para estes ou outros pares. Se pelo menos um pedido estiver presente no terminal, as negociações não serão abertas. Minha pergunta é: como programar a abertura dos pedidos, quer haja ou não pedidos abertos no terminal? Agradeço antecipadamente a sua resposta.

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

Há um programa que abre dois pedidos para comprar ou vender, digamos para EURAUD e AUDUSD. O programa só funciona se não houver ordens em aberto no terminal para estes ou outros pares. Se pelo menos um pedido estiver presente no terminal, as negociações não serão abertas. Minha pergunta é: como programar a abertura dos pedidos, quer haja ou não pedidos abertos no terminal? Agradeço antecipadamente a sua resposta.


Remover cheque
if(OrdersTotal()==0)
 
evillive:

Retire o cheque
Agora abre, mas abre um monte de negócios, e eu preciso apenas de dois negócios para abrir nos pares especificados, digamos EURAUD e AUDUSD.