Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 747

 
TarasBY:

2) No puede haber fractales SUPERIOR y INFERIOR en la misma barra al mismo tiempo, respectivamente, compruebe

pertenece a la categoría de la idiotez del programador.

Así que estas citas son sólo para idiotas.


 
TarasBY:

2) No puede haber fractales SUPERIOR y INFERIOR en la misma barra al mismo tiempo, respectivamente, compruebe

pertenece a la categoría de idiotez de los programadores.


Ambos fractales pueden estar en la misma barra
 
Vinin:
Ambos fractales pueden estar en la misma barra
quería decir minutos, pero se olvidó de los meses
 
Hola

Hay la siguiente línea en el código

 if (G_time_344 == Time[0]) return (0);
Según tengo entendido, es el responsable de que el EA retrase el recálculo hasta que aparezca una nueva barra. Hasta que no cambie la hora de apertura de la barra cero, el recálculo se detiene.

En consecuencia, si abro un EA en minutos, se recalculará con cada nuevo minuto. Y si lo abro en H4, se recalculará cada 4 horas.

¿Cómo escribir esta línea correctamente, para que el EA no tome la hora de apertura de la barra actual, es decir, la barra en la que está abierto el terminal, sino la que yo especifique en la configuración? Es decir, coloco el EA en H4, por ejemplo, y recalculará cada 5 minutos, porque así lo he configurado. O cada minuto.


 
_new-rena:
quería decir minutos, pero se olvidó de los meses

¿Cuál es la diferencia entre minutos y meses?


 
evillive:
¿De qué se queja el registro de modificaciones? "Estúpidamente abre nuevas órdenes pendientes" porque no hay límite, pero hay un OrderSend.
No hay errores, sólo triángulos amarillos.
 
AlexeyVik:

¿Cuál es la diferencia entre minutos y meses?

Estoy de acuerdo, hay momentos agradables en la M1 también. pero en los meses cada bar es así.
 
No hay más preguntas, lo he resuelto yo mismo.
 
TarasBY:

1) Cualquier estrategia debe estar definida por el número de órdenes abiertas al mismo tiempo. En consecuencia, antes de abrir la siguiente orden, debemos comprobar cuántas están ya abiertas.

2) En una barra, no puede haber fractales SUPERIORES y INFERIORES al mismo tiempo, respectivamente, el control se clasifica como

pertenece a la categoría de la idiotez del programador.

3) Antes de escribir las condiciones para devolver los valores del indicador de la memoria intermedia, es necesario saber exactamente qué valor es "vacío" para ella. ¿Has comprobado que es 0?

4) La construcción.

Aunque funcionará (en la mayoría de los casos), pero no es natural, porque es una idea de "libre albedrío" del promotor, y es poco informativa para el comerciante. Una alternativa: el seguimiento de un nuevo bar.

5) Hay que empezar por lo básico, porque esto:

Indica que no entiendes nada de lo que escribes.

La mejor manera de entenderlo es estudiar cómo funcionan los códigos de otras personas y modificarlos para tus propios fines. Buena suerte.

Los muestra tal y como están escritos, punto por punto. No los modifica, de lo que no has dicho ni una palabra. Aquí está el código completo:
//+------------------------------------------------------------------+
//|                                                   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)     //если верхний фрактал есть а нижнего нету и прошло не больше 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);
          }
        }
     
       }   
   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);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-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);
  }}
//+------------------------------------------------------------------+
Intento escribir como he leído, mirado, entendido. Tu crítica me recuerda a un manual de MQL4 - lo entiendo sólo si alguien me lo explica.
 
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);
          }
       } // это пара к той...
      }
     


Y este código

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;} // условие для четырехзнака

es mejor escribir en init() y mejor no así

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

y luego en start()

tp = High[3]+TP*point;