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

 
VoDyaMon:

Si se escribe un script simple que crea un objeto de tipo OBJ_ARROW_RIGHT_PRICE y luego lo elimina, el objeto no se borra. Además, el comando ObjectType resulta de repente que el objeto creado no es del tipo OBJ_ARROW_RIGHT_PRICE (==36), sino ==22, es decir, ¡¡¡una simple "flecha hacia arriba"!!! ¿Soy el único al que le pasa esto o a todo el mundo le pasa?

Ya había opiniones de "expertos" sobre este tema: como leer la ayuda, o no tener suficiente memoria :) .

La memoria es suficiente.

Parece que el comando ObjectCreate dibuja un objeto del tipo OBJ_ARROW_RIGHT_PRICE , que no puede ser eliminado por el comando ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE), pero sí por el comando ObjectsDeleteAll(0,22), como si no tuviéramos la etiqueta del precio correcto sino una "flecha hacia arriba". ¿De quién es la culpa?

... ... ...

Para eliminar un objeto de tipo OBJ_ARROW_RIGHT_PRICE utilice el comando ObjectsDeleteAll(0,OBJ_ARROW), con indicación obligatoria de la subventana.

p.d. Un objeto de tipo OBJ_ARROW es "flecha" cualquiera, no sólo "flecha hacia arriba". ObjectCreate(...OBJ_ARROW...) crea una "flecha hacia arriba" inmediatamente. ¿Por qué no está en la ayuda?

Escribe en este hilo. Al menos los desarrolladores están ahí.
 

Hay un guión:

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

Que ni siquiera intenta cerrar una sola orden de mercado actualmente abierta. ¿Por qué?

No escribe ningún error en el registro:

2014.03.10 04:39:11.093 Script closeallmarket AUDUSD,M30: removed<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: uninit reason 0
2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: inicializado
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30: cargado con éxito
 

Sustituir

 for(int i=OrdersTotal()-1;i<=0;i--)

a

 for(int i=OrdersTotal()-1;i>=0;i--)
 

Hola Sr. profesionales.No te niegues a un recién llegado a la programación, mira el código, para ver si está escrito correctamente. Que no es demasiado perezoso para ocuparse de ello. No puedo probarlo en el Probador de Estrategias porque es multidivisa. Fichero con el código y los indicadores adjuntos al archivo.



Archivos adjuntos:
 

Por la tarde.

No puedo hacer un código análogo de php a mql4:

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

Es decir, de un array.

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

Necesito obtener un array

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

Necesito ayuda.

 
Roger:

Sustituir

a


Ohhhh... Hombre, eso es otra vez, gracias ))))
 

Estoy tratando de escribir un simple EA que cierre todas las posiciones de mi cuenta cuando alcance los valores especificados de ganancias o pérdidas en la moneda de depósito (abierta por varios símbolos), pero cierra las posiciones tan pronto como aparecen (((

No entiendo qué pasa:

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

Hola Sr. profesionales.No se niega un recién llegado a la programación, mira el código, para ver si está escrito correctamente. Que no es demasiado perezoso para ocuparse de ello. No puedo probarlo en el Probador de Estrategias porque es multidivisa. He adjuntado al archivo un fichero con el código y los indicadores.



Me interesa mucho cómo un principiante está tan decidido a operar con un Asesor Experto de este tipo y a escribir un sistema de trading que valga la pena. ¿No me da pena el depósito?


El código muestra un montón de errores sin entrar en el algoritmo de negociación, ningún intento de optimizarlo.

Por favor, encuentre la diferencia entre sus funciones CountBuy_JPY() CountSell_JPY() CountBuy_GBP() En la salida de cualquiera de ellas se obtiene el mismo resultado, en Buy todas las posiciones abiertas de Buy, en otras todas las de Sal. Intenta escribir todas estas funciones en una sola y obtén dos matrices enlazadas con símbolos y número de órdenes en ella.

Estás tan lejos del Probador como la luna. Deberías escribir scripts para cada función y mirar lo que obtienes, luego ejecutar el depurador y mirar todas las variables. Esta es la única manera de avanzar gradualmente

 
evillive:

Estoy tratando de escribir un simple EA que cierre todas las posiciones de mi cuenta cuando alcance los valores especificados de ganancias o pérdidas en la moneda de depósito (abierta por varios símbolos), pero cierra las posiciones tan pronto como aparecen (((

No entiendo qué pasa:


Analizar la condición ... Y el consejo es el mismo, utilizar los scripts de impresión, y comentar las operaciones comerciales por ahora y depurar
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

Estoy tratando de escribir un simple EA que cierre todas las posiciones de mi cuenta cuando alcance los valores especificados de ganancias o pérdidas en la moneda de depósito (abro por varios símbolos), pero cierra las posiciones tan pronto como aparecen (((

No entiendo qué pasa:



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }