[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 12

 
lá está ele
Arquivos anexados:
 
igrok2008 >> :

No comentário anterior você apontou minha falha, sobre níveis incorretos de compra e venda, o que (como eu entendo) requer a reversão dos sinais < >.

Para a CCI é necessário ou não especificar -100????????????????????????

Pegue-a e coloque-a no testador

e mostrará onde o resultado é melhor

onde há um sinal de menos ou onde não há

e qual número acabará sendo 250 ou -250

 

Por favor, escreva ou sugira como fazer um pedido abrir quando uma nova barra aparece e fechar quando ela fecha... Minha cabeça está doendo, não consigo entender ))))

 
vadim2304 >> :

Por favor, escreva ou sugira como fazer um pedido abrir quando uma nova barra aparece e fechar quando ela fecha... Minha cabeça já está doendo, não consigo pensar nisso ))))

if ( isTime(Period()*60)) { закрытьОткрытыйОрдер(); открытьНовыйОрдер()};


bool isTime(int sec){
   bool res = false;
   static datetime time = 0;
   double min = 0;
   if (TimeCurrent() >= time){
      min = MathFloor( sec / 60);
      if ( min==0) min = 1.0;         
      time = iTime(NULL,PERIOD_H1,0) + (MathFloor(Minute()/ min) + 1) * min * 60;
      res = true;
   } 
   return( res);
}
 
keekkenen >> :

Entendo que isto é para bar com H1, mas onde escrever código para preços de abertura e fechamento, depois de se (isTime(Period()*60)), e o que significa, por favor decifrar ))))

 

mal-entendido... O período()*60 é para qualquer TF - tudo é expresso em segundos, ou seja

em M1 - 60 seg., M5 - 300 seg. etc. (porque Período() em M1 retorna 1, em M5 - 5...)

Eu o escrevi figurativamente

if ( isTime(Period()*60)) { закрытьОткрытыйОрдер(); открытьНовыйОрдер()};

O significado disto - quando uma nova barra aparece, você pode fechar uma ordem aberta e abrir uma nova ordem.

Se você mesmo não pode fazer isso, dê uma olhada no tutorial https://book.mql4.com/ru/

 
keekkenen >> :

mal-entendido... O período()*60 é para qualquer TF - tudo é expresso em segundos, ou seja

em M1 - 60 seg., M5 - 300 seg., etc. (como Period() em М1 retorna 1, em М5 - 5...)

Eu o escrevi figurativamente.

A idéia é fechar uma ordem aberta e abrir uma nova ordem.

Se você não for capaz de fazê-lo você mesmo, dê uma olhada em "https://book.mql4.com/ru/" para um tutorial.


E se não houver ordens em aberto (fechará depois desta barra), e apenas abrir uma nova ordem, não haverá erro ????

 
satop >> :

Pegue-o e cole-o no provador

e isso lhe mostrará onde os resultados são melhores.

onde há um menos ou onde não há.

e lhe mostrará se é 250 ou -250.

Não se zangue satop. Todos eram iniciantes, todos faziam perguntas estúpidas. Pense de volta à escola. Deve ter havido nerds. Eles estavam curiosos, eles queriam aprender. Com o tempo, é claro, eles os incomodaram, mas isso mostra que aqueles que estavam com raiva se agarraram e entenderam tudo mais rápido. Mas ambos os métodos de ensino TÊM direito à vida. César para César......Sem ofensa.......I não nego que sou um boneco, mas estou curioso. Sem ofensa...

 
vadim2304 >> :

E se não houver nenhuma ordem em aberto (ele as fechará depois desta barra), e nós apenas abrimos uma nova ordem, não haverá erro ?

O problema é que a função OrderClose() que fecha a ordem toma o número da ordem como primeiro parâmetro, e o número da ordem só pode ser obtido chamando OrderSelect() para as ordens existentes, então em geral o fechamento se parece com isto...

bool res = false;
int slippage = 3;

for (int i = 0; i < OrdersTotal(); i++) {
   if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES) &&
         OrderSymbol()==Symbol()){

      while (IsTradeContextBusy() || !IsTradeAllowed())
         {Comment("Торговый поток занят ...");Sleep(2000);}               
      res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), slippage,CLR_NONE);
      if ( res){  
         res = true; Comment("Ордер закрыт !");              
      }else{
         Comment("Ошибка - ", msg);
      }
   }
}
  


Se OrderTotal() = 0, ou seja, se não houver ordens em aberto, então o loop for terminará imediatamente...

 
igrok2008 >> :

Não se zangue satop. Todos eram iniciantes, todos faziam perguntas estúpidas. Pense de volta à escola. Com certeza havia nerds. Eles estavam curiosos, eles queriam aprender. Com o tempo, é claro, eles os incomodaram, mas isso mostra que aqueles que estavam com raiva se agarraram e entenderam tudo mais rápido. Mas ambos os métodos de ensino TÊM direito à vida. César para César......Sem ofensa.......I não nego que sou um boneco, mas estou curioso. >> sem ofensa.

Eu não sei por que você acha que eu estou com raiva.

É apenas a minha maneira de explicar que

tomando qualquer sinal de desigualdade e correndo

>> no testador, você pode obter um

o resultado com algum nível, e não importa qual nível

positivo ou negativo. E quando perguntado

se deve tomar o nível com ou sem o menos,

infelizmente, não há distinção clara.