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 748

 
AlexeyVik:


E este código

é melhor escrever no init() e é melhor não escrever assim

e depois no início()

Preciso de uma parada de compra seguida de uma parada fractal atrás do preço e uma parada de venda com o mesmo procedimento.
 
xant:
Retiro a pergunta, eu mesmo a resolvi.
Não é uma boa idéia descompilar. Aconselho a retrabalhar o código completamente
 
Petiyashaket:
Preciso de uma parada de compra rastreada (modificada) por fractais de preço até que acione e uma parada de venda da mesma forma.

Portanto, a pergunta em seu código, destacada em vermelho.

if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } // это пара к той...
     
       }  

Você ainda não respondeu. Não sei o que fazer com ele, mas o resultado da execução do código será diferente.

 
AlexeyVik:

Portanto, a pergunta em seu código, destacada em vermelho.

Você ainda não respondeu. E a partir disso o resultado da execução do código será diferente.

Por que você usaVolume[0]<2 na condição?

Às vezes, em um só tique, há um monte deles. E nesta barra, a condição não funcionará mais.

 
Vinin:

Por que você usaVolume[0]<2 na condição?

Às vezes, há um monte deles em um só tique. E nesta barra a condição não funcionará mais

Victor, esta pergunta não é para mim. Eu uso esta função.

bool NewBar()
{
   static datetime lastbar = iTime(_Symbol, PERIOD_H1, 0); // Период можно менять по желанию
   datetime curbar = iTime(_Symbol, PERIOD_H1, 0);         // и будет отсчитывать новый бар заданного периода на любом ТФ
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

Eu copiei um pedaço de código para fazer uma pergunta sobre parênteses.

 
Vinin:

Por que você usaVolume[0]<2 na condição?

Às vezes, há um monte deles em um só tique. E nesta barra a condição não funcionará mais

É o que Oleg Remizov ensina no YouTube. Esta condição limita o comércio nas notícias e a captura de perdas :)
 
Petiyashaket:
Isto é o que Oleg Remizov ensina no YouTube, esta condição restringe o comércio no noticiário e a captura de alces :)
Eu não tenho nada a dizer sobre o Remizov. Mas não fique ofendido se seu código falhar barras. Tudo bem, se você tem um código de minutos (em que prazo, é claro), mas se você vai correr em uma hora ou mais - só haverá pena de você.
 
AlexeyVik:

Portanto, a pergunta em seu código, destacada em vermelho.

nunca foi respondida. E isso fará com que o resultado da execução do código seja diferente, também.

Eu experimentei com parênteses de diferentes maneiras, eu os removi e adicionei, o resultado é o mesmo
 
Petiyashaket:
Eu experimentei com parênteses de diferentes maneiras, eu os removi e adicionei, o resultado é o mesmo

Você não precisa experimentar, você precisa entender o significado destes braquetes e como aplicá-los. Está escrito na documentação, eu não vou ler uma palestra sobre isso.

if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)

        for (int pos=0;pos==OrdersTotal();pos++)
        { // наверное сюда её надо
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } // это пара к той...
     
       }  
Mas isto é apenas uma parte do código. Há um problema semelhante mais adiante.
 
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;}
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;}
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);
//----
  if(Up>0&&Down==0&&Volume[0]<2)
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);
 //----   
    for (int pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),High[3]+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } 
    } 
  else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    for (pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
          {
          OrderModify(OrderTicket(),Low[3]-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
          }      
        }     
    }    
   
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }
//+------------------------------------------------------------------+
Se você me explicar isso em uma linha de código e com comentários, como no meu código anterior, ficarei muito grato.
Razão: