for (int j = 0; j < OrdersTotal(); j ++)
{
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one
{ // Analyzing orders: if (OrderSymbol()==Symbol())continue; // Another security //--------------Exit criteria (Exit Buy) if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY; // Trigger for CloseBuy (more can be added)if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL; // Trigger for Closesell (more can be added)if (Order == SIGNAL_CLOSEBUY)
{
OrderClose()
para
for (int k = 0; k < OrdersTotal(); k ++)
{
OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
//--------------Exit criteria (Exit Buy) if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY; // Trigger for CloseBuy (more can be added)if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL; // Trigger for Closesell (more can be added)if (Order == SIGNAL_CLOSEBUY)
{
OrderClose(....)
e agora tudo funciona como esperado. Ainda que não entenda por que isso acontece. Porque eu realmente não entendo as linhas adicionais no segundo código. Mas obrigado a todos vocês!
e agora tudo funciona como esperado. Obrigado a todos vocês!
Provavelmente nem sempre funcionará . . ao fechar ordens abertas ou apagar ordens pendentes dentro de um loop você DEVE contar para baixo e não para cima . . você precisa mudar seu loop. E você precisa colocar o chack de volta para Symbol() . . . caso contrário o EA para EURUSD acabará potencialmente fechando ordens para GBPUSD . . . o que você precisava fazer era se livrar da continuação . . . ou fazer o == em !=
e agora tudo funciona como esperado. Ainda que não entenda por que isso acontece. Porque eu realmente não entendo as linhas adicionais no segundo código. Mas obrigado a todos vocês!
Seu segundo código é correto, mas um pouco engraçado. Abra o MetaEditor, a janela do navegador (Ctrl + D), a aba do dicionário e selecione MQL4 Reference > Standard Constants > Trade operations.
RaptorUK: Provavelmente nem sempre funcionará ... ao fechar ordens abertas ou apagar ordens pendentes dentro de um loop você DEVE contar para baixo e não para cima ... você precisa mudar seu loop. E você precisa colocar o chack de volta para Symbol() . . . caso contrário o EA para EURUSD acabará potencialmente fechando ordens para GBPUSD . . . o que você precisava fazer era se livrar do continue . . . ou fazer o == em !=
Só para que você esteja certo. O que você diz é que se eu modificar o primeiro código para:
for (int j = 0; j < OrdersTotal(); j --)
{
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one
{ // Analyzing orders: if (OrderSymbol()==Symbol()) // Another security
{
//--------------Exit criteria (Exit Buy) if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY; // Trigger for CloseBuy (more can be added)if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL; // Trigger for Closesell (more can be added)if (Order == SIGNAL_CLOSEBUY)
{
OrderClose(....)
então ele também deve funcionar?? Porque eu tentei isso e é só abrir novamente um pedido por par de moedas.
Ou se eu mudar o segundo código para (k++ para k--), também abre apenas uma operação por par de moedas.
for (int k = 0; k < OrdersTotal(); k --)
{
OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
Só para que você esteja certo. O que você diz é que se eu modificar o primeiro código para:
então ele também deve funcionar?? Porque eu tentei isso e é só abrir novamente um pedido por par de moedas.
Ou se eu mudar o segundo código para (k++ para k--), também abre apenas uma operação por par de moedas.
Estou falando do primeiro código, o loop que você está usando onde você fecha os pedidos ... deve diminuir . . caso contrário, você perderá as ordens. Vejo que você removeu a continuação e acrescentou { } chaves, muito bom :-)
Abrindo uma ordem por par de moedas ou uma ordem no total ?
Abrindo uma Ordem por par de moedas ou uma Ordem no total ?
Sim, no total, é claro. Ok, 2º código:
for (int j = 0; j < OrdersTotal(); j ++)
{
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one
{ // Analyzing orders: if (OrderSymbol()==Symbol())continue; // Another security
Quando estamos falando sobre o loop, acho que você está falando sério:
Esta linha abre apenas um pedido por par de moedas (como desejado!)
O laço está correto em relação a este problema agora? :
RaptorUK:
Provavelmente nem sempre funcionará . . ao fechar ordens abertas ou apagar ordens pendentes dentro de um loop você DEVE contar para baixo e não para cima . . você precisa mudar seu loop. E você precisa colocar de volta o chack para Symbol() . . caso contrário o EA para EURUSD acabará potencialmente fechando pedidos para GBPUSD . . o que você precisava fazer era se livrar do continue . . ou fazer o === em !=
Quando estamos falando sobre o loop, acho que você está falando sério:
Na verdade, eu o mudaria para algo assim:
Esta linha abre apenas um pedido por par de moedas (como desejado!)
O laço está correto em relação a este problema agora? :
Não, faça isto . . .
for (int j = OrdersTotal()-1 ; j >= 0 ; j --) // start at OrdersTotal() -1 , finish when j = 0
A primeira posição de ordem é 0, então se você tiver 5 ordens as posições são 0, 1, 2, 3, 4 . . . então a última é OrderTotal() - 1 . . . então para contar para baixo você começa em OrderTotal()-1 e termina em 0
A primeira posição de ordem é 0, portanto se você tiver 5 ordens as posições são 0, 1, 2, 3, 4 . . . então a última é OrderTotal() - 1 . . . então para contar para baixo você começa em OrderTotal()-1 e termina em 0
Eu mudei o mecanismo de fechamento de:
para
e agora tudo funciona como esperado. Ainda que não entenda por que isso acontece. Porque eu realmente não entendo as linhas adicionais no segundo código. Mas obrigado a todos vocês!
Eu mudo o mecanismo de fechamento de:
para
e agora tudo funciona como esperado. Obrigado a todos vocês!
Eu mudei o mecanismo de fechamento de:
para
e agora tudo funciona como esperado. Ainda que não entenda por que isso acontece. Porque eu realmente não entendo as linhas adicionais no segundo código. Mas obrigado a todos vocês!
Seu segundo código é correto, mas um pouco engraçado. Abra o MetaEditor, a janela do navegador (Ctrl + D), a aba do dicionário e selecione MQL4 Reference > Standard Constants > Trade operations.
Provavelmente nem sempre funcionará ... ao fechar ordens abertas ou apagar ordens pendentes dentro de um loop você DEVE contar para baixo e não para cima ... você precisa mudar seu loop. E você precisa colocar o chack de volta para Symbol() . . . caso contrário o EA para EURUSD acabará potencialmente fechando ordens para GBPUSD . . . o que você precisava fazer era se livrar do continue . . . ou fazer o == em !=
Só para que você esteja certo. O que você diz é que se eu modificar o primeiro código para:
então ele também deve funcionar?? Porque eu tentei isso e é só abrir novamente um pedido por par de moedas.
Ou se eu mudar o segundo código para (k++ para k--), também abre apenas uma operação por par de moedas.
Só para que você esteja certo. O que você diz é que se eu modificar o primeiro código para:
então ele também deve funcionar?? Porque eu tentei isso e é só abrir novamente um pedido por par de moedas.
Ou se eu mudar o segundo código para (k++ para k--), também abre apenas uma operação por par de moedas.
Estou falando do primeiro código, o loop que você está usando onde você fecha os pedidos ... deve diminuir . . caso contrário, você perderá as ordens. Vejo que você removeu a continuação e acrescentou { } chaves, muito bom :-)
Abrindo uma ordem por par de moedas ou uma ordem no total ?
Abrindo uma Ordem por par de moedas ou uma Ordem no total ?
Sim, no total, é claro. Ok, 2º código:
Quando estamos falando sobre o loop, acho que você está falando sério:
Na verdade, eu o mudaria para algo assim:
Esta linha abre apenas um pedido por par de moedas (como desejado!)
O laço está correto em relação a este problema agora? :
RaptorUK:
Provavelmente nem sempre funcionará . . ao fechar ordens abertas ou apagar ordens pendentes dentro de um loop você DEVE contar para baixo e não para cima . . você precisa mudar seu loop. E você precisa colocar de volta o chack para Symbol() . . caso contrário o EA para EURUSD acabará potencialmente fechando pedidos para GBPUSD . . o que você precisava fazer era se livrar do continue . . ou fazer o === em !=Sim, no total, é claro. Ok, 2º código:
Quando estamos falando sobre o loop, acho que você está falando sério:
Na verdade, eu o mudaria para algo assim:
Esta linha abre apenas um pedido por par de moedas (como desejado!)
O laço está correto em relação a este problema agora? :
Não, faça isto . . .
A primeira posição de ordem é 0, então se você tiver 5 ordens as posições são 0, 1, 2, 3, 4 . . . então a última é OrderTotal() - 1 . . . então para contar para baixo você começa em OrderTotal()-1 e termina em 0
Não, faça isso . . .
A primeira posição de ordem é 0, portanto se você tiver 5 ordens as posições são 0, 1, 2, 3, 4 . . . então a última é OrderTotal() - 1 . . . então para contar para baixo você começa em OrderTotal()-1 e termina em 0
Portanto, deveria ser assim:
porque você escreveu isto:
ou eu estou errado?
Portanto, deveria ser assim:
porque você escreveu isto:
ou eu estou errado?