[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 829

 
dimon74:
Pode ser útil!!! Tente baseá-lo em um preço: diga Bid. O preço de abertura para OP_SELLSTOP será Bid , e para OP_BUYSTOP - Bid+87*Point (ou o que você precisar).
Estou vendo a idéia, obrigado!
 
Vinin:

Agora um mágico, os parâmetros estão definidos para

Dê uma olhada na mensagem pessoal...
 

Por favor, ajude. Talvez alguém saiba como implementar uma função no código, que compara o penúltimo valor da história com o último (estamos falando de posições fechadas), não importa qual valor (por exemplo OrderCloseTime()), e se forem diferentes (neste caso, o penúltimo é menor que o último) - fazer um BLA-BLA-BLA. Se possível, refine meu código, ou escreva o seu, se você o tiver na direção errada.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

OBRIGADO DE ANTEMÃO!!!

 

Ajuda na verificação.

Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ele se mantém, nós o compramos, e se em algum momento ele não se mantém, nós saímos do loop. Em outras palavras, o sinal é válido, se foi verificado a cada intervalo delta e sempre foi um.

Estou pensando corretamente?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Ajuda na verificação.

Após a primeira unidade aparecer no ciclo, verifique se esta unidade irá aguentar por tempo t+t1 (verifique a cada delta de segundos). Se ela se mantém, então compramos, e se em algum momento ela não se mantém, então saímos do laço.

Estou pensando corretamente?


O resultado é um loop infinito (t é sempre <t+t1, somente se t1=0). No sinal do laço1 sempre =1
 
abolk:

O resultado é um loop infinito (t é sempre <t+t1, somente se t1=0). No sinal do laço1 sempre =1

Como corrigir o erro ?
 
gince:

Como corrigir um erro ?

Para corrigir um erro, é preciso detalhar o algoritmo (não o código, mas o algoritmo). E então sobreponha o código no algoritmo
 
abolk:

Para corrigir o erro, o algoritmo deve ser detalhado

Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 min (600 seg), verificando a cada 60 seg. Se todos os 10 minutos houve um 1, então compre, e se pelo menos uma vez não houve 1, então termine de verificar e considere que não há sinal para abrir.
 
gince:

Um sinal binário 0 ou 1 é recebido. Se um 1 for recebido, então a partir deste momento começamos a verificar se ele se manterá por 10 minutos (600 segundos), verificando a cada 60 segundos. Se todos os 10 minutos fossem um - Comprar, e se pelo menos uma vez não foi um, então termine a verificação e considere que não há sinal para abertura.

Não está claro no código como o sinal discreto0 muda. No código apresentado, o sinal não muda. Há uma tentativa fracassada de trabalhar com t
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Isto é retirado de Moving Average.mq4
Razão: