Problemas de comprobación del comercio abierto - página 5

 
BrotherPyrus:
Hola Daz & Co,

hothand funciona en MT4 de cinco dígitos, pero no en una plataforma de cuatro dígitos.
¿Puedes ser más específico sobre cómo no funciona?
 
BrotherPyrus:
hothand funciona en MT4 de cinco dígitos, pero no en una plataforma de cuatro dígitos. ¿Alguna idea de lo que causa esto, y alguna pista sobre cómo solucionarlo?
Los EA's deben ajustarse para 4/5 dígitos, TP, SL, Y deslizamiento. En los brokers ECN primero hay que abrir y LUEGO poner los stops.
//++++ These are adjusted for 5 digit brokers.
int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){
    if (Digits == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
 
   if(iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
                  {

                          
                              //  if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside bar
                                if(iHigh(hothand(), 60, 2)>iHigh(hothand(), 60, 1) && iLow(hothand(), 60, 2) < iLow(hothand(), 60, 1)) // see if we have an inside bar
                                 {                                                                                                     // on the hothand pair
                                           
                                        // IB found 
                                        if(iHigh(hothand(), 60, 1) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
                                          {
                                             int    buyspread=MarketInfo(hothand(),MODE_SPREAD);
                              double buyentry =  iHigh(hothand(), 60, 1) + 10 + buyspread;  //Low of prev bar + 1 pip + spread
                              double buystop = iLow(hothand(), 60, 1) - 10;    //Low of prev bar - 1 pip
                              double buytpx1 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1)); //1:1 r:r
                              double buytpx3 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx3, "DIBSBUY", Mnumber3);
                            }
                            
                         if(iLow(hothand(), 60, 1) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
                            {
                              int    sellspread=MarketInfo(hothand(),MODE_SPREAD);
                              double sellentry = iLow(hothand(), 60, 1)-10; //Low of prev bar - 1 pip 
                              double sellstop = iHigh(hothand(), 60, 1)+ 10 + sellspread; // High of prev bar + 1 pip + Spread
                              double selltpx1 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1)); //1:1 r:r
                              double selltpx3 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx3,"DIBSSELL",Mnumber3);  //Open Sell Order
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

Muy bien, estoy de vuelta,


Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o de venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,

WHRoeder gracias por pasar por aquí y ayudar de nuevo también. El problema es que no se puede hacer un seguimiento de los datos de la cuenta de resultados de la cuenta de resultados. Estoy seguro de que puede detectar un millón de cosas mal con ese código también.

 
  1. OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    

    No ajusta el deslizamiento para 4/5 dígitos. No es compatible con ECN

    Siempre pruebe los códigos de retorno para averiguar por qué no funciona

    int ticket = OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    if (ticket < 0) Alert("OrderSend [1] failed: ",GetLastError());

  2. buystop = iLow(hothand()...
    Tus stops están basados en el par hothand(), pero estás abriendo una orden con Symbol(). Si no son iguales los stops son completamente falsos
 
dazamate:

Muy bien, estoy de vuelta,


Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,


Algunos comentarios generales:

usted compra en Ask y vende en Bid

si tu broker es de tipo ECN no puedes poner el SL y el TP cuando colocas la orden (en este caso los pones a 0), tienes que colocar la orden, luego modificar la orden para añadir el SL y el TP

compruebe siempre el resultado de la colocación de una orden y compruebe los errores devueltos, tendrá que manejarlos actuando en consecuencia

si planea tener este EA en múltiples gráficos, es decir, colocar órdenes desde múltiples gráficos, necesitará algún tipo de Mutex para evitar Order Context Busy (revise los posts de WHRoeder, él tiene un excelente Mutex)

 
Damm WHRoeder, su derecho "nuestras paradas se basan en el par hothand(), pero usted está abriendo una orden con Symbol()" No me di cuenta de eso. Que estupidez. Estas cosas son tan fatigosas mentalmente mientras tratas de aprenderlas. Pero sí estúpido. Gracias por repasar este lío. Probablemente me tome un descanso y vuelva mañana con la mente despejada. Arreglaré las cosas que has señalado.
 
dazamate:

Pero parece que solo abre operaciones en el eurusd que es el gráfico al que lo he adjuntado,

Sí, . . .

OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order

Symbol () es el par al que se adjunta el EA/Indicador, ¿se refiere a esto en su lugar?

OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
 

Sí, lo hice, pero ahora me sale este error


http://clip2net.com/s/144hq


Como que no reconoce la salida del par de la función hothand. La salida de la función hothand es una cadena así que no veo por qué no funciona

 
dazamate:
Como que no reconoce la salida del par de la función hothand. La salida de la función hothand es una cadena así que no veo por qué no funciona
OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
  1. El precio de compra/venta es el precio actual de Symbol() pero está intentando abrir otro par. Precio falso.
  2. No puede obtener los valores de barra cero del probador para otros TF/pares
  3. No puede abrir operaciones de otros pares en el probador, IIRC
  4. Nombre de símbolo desconocido USDCHF para la función OrderSend
    ¿De dónde sacas esa cadena? ¿Es el gráfico actual el mismo patrón, o USD,EUR, o USD/EUR, o USDEURm, o USDEURfxf etc.
  5. Le sugiero que SOLO opere con el par actual. Si hothand() no es el actual, no hay operaciones. De esta manera funciona en el probador, siempre se puede poner el EA en otros pares controlando así los pares que comercia, Y se evitan todas las trampas.
 

Hola chicos, estoy intentando hacer un código que haga lo siguiente


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour(TimeCurrent());


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 

   if(TimeHour(TimeCurrent()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
           OrderType()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
            OrderMagicNumber()==(Mnumber1||Mnumber3))    // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderSelect(tnumber, SELECT_BY_POS);     // Select order
                OrderDelete(tnumber);                    // Delete it
               }
        }
     }

Si una orden pendiente ha estado abierta durante x cantidad de barras la elimine si el número de barras ha superado x


Algo podría estar mal con mi lógica tal vez?