Problemas na verificação de comércio aberto - página 5

 
BrotherPyrus:
Hey Daz & Co,

trabalha em um MT4 de cinco dígitos, mas não em uma plataforma de quatro dígitos.
Você pode ser mais específico sobre como ele não funciona?
 
BrotherPyrus:
trabalha em um MT4 de cinco dígitos, mas não em uma plataforma de quatro dígitos. Alguma idéia do que causa isto, e alguma pista sobre como consertá-lo?
Os EA devem se ajustar para 4/5 dígitos, TP, SL, AND slippage. Nos corretores ECN você deve abrir primeiro e ENTÃO definir paradas.
//++++ 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
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

Muito bem, estou de volta,


Esta é a parte do meu código onde as negociações são executadas, por enquanto vou trabalhar apenas com 5 dígitos. A idéia aqui é que eu usei minha função hothand para escolher qual par é o melhor para negociar no dia. Este código deve procurar por uma barra interna no gráfico de 1 hora. ( A função hothand retorna uma seqüência do par btw) Quando ela encontra uma barra interna, eu acabei de obtê-la para abrir uma compra ou venda plana para fins de teste. Não tenho certeza se o backtester pode lidar com a negociação de múltiplos pares a partir de 1 gráfico? Eu baixei o histórico de 1min para todos os pares que ele usa. Mas parece que só abre negócios no eurusd que é o gráfico ao qual eu o anexei,

WHRoeder agradece por ter aparecido e ajudado novamente também. Então, a maneira correta de abrir um comércio com uma ea para abri-lo é voltar e preencher o sl e tp depois que ele abriu? Tenho certeza de que você também pode detectar um milhão de coisas erradas com esse código.

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

    Não ajustando o escorregamento para 4/5 dígitos. Não compatível com ECN

    Teste sempre os códigos de retorno para descobrir POR QUE não 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()...
    Suas paradas são baseadas no par hothand(), mas você está abrindo um pedido com Symbol(). Se eles não forem os mesmos, as paradas são completamente falsas.
 
dazamate:

Muito bem, estou de volta,


Esta é a parte do meu código onde as negociações são executadas, por enquanto vou trabalhar apenas com 5 dígitos. A idéia aqui é que eu usei minha função hothand para escolher qual par é o melhor para negociar no dia. Este código deve procurar por uma barra interna no gráfico de 1 hora. ( A função hothand retorna uma seqüência do par btw) Quando ela encontra uma barra interna, eu acabei de obtê-la para abrir uma compra ou venda plana para fins de teste. Não tenho certeza se o backtester pode lidar com a negociação de múltiplos pares a partir de 1 gráfico? Eu baixei o histórico de 1min para todos os pares que ele usa. Mas parece que só abre negócios no eurusd que é o gráfico ao qual eu o anexei,


Alguns comentários gerais:

você compra na Ask e vende na Bid

se seu corretor for do tipo ECN, você não pode definir SL e TP ao fazer o pedido (neste caso, defina-os como 0), você tem que fazer o pedido, então modifique o pedido para adicionar o SL e TP

verificar sempre o resultado de um pedido e verificar se há erros devolvidos, você precisará lidar com eles agindo de acordo

se você planeja ter este EA em vários gráficos, ou seja, colocar ordens de vários gráficos, você precisará de algum tipo de Mutex para evitar o Contexto de Ordem Ocupado (verifique os postos do WHRoeder, ele tem um excelente Mutex)

 
Damm WHRoeder, seu direito "nossas paradas são baseadas no par hothand(), mas você está abrindo uma ordem com Symbol()" eu não notei isso. Que estupidez. Este material fica tão cansado mentalmente enquanto você tenta aprendê-lo. Mas sim, estúpido. Obrigado por ter passado por essa confusão. Provavelmente terei uma pausa e voltarei amanhã com a mente livre. Vou consertar essas coisas que você apontou.
 
dazamate:

Mas parece apenas abrir negócios no eurusd, que é o gráfico ao qual o anexei,

Sim, . . .

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

Símbolo () é o par ao qual o EA/Indicador está anexado, você quis fazer isso em vez disso ?

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

Sim, eu queria fazer isso, mas agora recebo este erro.


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


Como se não reconhecesse a saída do par da função hothand. A saída da função hothand é uma corda, então eu não vejo o que ela não funcionará.

 
dazamate:
Como se ele não reconhecesse a saída do par da função hothand. A saída da função hothand é uma corda, então eu não vejo o que ela não vai funcionar.
OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
  1. Ask/Bid é o preço atual Symbol(), mas você está tentando abrir outro par. Preço falso.
  2. Você não pode obter valores de barra zero do testador para outros TF/pares
  3. Você não pode abrir negócios de outros pares no testador, IIRC
  4. nome do símbolo desconhecido USDCHF para a função OrderSend
    Onde você consegue essa corda? O gráfico atual é o mesmo padrão, ou USD,EUR, ou USD/EUR, ou USDEURm, ou USDEURfxf, etc.
  5. Sugiro que você comercialize SOMENTE o par atual. Se hothand() não é a corrente, não há trocas. Dessa forma, você pode sempre colocar o EA em outros pares, controlando assim quais pares ele comercializa, E você evita todas as armadilhas.
 

Olá pessoal, estou tentando fazer um código que faça o seguinte


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
               }
        }
     }

Se uma ordem pendente tiver sido aberta para x quantidade de barras exclua-a se o número de barras tiver excedido x


Algo pode estar errado com minha lógica, talvez?