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

 

¡¡¡¡Todo bien!!!! Si no hay órdenes deseadas, X permanece igual a cero con el número mágico deseado y las órdenes serán abiertas. Si hay alguna, X es igual a 2 y no se abrirán más órdenes.

Entonces, ¿cuál es el problema?

- En un primer momento, se selecciona una orden que no existe mediante la función OrderSelect.

en el primer bucle for(int Uy=Total de pedidos();Uy<=-1;Uy--) Entonces que, bueno el ciclo corre más por la esperanza, luego lo cambié a 0, no hay cambio en el trabajo, todos estos no son errores, no cambian, me disculpo.

 
Inserta una alerta para seguir el trabajo del ciclo. No entiendo nada. ¡¡¡¡La variable, que está en el bucle, sólo una vez, al principio, con un valor de 0, y luego vender stop 0 y comprar stop 130, que también es sorprendente, son simétricos!!!! Y después de 2,5 m de la inscripción ya dice error 148 (broker prohíbe muchas órdenes)
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Qué tontería. Y al principio, cada vez que la fecha no es correcta, unas 49 veces. Sí!!!! X siempre se queda en 0 y escribe bien. En 2 órdenes.

 
¡¡¡¡PRICE_OPEN !!!! - ¡no se puede utilizar este precio! Sólo funciona para los indicadores. Utilice la oferta o la demanda.
 
Dimka-novitsek:

¡¡¡¡Todo bien!!!! Si no hay órdenes deseadas, X permanece igual a cero con el número mágico deseado y las órdenes serán abiertas. Si hay alguna, X es igual a 2 y no se abrirán más órdenes.

Entonces, ¿cuál es el problema?

- En un primer momento, se selecciona una orden que no existe mediante la función OrderSelect.

en el primer bucle for(int Uy=Total de pedidos();Uy<=-1;Uy--) Entonces qué, el bucle se ejecuta más para la esperanza, entonces lo cambié a 0, no hay ningún cambio en el trabajo, estos no son errores, no cambian, me disculpo.

¿Cómo puede funcionar más tiempo que ?

No importa cuántas órdenes estén abiertas, la condición Uy<=-1 no se cumple inmediatamente porque el número de órdenes es mayor o igual a cero inmediatamente

 

Ayúdame a encontrar un error,

Gracias

void TrailPositions()
{
//-----
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


Si los ticks se están ejecutando, el icono del EA está "sonriendo", el EA debería hacer tratos (es decir, aparecen las condiciones para ello), pero no los hace, entonces es necesario depurar.

Ordene el comando price() en el código del EA, especialmente en aquellos lugares donde se compara y vea qué es exactamente lo que se compara. Tal vez, usted tiene una comparación sobre la igualdad de las variables con el tipo double y el resultado de la comparación es siempre falso, mientras que usted asume que las variables son iguales.

¡¡¡Muchas gracias por los consejos!!! He solucionado mi problema. Resultó que el corredor que necesitaba al colocar una orden de mercado, es decir, según las condiciones, no tiene la capacidad de colocar niveles de parada al mismo tiempo. Ahora las órdenes se colocan sin niveles de parada y establezco niveles de parada inmediatamente después de cada orden. Tengo un problema con esto: Sólo una parte muy pequeña de las órdenes se modifican, mientras que la mayoría de las órdenes muestran los siguientes resultados en la sección "Asesores Expertos":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: open #30906670 sell 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: ticket no válido para la función OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: abrir #30906787 comprar 0.01 ESM1 a 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: ticket no válido para la función OrderModify

Este es el texto del código:

{
res=Enviar orden(Símbolo(),OP_Venta,0,01,Oferta,3,0,0, "básico",_NúmeroMágico,0,Rojo);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
return(0);

}

¡Y es la primera orden que se modifica después del inicio del Asesor Experto!

Naturalmente, tengo mal la modificación del orden en el código... Por favor, aconséjeme.

 
¿alguien puede ayudar con una función que muestre los dos últimos extremos en ZZ?
 
Estimados programadores, les pido una sugerencia para mejorar el Asesor Experto: Hay una posición abierta y después de un tiempo hay una señal de reapertura en la misma dirección. Quiero llenar la segunda señal sólo si la primera orden ya está en beneficio. Lo he implementado comparando el tamaño del saldo y la equidad (si la equidad es mayor que el saldo, la orden abierta está en el plus).
¿Puedes sugerir un código para determinar el beneficio/pérdida de la última orden abierta que tienes?
 
Medir en pips, lo más fiable.
 
Roger:
Medir en pips, lo más fiable.
¿Puede darme un código?