[¡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 357

 
Zhunko:
¿Te importaría publicar el código? Tal vez un pseudocódigo. ¿Cómo que sin empezar...? Es una función básica, como main() en C++.

Depende de las tareas que vayas a resolver y determina la ubicación de tu código en el cuerpo del programa EA. Nadie nos obliga a mantener el código en la función start().

La función start() es una de las tres predefinidas en nuestra plantilla de código. Debe estar presente por lo menos!, porque el programa de los padres - el programa de la terminal (esto es main(), el principal), la realización de sus tareas principales, recibiendo una cita fresca desde el servidor (más o menos) sólo mirar en su función de inicio y ejecutar el código, que está en ella, si se acaba de regresar(), entonces la función de inicio se detendrá aquí.

 
"Profesionales, no paséis de largo", :) por favor, compartid un enlace a vuestra fuente de noticias favorita (preferiblemente en ruso), donde se publique el calendario económico y otras cosas útiles. Si esos enlaces no pueden publicarse aquí, envíenlos por MP.
 
ayúdame a escribir esto.

si hay señal de compra
comprueba las órdenes de venta abiertas
si hay, cierra
si no hay, abre la compra

si hay señal de venta
comprueba las órdenes de compra abiertas
si hay, cierra
si no hay, abre la compra
 
frxmax:
ayuda para escribir lo siguiente.

si hay una señal de compra
Comprobar las órdenes de venta abiertas
si es así, cierre
si no hay señal de compra

si hay una señal de venta
Comprobar las órdenes de compra abiertas
si es así cerramos
si no hay señal, reabrir la compra


Empiece a escribir usted mismo - nosotros le ayudaremos

aquí tienes un punto de partida para ayudarte https://book.mql4.com/ru/

 
abolk:


Empiece a escribir usted mismo - nosotros le ayudaremos

aquí tienes https://book.mql4.com/ru/

Ya he "empezado".

total=Total de pedidos();
if(CONDITION para abrir una orden de compra)
if(total<1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+100*Point, "Buy",1111,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}sin embargo
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL)
OrderClose(NULL,Lot,Ask,3);
return(0);
}
}

 
Casi correcto, solo hay que comprobarlo primero y luego configurarlo.
 
frxmax:
ayuda para escribir lo siguiente.

si hay una señal de compra
Comprobar las órdenes de venta abiertas
en caso afirmativo, cerrar
Si no hay señal podemos abrir una orden de compra
//  в ф-ции старт 
  
if(....условие покупки....){
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     Ticket(OP_BUY);      }

//-----------------------
int CalculateOrders(string simbol,int type)
  {
   int count=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }

//---------------------

void Ord_Close(string simb,int type) {  double price;
   
   if(type==OP_BUY)  price=MarketInfo(simb, MODE_BID); else
   if(type==OP_SELL) price=MarketInfo(simb, MODE_ASK);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if( OrderSymbol()!=simb || OrderMagicNumber()!=mn) continue;
      //---- check order type 
      if(OrderType()==type)
        {  OrderClose(OrderTicket(),OrderLots(),price,3,White);   break;  }
        
        
     }   
     
     
 } 
//-----------------------------

int Ticket(int op){
      double pp = MarketInfo(Symbol(), MODE_POINT);
      double pBid = MarketInfo(Symbol(), MODE_BID);
      double pAsk = MarketInfo(Symbol(), MODE_ASK); 
      double open_price;
      double T;
      color col=NULL;
      int mn=0;
      
  if(op==0) {open_price=pAsk; col=Blue; T=pAsk+Take*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-Take*pp;}
  int res=OrderSend(Symbol(),op,0.1,open_price,0,0,T,NULL,mn,0,col); 

   return(res);               }
 
KONDOR:

Muchas gracias por tu ayuda, pero yo he hecho las cosas de una manera un poco diferente y tu planteamiento no me queda claro.

¿Podría explicarme cómo venderlo todo? Hay muchas cosas que no entiendo aquí.

Ha sido muy útil.

 
frxmax:

Traté de voltear todo para vender - falló. no hay operaciones abiertas

Error 130. - Las paradas no son correctas, así que ¿dónde las tenemos allí?

Ahora abre una orden para cada barra, pero sólo necesito una.


total=Total de pedidos();

if(total<1)

etc.

 
KONDOR:


Hmm, he profundizado en el juego - ofertas y peticiones de cambio etc... gracias por ello)

Yo también tengo los topes resueltos.