[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 84

 
NameLess:


Como habrás notado, la verdadera razón no es mirar el código, sino entender cómo funciona. Si confías en el Asesor Experto, te deseo éxito y que todo salga bien)

Yo personalmente inventé una bicicleta y escribí mi búho desde cero, pero sé dónde y cómo funcionan las cosas y sé por qué no funcionan y dónde buscar los errores)

eso es todo)


Gracias. Ya estoy en el camino correcto))) He tenido que rebuscar, pero he implementado lo que quería (al menos funciona de alguna manera :))) ).
 
NameLess:
¿Sabe cómo configurar el control del número de pedido? Estoy de acuerdo, la pregunta probablemente provoque una sonrisa no disimulada, que se convierte en risa en algunas partes))). Pero sólo he estado hurgando en los códigos de mt-sh desde hace una semana. Todavía no me sé todas las palabras )))) Inteligente )))
 
nemo811:
¿Sabe cómo configurar el control del número de pedido? Estoy de acuerdo, la pregunta probablemente provoca una sonrisa no disimulada, que se convierte en risa en algunos lugares)))) Pero sólo he estado hurgando en los códigos de mt-sh desde hace una semana. Todavía no me sé todas las palabras )))) inteligente )))


no puedo considerarme un experto)))

No estoy muy seguro de lo que significa el control numérico... Si necesita abrir una orden dos veces bajo ciertas condiciones, entonces necesita crear esta condición.

En general, empecé a escribir mi propio programa hace medio año, y un simple detalle me ha ayudado: pensar en lo que quieres que haga el EA o un trozo de código específico.

En este caso, puede ser más fácil dar un ejemplo, y entonces podré decir más específicamente qué hacer y cómo hacerlo, si conozco la solución:)

 

ejemplo en la página 83, tarea de sergeev

El código ha funcionado, gracias. Pero cuando la gente con experiencia dice esas palabras, uno empieza a preguntarse qué pasa.

)))

 
nemo811:

ejemplo en la página 83, tarea de sergeev

El código ha funcionado, gracias. Pero cuando la gente con experiencia dice esas palabras, uno empieza a preguntarse qué pasa.

)))


Si el código hace lo que se supone que debe hacer - entonces eso es)) lo que probablemente quería decir es que el código puede abrir órdenes sin parar, pero lo hicimos para que todo se abriera y aplazara una vez. así que está bien)
 
NameLess:

Si el código hace lo que se supone que debe hacer, entonces está bien)) lo que probablemente quería decir es que el código puede abrir órdenes sin parar, pero lo hemos hecho una vez por apertura y aplazamiento).

Bien. Gracias de nuevo.
 
nemo811:

Por cierto, recomiendo poner algo como

if ( OrdersTotal()!=0)

{

BUY = false;

BUY_STOP = false;

BUY_LIMIT = false;

SELL = false;

SELL_STOP = false;

SELL_LIMIT = false;

}

esta es una protección en caso de que tengas posiciones abiertas en caso de que necesites reiniciar el cliente, de lo contrario reabrirá todo un lote de órdenes

También recomiendo preguntar: piense lógicamente en cada línea: qué puede impedir que funcione.

 
nemo811:

Aquí está una versión ligeramente anticuada de lo que estoy trabajando actualmente. El autor drknn me dio permiso para subirlo.


No sólo ha dado permiso para ponerlo, sino que ha dado abiertamente permiso para cambiar el código como quieras, venderlo e incluso poner los derechos de autor a quien quieras :)

Eso sí, no te pongas a pelear por los derechos allí :)

 
sergeev:
a través del indicador https://docs.mql4.com/ru/indicators/iBandsOnArray
Gracias.
 
NameLess:

Por cierto, recomiendo poner algo como

if ( OrdersTotal()!=0)

{

BUY = false;

....

esta es una protección en caso de que tenga posiciones abiertas en caso de que necesite reiniciar el cliente. de lo contrario, volverá a abrir todo un lote de órdenes

Gracias, es un punto importante. He solucionado este problema y he añadido contadores (gracias a sergeev) para contar los pedidos.

El código ahora tiene el siguiente aspecto (no abre datos innecesarios al reiniciar el terminal):

//--------------------------------------------------------------------
extern int     MAGIC       = 0;        //уникальный номер ордера
extern bool    BUY         = false;    //открыть ордер BUY
extern bool    BUY_STOP    = false;    //поставить ордер BUY STOP
extern bool    BUY_LIMIT   = false;    //поставить ордер BUY LIMIT
extern bool    SELL        = false;    //открыть ордер SELL
extern bool    SELL_STOP   = false;    //поставить ордер SELL STOP
extern bool    SELL_LIMIT  = false;    //поставить ордер SELL LIMIT
extern double  Lot         = 0.1;      //объем ордера
extern int     takeprofit  = 0;        //уровень выставления TP, если 0, то TP не выставляется
extern int     stoploss    = 0;        //уровень выставления SL, если 0, то SL не выставляется
extern int     DistanceSet = 40;       //расстояние от рынка для отложенника
extern int     Proskalz    = 3;        //максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
      BUY=false;
   }
   if (SELL)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell");
      SELL=false;
   }
   if (BUY_STOP)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask + DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Stop");
      BUY_STOP=false;
   }
   if (SELL_STOP)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid - DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Stop");
      SELL_STOP=false;
   }
   if (BUY_LIMIT)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask - DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Limit");
      BUY_LIMIT=false; 
   }
   if (SELL_LIMIT)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid + DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Limit");
      SELL_LIMIT=false;
   }
return(0);
}
void OPENORDER(string ord)
{
   int SchBuy=SchBuy_b(MAGIC);
   int SchSell=SchSell_b(MAGIC);
   int SchBuyStop=SchBuyStop_b(MAGIC);
   int SchSellStop=SchSellStop_b(MAGIC);
   int SchBuyLimit=SchBuyLimit_b(MAGIC);
   int SchSellLimit=SchSellLimit_b(MAGIC);
   int ticket = -1;
   int err;
   while (ticket<0)
   {
      if (SchBuy<1) {if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSell<1) {if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchBuyStop<1) {if (ord=="Buy Stop") ticket=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSellStop<1) {if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchBuyLimit<1) {if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSellLimit<1) {if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}      
      if (ticket==-1) //неудачная попытка
      {  
         ShowERROR();
         err++;Sleep(2000);RefreshRates();
      }
      if (ticket || err >10) return;
   }
return;
}                                    
//--------------------------------------------------------------------
void ShowERROR()
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:   return;
      case 2:   Alert("Нет связи с торговым сервером ",Symbol());return;
      case 3:   Alert("Error неправильные параметры ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",Symbol());return;
      default:  Alert("Error  " ,err," ",Symbol());return;
   }
}

+ contadores apropiados.

Gracias.

Razón de la queja: