[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 477

 

demlin:
Еще вопрос: какой функцией можно вытащить стоимость одного пункта инструмента?

https://docs.mql4.com/ru/constants/marketinfo

MarketInfo(Symbol(), MODE_TICKVALUE);
 
LazarevDenis:

Por favor, diga-me qual código deve ser escrito na EA para fazer o comércio da EA apenas uma vez por hora

Por exemplo, a EA acionou, uma ordem é aberta (não estou interessado em mais), eu gostaria que a ordem não fosse aberta no bar atual em um período de uma hora

tudo é parecido:

int hh;
em Hora Atual;
CurrentHour=TimeHour(TimeCurrent());
se (CurrentHour!=hhh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}

mas tenho incontáveis pedidos abertos

int hh = 0;
deve ser definido antes do início() e init()
 
Pessoal, ajudem-me a encontrar um EA para o comércio manual no testador sobre a história. Há vários na base de código, preciso de um que tenha sido controlado arrastando a legenda no canto inferior esquerdo do nrafik. Muito simples, não consigo encontrar um. Treinamento histórico e testes de visualização. O comércio manual não é isso. Muito fácil conselheiro, você também poderia definir níveis onde os testes parassem.
 
demlin:

Olá a todos!

Por favor, diga-me o que isto significa:

Pedido de compra ...... falhou [Tempo limite de troca].

Estou especificamente interessado em que tipo de tempo de espera é.

https://www.mql5.com/ru/forum/112612
Esta é uma resposta de servidor expirada --- quer o negócio tenha sido aberto ou não. E não há garantia de que o comércio não tenha sido aberto.

Portanto, tenho que verificar se a ordem é aberta em um minuto e depois continuar as negociações.

 

rlx:


precisa ser definido antes de começar() e init()


int hh = 0;
int init()
{
return(0);
}
int start()
{
//

int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders"); }
int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent()));
if ((CurrentHour!=h)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}
//-------------------------------------------------
return(0);
}

int deinit()
{
return(0);
}

Eu fiz como você disse, sem efeito, acrescentei contagem de pedidos abertos, agora abre os pedidos logo após o fechamento

Trabalhei em torno dele através do OrderCloseTime() - parece funcionar agora

int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders");
}
int hh;
int CurrentHour;
int LastOrderCloseTime;
CurrentHour=TimeHour(TimeCurrent()));


OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
hh=TimeHour(OrderCloseTime());


if ((CurrentHour!=hhh)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
}

 
rlx:

https://www.mql5.com/ru/forum/112612
Este é o período de espera para que o servidor responda --- quer um acordo tenha sido aberto ou não. E não há garantia de que o negócio não tenha sido aberto.

Portanto, como recomendado pelos desenvolvedores, verifique após um minuto se um pedido foi aberto e só então prossiga.

Obrigado pelas respostas
 
Roger:

Não quero ser um chato, porém.

Explique-me como uma ordem será aberta se OrderTotal() for zero.

Obrigado.


Abaixo está a figura com parênteses que limitam o bloco de código que é executado sob a condição

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

As operações de OrderSend() não são afetadas por esta condição.

 

como obter um número de barra, no "futuro" :)

iBarShift() funciona bem para obter o número de barra do histórico, mas como você obteria o número de barra para este código se você mover a linha para a direita - além da barra zero?

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   Comment("Координата X = ",iBarShift(NULL,0,X),"\n",
           "Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}
 
IgorM:

como obter um número de barra, no "futuro" :)

iBarShift() funciona bem para obter o número de barra do histórico, mas como posso obter o número de barra deste código se eu mover a linha para a direita - além da barra zero?

Você pode obter uma compensação em relação ao Tempo[0]

shift = MathRound((Time[0] - X) / (Period()*60));
 
rlx:

Você pode obter uma compensação em relação ao Tempo[0]

Obrigado! Tudo está bem agora!

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   if(X<=Time[0])
         Comment("Координата X = ",iBarShift(NULL,0,X),"\n",  "Время = ",TimeToStr(X));
   else
         Comment("Координата X = ",MathRound((Time[0] - X) / (Period()*60)),"\n","Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}