OrdemFechar não funciona - página 5

 
Obrigado GumRai
 

Hi,


Eu anexo a EA a poucos gráficos de moedas diferentes. A EA abrirá muitas ordens em um único gráfico se as condições forem atendidas. Qual codificação para garantir apenas uma ordem por gráfico?

 
chuale:

Hi,


Eu anexo a EA a poucos gráficos de moedas diferentes. A EA abrirá muitas ordens em um único gráfico se as condições forem atendidas. Qual codificação para garantir apenas uma ordem por gráfico?


Faça um loop através das ordens abertas e verifique o número mágico e o símbolo.

Se já houver uma ordem aberta, não abra mais.

PS. Você realmente deveria ter iniciado um novo tópico, pois sua pergunta não está de forma alguma relacionada com o título do tópico :)

 
chuale:

Oi thrdel,

O tempo[0] está se referindo à hora da barra 0? Existe Tempo[1], Tempo [2] etc.? Tentei pesquisar no Google, mas não há muita informação na Internet. Além disso, se eu anexar este EA a dois pares de moedas, isso significa que OrderSelect seleciona apenas as ordens no próprio gráfico ou todas as ordens no terminal?




Tempo[0] é a barra de tempo atual que começou. Sim, Tempo[1] é o tempo em que a barra anterior começou e assim por diante.

Se você quiser executar a mesma EA em mais de um gráfico, você precisa ter certeza de que a variável "MagicMunber" é diferente para cada EA mesmo que você tenha o mesmo símbolo em gráficos diferentes.

Então as EA não interferirão nas ordens um do outro.

OrderSelect() não recebe o valor do gráfico, mas do servidor.

As informações sobre sua conta e suas ordens são armazenadas no servidor e é por isso que quando você vira seu computador, sua parada de ordem ou tp ainda é executada.

 
chuale:

Oi thrdel,


Por que recebo esta mensagem de advertência "conversão implícita de 'número' para 'string' postin forum.mq4 69 61" para a codificação " if(ticket<0)Print("Error OP_BUY order failed, error: "+GetLastError()));"?


Se você quiser exibir uma variável dupla com Comentário() ou se você quiser imprimir com Impressão(), você tem que convertê-la em string com a função DoubleToString().

Para as variáveis int a conversão é óbvia, então se você não usar IntToString () para fazer isso, ela ainda compilará e trabalhará, já que é tão óbvia.

 
chuale:

Hi,


Eu anexei EA a poucos gráficos de moedas diferentes. O EA abrirá muitas ordens em um único gráfico se as condições forem atendidas. Qual codificação para garantir apenas uma ordem por gráfico?


Olá Chuale,

Fiz algumas mudanças na sua EA para colocá-la em funcionamento.

MagicNumber é uma variável que você tem que ter certeza de que é diferente em cada gráfico!

Se você quiser que eu lhe explique por que e como as mudanças funcionam, eu ficarei feliz em ajudar se eu puder.

Você mesmo pode fazer alguns testes e ver como funciona, eu o testei em USDJPY.

As variáveis Max e Min estão substituindo o valor 1 e -1 em seu estado para que você possa otimizar e ver se outros valores funcionam melhor.


if(bar2 <-1) //changed to 
if(bar2 < Min
if(bar2 > 1) //changed to 
if(bar2 > Max

Você sabe como otimizar os parâmetros?

Se você tiver alguma dúvida, me avise ou pm.

Aqui está o código:

//+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=150;
extern double   Lots=0.1;
extern double   StopLoss=300;
extern int      Max = 6;
extern int      Min = -9;
extern int      MagicNumber = 12345;
extern int      Slip  = 3;
double     bar1;
double     bar2;
double     bar3;
double     bar3max,bar3min;
int        myTrades,ticket;
datetime   previousTime;
int        xMultiply;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---
if(Digits==3) xMultiply=100;
if(Digits==5) xMultiply=10000;
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
 
   myTrades = CountTrades();
//
   bar1=(iClose(Symbol(),0,2)-iClose(Symbol(),0,3))*xMultiply;
   bar2=(iClose(Symbol(),0,1)-iClose(Symbol(),0,2))*xMultiply;
   bar3=(iClose(Symbol(),0,0)-iClose(Symbol(),0,1))*xMultiply;
   //
   if(myTrades>0)
     {
      if(bar3<Min) CloseThisSymbolAll("OP_BUY");
      if(bar3>Max) CloseThisSymbolAll("OP_SELL");
     }
  //
   if(Time[0]==previousTime) return(0);    
   previousTime=Time[0];          
   //
   if(myTrades<1)
     {
      if(bar2>1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
         if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); 
         return(0);
        }
      if(bar2<-1)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
         if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
         return(0); 
        }
     }
   return(0);
  }
//========================================================================
int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
   if(OrderType()==OP_SELL || OrderType()==OP_BUY)
   count++;
   }
return(count);
}
//========================================================================
void CloseThisSymbolAll(string direction)
  {
  string dir = direction;
   int trade;
   for(trade=OrdersTotal();trade>=0;trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         if(OrderType()==OP_BUY && dir == "OP_BUY")OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
         if(OrderType()==OP_SELL&& dir == "OP_SELL")OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
        }
     }
  }
//========================================================================
 

Oi thrdel,


Muito obrigado. você é muito gentil e prestativo. eu passarei primeiro pela sua codificação. Mais uma vez, obrigado.

 

Oi Thrdel,

Isso significa que tenho que tentar com valores diferentes de Max e Min para cada backtest, a fim de determinar qual é o valor mais optimunitário?

Obrigado

Razão: