Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 82
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você terá o último perdedor, o que fazer com ele e que parâmetros ajustar para si mesmo, acho que você vai descobrir
Obrigado, acho que consegui.
Como faço para que o lote volte ao seu valor original depois de ter lucro?
{
lot=0.1
}
Obrigado, acho que consegui.
Como faço para que o lote volte ao seu valor original depois de ter lucro?
{
lot=0.1
}
Eu tenho o seguinte esquema
se (OrderTotal()==0)
{
aberto com lote inicial
}
senão
...
ou seja, se não houver ordens, não será aberto com o lote antigo
É claro que é possível memorizar cada pedido, mas eles não nos dizem como fazer isso.Um contador deve ser iniciado e redefinido para seu valor inicial quando um determinado limite é atingido:
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Explique por que a função OrderProfit()<0 não funciona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
quero ver quantas paradas por dia da semana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
e aqui eu acho que é a mesma razão pela qual não funciona
Explique por que a função OrderProfit()<0 não funciona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
quero ver quantas paradas por dia da semana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
e aqui eu presumo que é a mesma razão pela qual não funciona
Porque DayOfWeek() devolve o número do pedido do dia da semana do último horário conhecido do servidor.
E você precisa do dia da semana da hora de fechamento do pedido: TimeDayOfWeek(OrderCloseTime());
Porque DayOfWeek() devolve o número do pedido do dia da semana do último horário conhecido do servidor.
E você precisa do dia da semana da hora de fechamento do pedido: TimeDayOfWeek(OrderCloseTime());
Mas o resultado é o mesmo, como se ignorandose(OrderProfit()<0) e houver um loop, as variáveis obtêm grandes valores.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
E quanto ao loop com muito? Eu o copiei incorretamente aqui, corrigi o sinalse(OrderProfit()>0&&OrderType()<2), mas ele não muda a essência, o loop funciona corretamente sem esta condição.
Mas o resultado é o mesmo, comose(OrderProfit()<0) fosse ignorado e houvesse um loop, as variáveis têm grandes valores.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
E sobre o loop com muito? copiei-o incorretamente aqui, corrigi o sinalse(OrderProfit()>0&&OrderType()<2), mas não muda a essência, o loop funciona corretamente sem esta condição.
Onde são declarados o dia 1 e o dia 2 ?
Onde são declarados o dia 1 e o dia 2 ?
Suspeito que estou selecionando o pedido incorretamente, ele não funciona(OrderProfit()<0), preciso ser mais específico sobre qual pedido eu preciso. Eu não sei por que ela salta uma ordem quando a última fechou em Take-Point e não há outras. Talvez, se eu quiser pesquisar através da história, o laço deva ser construído de forma diferente?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
A razão é que os Consultores Especialistas constroem laços com condições similares e trabalham conforme necessário, mas trabalham usandoOrderTotal().
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Isto não pode ser resolvido dentro de um único ciclo. Neste loop, você deve memorizar os tickers dos pedidos a serem apagados na matriz, no próximo loop, você deve apagá-los por tickers.
Além disso, você tem uma confusão com colchetes, você está trabalhando com pedidos fora do blocoOrderSelect{}, isto é incorreto.