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 328

 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
double LastUpperFractalPrice = High [i]; return (LastUpperFractalPrice);

}

isso é correto? Esta função devolverá o preço do último fractal superior?

 
Trader7777:

isto é correto? Esta função devolverá o preço do último fractal superior?


Exemplo de uma busca fractal
 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

Isto vai funcionar ou não?

 
Trader7777:
duplo GetLastUpperFractalPrice()
{
para (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
{
duplo LastUpperFractalPrice = Alto [i];
}
}
retorno (LastUpperFractalPrice;)

}

Isto vai funcionar ou não?


Assim, por exemplo, será:

double GetLastUpperFractalPrice()
{
   for (int i = 3; i<=Bars; i++)
   {
      if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
      {
         return(High [i]);
      }
   }
   return(EMPTY_VALUE);
}

Como você tem, não vai.

 
Trader7777:
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

Vai funcionar ou não?


Não. Insira o código através do SRC no painel.

return (ХХХ) retornará da função do usuário - o que foi inserido ali será retornado por esta função - o valor de ХХХ ou um resultado de algumas funções de cálculo.

Assim, quando um fractal é encontrado, escreva retorno (Alto [i]) para produzir o preço máximo da i-ésima barra - você não precisa inventar mais nada.

Bem à sua frente))

 

Esta é uma função elementar de colocar ordens pendentes, os parâmetros não são importantes, mas é importante fazer o Expert Advisor (ele pode usar o laço existente de ordens pendentes) depois de receber um "novo preço" ou para redefinir ou evitar colocar ordens pelo mesmo preço. Neste caso, o ciclo de fazer pedidos não deve parar.

dupla Dist=10000.0;
SMB de corda;
duplo NewPrice;
int i;
int start()
{
RefreshRates();
SMB=Símbolo();
{UstanOtlozh();}
}
retorno(0);
vazio UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // Aqui o script é jogado
RefreshRates();
SMB=Símbolo();
{
int i=1;
while(i<=OrdensTotal())
{
se (OrderSelect(i-1,SELECT_BY_POS)==verdadeiro) // se houver um
{ // Análise de pedidos:
se (OrderSymbol()!= SMB) continuar; // Não nosso instrumento financeiro.
int Tip=OrderType(); // Tipo de pedido
se (Dica<2) continuar; // Ordem de mercado
duplo NewPrice=OrderOpenPrice(); // Preço do pedido
{
while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point)
{
NewPrice=NewPrice+50*Point;
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);
if(NovoPreço>Ask+200*Ponto||NovoPreço<Ask+50*Ponto)
pausa;
}}}}}}

 
ALXIMIKS:
Eu o consertei para compilar - e usar 555 build de mt4 EDITOR - ele realmente ajuda a encontrar problemas rapidamente. basta ler o manual antes de instalar - as primeiras 15 páginas.

Nunca pensei que estaria perguntando sobre uma coisa tão simples. Ao compilar, recebo uma mensagem de que a função BU() não está envolvida. Coloco desta forma (o código é dado) agora tudo se compila, mas a função breakeven não funciona. Funciona em outros EAs e tem a mesma função de Breakeven.

int start()
  {
   if(Volume[0]>1) return; 
  
   if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2])  // продажа
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
   }
   else
   if (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);   
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
    }
   if (CountTrades()>0)
      {
      otype = FindLastOrderType();
      if (otype == OP_BUY)
         { // ценапоследнего ордера на покупку
         price = FindLastBayPrice();
         
         if ((Bid - price) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);  
            }
         }
      else if (otype == OP_SELL)
         { // цена последнего ордера на продажу
         price = FindLastSellPrice();
         
          if ((price - Ask) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);  
            }
         }
      }
    BU();  
    return(0);
  }
 
alexey1979621:

Nunca pensei que estaria perguntando sobre uma coisa tão simples. Ao compilar, recebo uma mensagem de que a função BU() não está envolvida. Coloco desta forma (o código é dado) agora tudo se compila, mas a função breakeven não funciona. Em outros EAs funciona exatamente a mesma função de breakeven.




O único motivo é incorreto se(...) o operador retornar; parece que você tem apenas um - no início do programa.
 

Cavalheiros!!! O que vocês estão confusos?

iFractals() retorna o preço, não o número de barras do fractal.

 
tara:

A única razão é um operador incorreto se(...) voltar; parece que você tem um - no início do programa.
Este foi removido. Mas o problema está em outro lugar - na normalização. Por alguma razão, meu consultor especializado leu 4 casas decimais, e não 5.
extern double  Lots             = 0.1;
extern string Сomment           = "Pattern_1";
extern int TakeProfit           = 10;     
extern int StopLoss             = 0;   
extern int Step                 = 2;   

extern int BULevel              = 2;
extern int   NotBULevel         = 2;         // Уровень безубытка в пунктах

extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 111;



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==5) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
            Step *= 10;
            BULevel *= 10;
            NotBULevel *= 10;
         }
      return(0);
}
Como consertá-lo?