Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 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);

}

¿Es eso correcto? ¿Esta función devolverá el precio del último fractal superior?

 
Trader7777:

¿es esto correcto? ¿Esta función devolverá el precio del último fractal superior?


Ejemplo de búsqueda 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);

}

¿Funcionará o no?

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

}

¿Funcionará o no?


Así, por ejemplo, lo hará:

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

Tal y como lo tienes, no lo hará.

 
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);

}

¿Funcionará o no?


No. Introduzca el código a través del SRC en el panel.

return (ХХХ) regresará de la función del usuario - lo que fue introducido allí será devuelto por esta función - el valor de ХХХ o un resultado de algunas funciones de cálculo.

Por lo tanto, cuando se encuentra un fractal, escribe return (High [i]) - no tienes que inventar nada más.

Muy por delante de ti))

 

Esta es una función elemental de colocación de órdenes pendientes, los parámetros no son importantes, pero es importante para que el Asesor Experto (puede utilizar el bucle existente de órdenes pendientes) después de recibir un "nuevo precio" o para buscarlo, o para evitar de alguna manera la colocación de órdenes al mismo precio. En este caso, el bucle de colocación de órdenes no debe detenerse.

doble Dist=10000,0;
cadena SMB;
double NewPrice;
int i;
int inicio()
{
RefreshRates();
SMB=Símbolo();
{UstanOtlozh();}
}
return(0);
void UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // Aquí se lanza el script
RefreshRates();
SMB=Símbolo();
{
int i=1;
while(i<=Total de pedidos())
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // si hay un
{ // Análisis de pedidos:
if (OrderSymbol()!= SMB) continue; // No es nuestro instrumento financiero.
int Tip=Tipo de pedido(); // Tipo de pedido
if (Tip<2) continue; // Orden de mercado
double NewPrice=OrderOpenPrice(); // Precio del pedido
{
while(Precio nuevo<=Precio+200*Punto||Precio nuevo>=Precio+50*Punto)
{
NuevoPrecio=NuevoPrecio+50*Punto;
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);
if(Precio nuevo>Precio+200*Punto||Precio nuevo<Precio+50*Punto)
romper;
}}}}}}

 
ALXIMIKS:
He arreglado para compilar - y el uso de 555 construir de MT4 EDITOR - que realmente ayuda a encontrar los problemas rápidamente. acaba de leer el manual antes de instalar - las primeras 15 páginas.

Nunca pensé que preguntaría por una cosa tan sencilla. Al compilar, recibo un mensaje de que la función BU() no está involucrada. Lo pongo de esta manera (se da el código) ahora todo compila, pero la función de equilibrio no funciona. Funciona en otros EAs y tiene la misma función 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 pensé que preguntaría por una cosa tan sencilla. Al compilar, recibo un mensaje de que la función BU() no está involucrada. Lo pongo así (se da el código) ahora todo compila, pero la función de equilibrio no funciona. En otros EAs funciona exactamente la misma función de equilibrio.




La única razón es el retorno incorrecto del operador if(...); parece que sólo tiene uno - al principio del programa.
 

¡¡Caballeros!! ¿En qué se confunden ustedes?

iFractals() devuelve el precio, no el número de barra del fractal.

 
tara:

La única razón es un retorno incorrecto del operador if(...); parece que tiene uno - al principio del programa.
Este ha sido eliminado. Pero el problema está en otra parte: en la normalización. Por alguna razón, mi Asesor Experto ha leído 4 decimales, y no 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);
}
¿Cómo solucionarlo?
Razón de la queja: