Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 51

 

Talvez eu não tenha entendido minha pergunta.

Estando no gráfico do período M1 quero preencher o buffer se no período M5, a linha indicadora " Stochastic" está agora acima do nível 55.

input ENUM_TIMEFRAMES   TimeFrame2  =  PERIOD_M5; //ЭТО ВО ВНЕШНИХ Н
////////////////////////////////////////////////
       for(int i=limit; i>=0; i--) {
      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
    
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
    
      if(sto2_0>55.0)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      
      if(sto2_0<44.0)
       {
      BufferDN[i]=high[i]+distance*MyPoint;
       }

      Comment(sto2_0);
       }

No comentário o valor atual é correto com M5, mas na história as setas não colocam em condição, caos.

O que pode ser?

No " porão", o estocástico da M5

As setas são circuladas não de acordo com o sinal



xaoc
 

Estou escrevendo um consultor especializado que simultaneamente coloca dois StopOrders, um para vender e outro para comprar.

Como escrever a condição de que quando um StopOrder é acionado, o segundo (oposto) é apagado?

Obrigado.

 
RichLux:

Estou escrevendo um consultor especializado que simultaneamente coloca dois StopOrders, um para vender e outro para comprar.

Como escrever a condição de que quando um StopOrder é acionado, o segundo (oposto) é apagado?

Obrigado.

A condição é simples. Quando uma StopOrder dispara, uma posição aparece no mercado, significa que devemos rastrear a posição, e se ela existe, devemos apagar a ordem oposta.

Este é um código para reflexão)

void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1, color cl=clrOliveDrab) {
  bool b, s;
  switch(op) {
    case OP_BUY : b=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: s=ExistPositions(sy, OP_SELL, mn); break;
  }

  if(b) {
    DeleteOrders(sy, OP_SELLLIMIT, mn, cl);
    DeleteOrders(sy, OP_SELLSTOP , mn, cl);
  }
  if(s) {
    DeleteOrders(sy, OP_BUYLIMIT, mn, cl);
    DeleteOrders(sy, OP_BUYSTOP , mn, cl);
}}
 
Vitaly Muzichenko, pelo que entendi, você agora precisa adicionar as funçõesExistPositions eDeleteOrders
 
RichLux:
Vitaly Muzichenko, tanto quanto sei, agora precisamos acrescentar as funçõesExistPositions eDeleteOrders
Sim, você sabe.
 
RichLux:
Vitaly Muzichenko, pelo que entendi, agora precisamos escrever as funçõesExistPositions eDeleteOrders
Você não precisa escrevê-los, ambos estãoprontos
 
Vitaly Muzichenko:
Não é preciso escrevê-los, ambos estãoprontos para serem feitos.

Bem ..., para fins educacionais é bastante útil ...

Para fins práticos, é muito caro executar ciclos em cada função.

 
Artyom Trishkin:

Bem ..., para fins de treinamento, é muito útil...

Para fins práticos, é muito caro executar ciclos em todas as funções.

Portanto, não me apeguei de imediato e descrevi e apeguei apenas a lógica do "fechamento do oposto" )
 

O que fazer se a parada/parada for 200

mas

tp=NormalizeDouble((preço+(TakeProfit*_Point)),Dígitos);

sobre um dólar-yen renderá 317.000 à taxa de câmbio de 117.000

o resultado esperado é de 117.200

 
trader781:

O que fazer se a parada/parada for 200

mas

tp=NormalizeDouble((preço+(TakeProfit*_Point)),Dígitos);

sobre um dólar-yen renderá 317.000 à taxa de câmbio de 117.000

o resultado esperado é de 117.200

Por que tantos parênteses? É uma questão de gosto, é claro, mas ainda assim é demais.

tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);

Os valores são substituídos incorretamente se o resultado for incorreto na saída, porque esta linha de código calculará tudo corretamente, mesmo com parênteses extras.