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

 
AlexeyVik:


Y este código

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

y luego en start()

Necesito un stop de compra seguido de un fractal por detrás del precio y un stop de venta con el mismo procedimiento.
 
xant:
Retiro la pregunta, yo mismo lo he resuelto.
No es buena idea descompilar. Aconsejo rehacer el código por completo
 
Petiyashaket:
Necesito un stop de compra seguido (modificado) por fractales de precio hasta que se dispare y un stop de venta de la misma manera.

Así que la pregunta en su código, resaltada en rojo.

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);
          }
        } // это пара к той...
     
       }  

Todavía no has contestado. No sé qué hacer con él, pero el resultado de la ejecución del código será diferente.

 
AlexeyVik:

Así que la pregunta en su código, resaltada en rojo.

Todavía no has contestado. Y a partir de esto el resultado de la ejecución del código será diferente.

¿Por qué utilizaVolumen[0]<2 en la condición?

A veces en una garrapata hay un montón de ellas. Y en este bar la condición no funcionará más.

 
Vinin:

¿Por qué usasVolumen[0]<2 en la condición?

A veces hay un montón de ellos en una garrapata. Y en este bar la condición no funcionará más

Víctor, esta pregunta no es para mí. Utilizo esta función.

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);
}//******************************************************************|

He copiado un trozo de código para hacer una pregunta sobre los paréntesis.

 
Vinin:

¿Por qué usasVolumen[0]<2 en la condición?

A veces hay un montón de ellos en una garrapata. Y en este bar la condición no funcionará más

Eso es lo que Oleg Remizov enseña en YouTube. Esta condición limita el comercio en las noticias y la captura de las pérdidas :)
 
Petiyashaket:
Esto es lo que Oleg Remizov enseña en YouTube, esta condición restringe el comercio en las noticias y la captura de alces :)
No tengo nada que decir sobre Remizov. Pero no se ofenda si su código no tiene barras. Está bien, si tienes un código de un minuto (en qué plazo, por supuesto), pero si vas a correr en una hora o más - sólo habrá pena para ti.
 
AlexeyVik:

Así que la pregunta en su código, resaltada en rojo.

nunca ha sido contestada. Y eso hará que el resultado de la ejecución del código también sea diferente.

He experimentado con los paréntesis de diferentes maneras, los he quitado y añadido, el resultado es el mismo
 
Petiyashaket:
He experimentado con los paréntesis de diferentes maneras, los he quitado y añadido, el resultado es el mismo

No hace falta que experimentes, sino que entiendas el significado de estos paréntesis y cómo aplicarlos. Está escrito en la documentación, no voy a leer una conferencia sobre ello.

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);
          }
        } // это пара к той...
     
       }  
Pero esto es sólo una parte del código. Hay un problema similar más adelante.
 
//+------------------------------------------------------------------+
//|                                                   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);
  }
//+------------------------------------------------------------------+
Si me lo explicas en una línea de código y con comentarios, como en mi código anterior, te lo agradeceré mucho.
Razón de la queja: