CÓMO conseguir que un programador esté 100% interesado en escribir un EA basado en su IDEA - página 11

 

O bien organizar un ajuste de toma de ganancias ajustable en este EA.

Aquí está el código completo.

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

O bien organizar un ajuste de toma de ganancias ajustable en este EA.

Aquí está el código completo.

¿Lo has probado?
 
Registr:
Ultramarina:

O bien organizar un ajuste de toma de ganancias ajustable en este EA.

Aquí está el código completo.

¿Has probado a trabajar?
Si este es el código completo de EA, entonces Registr te ha dado el mejor consejo.
 

Ahora puedo añadir algunos comentarios

1. el operador return(0) perteneciente a la función de inicio debería estar duplicado al menos debajo de una llave. Ya que sólo se ejecutará si se cumple la condición de volumen de 1.

el resto del tiempo la función de inicio debería cerrarse incorrectamente.

las 2 condiciones del valor del indicador llamado <1000 es probablemente la idea para mostrar que en la barra no hay un valor de los buffers

es decir, una especie de cruce (cambio de color del indicador y su posición relativa con respecto al precio actual)

Me temo que en este caso sólo funcionará para aquellos símbolos con el valor del precio actual superior a 1000 (por ejemplo, PDR)

si el indicador dibuja sólo un color en la barra actual (el valor de otro buffer en esta barra es 0)

De lo contrario, en casi cualquier par de divisas, el valor actual del indicador siempre será inferior a 1000, y las condiciones se activarán en cada barra

3. Recomiendo tomar la condición de un nuevo bar de la siguiente manera


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

Ahora puedo añadir algunos comentarios

1. el operador return(0) perteneciente a la función de inicio debería estar duplicado al menos debajo de una llave. Porque ahora sólo se ejecutará si se cumple la condición de volumen de 1.

el resto del tiempo la función de inicio debería cerrarse incorrectamente.

las 2 condiciones del valor del indicador llamado <1000 es probablemente la idea para mostrar que en la barra no hay un valor de los buffers

es decir, una especie de cruce (cambio de color del indicador y su posición relativa con respecto al precio actual)

Me temo que en este caso sólo funcionará para aquellos símbolos con el valor del precio actual superior a 1000 (por ejemplo, PDR)

si el indicador dibuja sólo un color en la barra actual (el valor de otro buffer en esta barra es 0)

De lo contrario, en casi cualquier par de divisas, el valor actual del indicador siempre será inferior a 1000, y las condiciones se activarán en cada barra

3. Recomiendo tomar la condición de un nuevo bar de la siguiente manera


Será mejor que le diga qué teclas debe pulsar... :)
 

Ah, y aquí hay otra cosa.

4. Llamar al indicador personalizado 12 veces es, como mínimo, una blasfemia :)

en tu caso, 6 veces serán suficientes (yo conté esa cantidad de veces)

La velocidad de procesamiento de su EA crecerá no por dos, sino por 1,5 veces en mi opinión. Estas acciones sólo (optimización de código), no se debe confundir con la optimización de los parámetros


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Al menos así

Consulte



 
Por desgracia, no funciona.
 

¿Puede alguien explicar

Hay dos EAs idénticos con parámetros absolutamente idénticos

Uno compra al mismo tiempo que otro vende al mismo tiempo

Los momentos de entrada y salida son los mismos

¿Cómo desaparecen ambos limpiamente?

 
Ultramarin:

¿Cómo pueden ambos fusionarse limpiamente?

En la propagación.