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

 
Color MA Orlova.
 
Gracias
 

Todavía tengo problemas para entender las funciones de comercio, pero sé un poco de programación.

sería bueno para mí implementar este tipo de algoritmo con su ayuda:

si (condición de compra)

si hay una orden abierta

si esta orden está en el par en el que se ha disparado la condición de compra

si es una orden de venta

cerrarlo

abrir una orden de compra.

Ayúdame a escribir esto, me estoy cansando. He leído mucho, pero aún no lo entiendo.

 
frxmax:

Todavía tengo problemas para entender las funciones de comercio, pero sé un poco de programación.

Sería bueno para mí implementar este tipo de algoritmo con su ayuda:

1. si (condición de compra)

2. si hay una orden abierta

2.1. si esta orden está en el par en el que se ha activado la condición de compra

2.2. si es una orden de venta

3. cerrarlo

4. abrir una orden de compra.

Ayúdame a escribir esto, me estoy cansando. He leído mucho, pero sigo sin entender.


1. ¿Cuál es la condición para comprar?

2. Hacemos un bucle por órdenes de mercado del terminal

2.1 En el bucle (punto 2) comprobamos en qué par está abierta la orden seleccionada y si es la correcta, entonces ...

2.2. Compruebe el tipo de pedido seleccionado y si es Venta ...

3. Cerrar la orden seleccionada

Orden de compra abierta

¿O necesita el código por completo? Esto no es una ayuda, sino un favor bajista. Sin embargo... Si no funciona - escribiré, pero no hay problema...

 

Sí, he escrito y ayudado. Y "cada uno tiene su propia verdad" sobre este tema.

esta es mi versión

if (LoCurent>LoPrevious && FtCurent>FtPrevious)
      {
       ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,0,Green);
       if(ticket>0)
          {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
          }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
// условие ПРОДАЖИ 
   if(LoCurent<LoPrevious && FtCurent<FtPrevious)
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,0,Red);
        if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
        else Print("Error opening SELL order : ",GetLastError()); 
        return(0); 
        }    
    return(0);
 // ЗАКРЫТИЕ СДЕЛОК
 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
               {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
               }
           }else
               {
                 if(LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                     return(0); // exit
                  }
                }
     }
        
     
 }
 

}

Esta es la versión de KONDOR

if(LoCurent<LoPrevious)
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     if(total<1)
     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()!=111) 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+TakeProfit*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-TakeProfit*pp;}
  int res=OrderSend(Symbol(),op,Lot,open_price,1,Bid-StopLoss*Point,Bid+TakeProfit*Point,NULL,mn,0,col); 

   return(res);               
 }
 

El Asesor Experto sigue abriendo operaciones en cada cambio de precio cuando se cumple la condición de abrir una orden.

También hay un problema con las órdenes de cierre en una señal inversa (cubrir una orden de compra cuando se recibe una señal de venta y viceversa).

 
frxmax:

El EA sigue abriendo operaciones en cada cambio de precio cuando se cumple la condición de apertura de la orden.

Otro problema con las órdenes de cierre en una señal inversa (cubrir una orden de compra cuando hay una señal de venta y viceversa).

Esta es otra forma de hacerlo. Escribir un TdR (como piden Sergeev y Composter). Y luego obtener un código de trabajo. De hecho, hay una solución para todos los problemas. Y más de una vez se publicó en este foro.
 

Hola a todos. He oído hablar de forex pero no he entrado en detalles, conozco los fundamentos de la programación en C.

Quiero aprender a programar robots de Forex que generen ingresos.

¿Es realmente difícil? ¿Es posible ganar dinero con esto? ¿Cuál es el requisito mínimo para empezar? ¿Qué tengo que aprender?

 
Vinin:

Hay otra forma de hacerlo. Escribir los TdR (como piden Sergeev y Composter). Y luego obtener un código de trabajo. De hecho, hay una solución para todos los problemas. Y más de una vez expuesta en el foro.
¿Los términos de referencia de la tarea los he entendido bien?
 
frxmax:

1. El asesor sigue abriendo operaciones en cada cambio de precio cuando se cumple la condición de abrir una orden.

2. Otro problema con las órdenes de cierre en una señal inversa (cubrir una orden de compra cuando hay una señal de venta y viceversa).

Requisito previo:

1. Si hay una condición para abrir una orden (de compra); Si no hay una orden abierta (de compra), abra una orden de compra. Del mismo modo, para vender

2. Si hay una condición para abrir una orden de compra, si hay una orden de venta abierta - cerrar la venta.

Así obtenemos:

1. Si hay una señal para abrir una orden de compra ->>

2. Si hay una orden de venta abierta ->>.
2.1 Ciérralo.

3. Si no hay una orden de compra abierta ->> 3.
3.1 Ábrelo.

Del mismo modo, para vender