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
Sim, - Acho que sim! Obrigado, TheXpert!
Vou tentar!
Eu não sou um especialista. Tenho esta nota sobre esta função em minha pasta "ajuda", além de tudo "normal" (copiei-a aqui também - não me lembro qual ramo) -
E a função OrderCloseBy é usada SOMENTE para fechar 2 pedidos simultaneamente, nesse spread é salvo.
Devemos caminhar pelo terminal de forma programática, memorizar todos os números de pedidos abertos e suas características, selecionar o número do pedido principal, combiná-lo com o pedido desejado (a partir do disponível) e colar esse número.
// Isto é, como eu entendo, com esta função você só pode fechar duas posições contrárias, pré-selecionadas.
Isso é tudo o que há.
Sim, bem...
É por isso que é chamado assim.
Deixe-me reformular a questão se existe alguma diferença econômica nas duas possibilidades de inversão de posição que se seguem:
1) Fechar VENDA com 1 lote de volume usando a função OrderClose e depois abrir COMPRAR com 1 lote de volume
2) Enquanto a VENDA está aberta em 1 lote, primeiro abra COMPRAR em 2 lotes e depois feche a VENDA com a função OrderCloseBy, que também deixará uma posição de COMPRA aberta em 1 lote.
De acordo com o exemplo no livro de exercícios, um spread permanecerá na variante 2).
https://book.mql4.com/ru/trading/orderclose - aqui você pode ver como funciona a função OrderCloseBy(). Tentei fazer o mesmo na demonstração - tem realmente uma propagação menor. Mas ainda não funciona no Expert Advisor... Estou realmente confuso...
Você já esteve em dois fios com esta pergunta. Você é inquisitivo.
Não há soluções simples. Com o lançamento da MQL5, este problema desaparecerá completamente.
Posso sugerir alguns procedimentos que eu utilizo em meus EAs.
//Detectar o estado atual das ordens abertas:
encomendas sem validade()
{
int i;
BuyOrder = falso;
SellOrder = falso;
BuyLots = 0,0;
SellLots = 0,0;
para ( i=0; i < OrdensTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS);
se ( OrderSymbol() == Symbol())
{
se ( OrderType() == OP_BUY )
{
BuyOrder = verdadeiro;
LastBuyLots = OrderLots();
BuyLots += LastBuyLots; // soma das posições em aberto BuyLots
BuyTicket = OrderTicket();
}
se ( OrderType() == OP_SELL)
{
SellOrder = verdadeiro;
LastSellLots = OrderLots();
SellLots += LastSellLots; // soma das posições de venda em aberto
SellTicket = OrderTicket();
}
}
}
}
//Obrir (fechar) ordens:
Variante de comércio vazio( variante int )
{
switch( variante )
{
// se (Padrão < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variante = 1;
// sinal para vender, nenhuma ordem está aberta e não é a última hora na sexta-feira
// abrir uma ordem de venda
caso 1:
OpenSellOrder(Lots);
pausa;
// if (Padrão < 0 && BuyOrder && !SellOrder && !FridayLastHour) variante = 2;
// sinal para vender, há uma ordem de compra aberta, sem ordem de venda
// não é a última hora da sexta-feira - estamos voltando
caso 2:
OpenSellOrder(Lots + BuyLots);
pausa;
// se (Padrão < 0 && BuyOrder && !SellOrder && FridayLastHour) variante = 3;
// sinal para vender, há uma ordem de compra aberta, sem ordem de venda
// é a última hora da sexta-feira - feche o pedido de compra
caso 3:
CloseBuyOrders();
pausa;
// if (Padrão > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variante = 4;
// sinal para comprar, nenhum pedido está aberto e não é a última hora da sexta-feira
// ordem de compra em aberto
caso 4:
OpenBuyOrder(Lots);
pausa;
// if (Padrão > 0 && SellOrder && !BuyOrder && !FridayLastHour) variante = 5;
// sinal para comprar, há uma ordem de Venda em aberto, sem ordem de Compra
// não é a última hora da sexta-feira - estamos voltando
caso 5:
OpenBuyOrder(Lots + SellLots);
pausa;
// if (Padrão > 0 && SellOrder && !BuyOrder && FridayLastHour) variante = 6;
// sinal para comprar, há uma ordem de Venda em aberto, sem ordem de Compra
// é a última hora da sexta-feira - fechar a ordem de venda
caso 6:
FecharVendaOrdens();
pausa;
caso 7:
// if (SellOrder && BuyOrder) variant = 7;
// tem um pedido cruzado aberto
if (WaitBeforeTransaction(WaitSeconds) == 1) // pausa entre pedidos
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket);
else
OrderCloseBy( SellTicket, BuyTicket);
}
break
// em outras variantes não fazem nada
padrão:
pausa;
}
}
Espero que você consiga com as variáveis.
>> Boa sorte!