int start()
{
if(IsNewCandle())
{
CheckForMaTrade();
if(UseCandleTrail)AdjustTrail();
}
if(OpenOrdersThisPair(Symbol())>0)
{
if(UseMoveToBreakEven)MoveToBreakEven();
if(UseTrailingStop)AdjustTrail();
if(Use_MA_Trail)MA_Trail();
CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
}
}
Será que isso funcionaria? Verificaria cada carrapato a partir daí? (CloseHalfOrder() )
Desculpe - eu deveria parar de fazer 101 perguntas antes de experimentar as coisas :P
Sim - isso funciona. Agora tenho-o funcionando onde - assim que o tick chega e a oferta é >= o preço OrderClose especificado :D
Belo grande passo na direção certa! Agora para colocar um grampo para impedir que isto feche constantemente a metade cada vez que o preço revisa o mesmo preço especificado na função OrderClose :)
(Livrei-me também desse irritante erro OrderModify 1!) Hmmm, não consigo pensar na lógica correta para que ele então ESPERE após o primeiro alvo (1:1) ter feito sua ordem de fechamento... Alguma idéia? O número do OrderTicket() é o mesmo... então não pode ser assim? Eu estou preso nessa parte agora :) depois de ter essa parte, ela está rachada praticamente :)
Cara, é tão gratificante quando se descobre isso também! Obviamente, graças também à sua contribuição!
A última parte em que estou preso é dizer ao loop para parar de reduzir pela metade o pedido aberto no preço de saída do OrderClose(), continuamente? Eu honestamente não consigo entender a lógica? Está no ponto com QUANDO e A QUE preço fechar parcialmente. Eu só preciso dizer a ele para parar UMA VEZ que ele reduziu a ordem pela metade uma vez?
O problema é que, uma vez que o OrderClose() tenha fechado pela metade na posição aberta, ele ainda será chamado novamente e novamente porque o "int start" está chamando "CloseHalfOrder()" toda vez que houver um "OP_BUY" aberto... Alguma idéia?
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(OrderType()==OP_BUY)
{
CloseHalfOrder();
}
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...
//+--------------------------------------------------------------------------------------------------+//| Close OP_BUY Half lots @ 1:1 Function |//+--------------------------------------------------------------------------------------------------+void CloseHalfOrder()
{
double minLot=MarketInfo(Symbol(),MODE_MINLOT);
//Print("The minimum lots are: ",DoubleToStr(minLot,Digits));double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
//Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
Print("The Lots to close is: ",DoubleToStr(half,Digits));
for(int c=OrdersTotal()-1; c>=0; c--)
{
if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
{
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ",OrderLots());
}
else
{
Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?continue;
}
double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
if(OrderMagicNumber()==MagicNumber)
if(OrderSymbol()==Symbol())
if(OrderLots()>minLot)
{
Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
int HalfCloseTicket = OrderTicket();
if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
{
Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
}
}
if(Close_Half_Order_Buy==True)
{
MoveToBreakEven(); // This is a void.
EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
}
}
}
Espero que você possa explicar a outra pessoa como fazer no momento em que você souber
101 perguntas... quem quer lê-las todas...
Pois (Livre-se também daquele erro irritante da OrderModify 1!)
isto acontece na maioria das vezes se você tentar modificar o comércio com a configuração que já tem
Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)
Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?
Obrigado pela dica em relação ao erro OrderModify 1 também :)
Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)
Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?
Obrigado pela dica em relação ao erro OrderModify 1 também :)
Por que não primeiro mover seu bilhete para alcançar o ponto de equilíbrio isto lhe é dito antes e depois fechar uma parte do comércio .... se OrderLots() >= .......
Por que não mudar primeiro o seu bilhete para o breakeven isto lhe é dito antes e depois fechar uma parte do negócio .... se OrderLots() >= .......
Por causa disso? Não importa se eu me mudo para o breakeven primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me movimente primeiro para quebrar o equilíbrio, então feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?
int start()
{
if(OrderType()==OP_BUY)
{
CloseHalfOrder();
}
}
Por causa disso? Não importa se eu me mudo para me vingar primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me mova primeiro para quebrar o equilíbrio, depois feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?
Você só se muda para BE e fecha metade se o SL ainda não estiver em BE
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Ah, sim - entendi! Acho que sei como fazer isso - de volta ao jogo agora :)
ATUALIZAR ABAIXO - funciona :)
Desculpe - eu deveria parar de fazer 101 perguntas antes de experimentar as coisas :P
Sim - isso funciona. Agora tenho-o funcionando onde - assim que o tick chega e a oferta é >= o preço OrderClose especificado :D
Belo grande passo na direção certa! Agora para colocar um grampo para impedir que isto feche constantemente a metade cada vez que o preço revisa o mesmo preço especificado na função OrderClose :)
(Livrei-me também desse irritante erro OrderModify 1!) Hmmm, não consigo pensar na lógica correta para que ele então ESPERE após o primeiro alvo (1:1) ter feito sua ordem de fechamento... Alguma idéia? O número do OrderTicket() é o mesmo... então não pode ser assim? Eu estou preso nessa parte agora :) depois de ter essa parte, ela está rachada praticamente :)
Cara, estou muito grato por sua ajuda!
Estou muito grato por sua ajuda!
que grande tema é
Fechamento de meio lote.
Espero que você possa explicar a outra pessoa como fazer no momento em que você souber
101 perguntas... quem quer lê-las todas...
Pois (Livre-se também daquele erro irritante da OrderModify 1!)
isso acontece na maioria das vezes se você tentar modificar o comércio com a configuração que já tem
Cara, é tão gratificante quando se descobre isso também! Obviamente, graças também à sua contribuição!
A última parte em que estou preso é dizer ao loop para parar de reduzir pela metade o pedido aberto no preço de saída do OrderClose(), continuamente? Eu honestamente não consigo entender a lógica? Está no ponto com QUANDO e A QUE preço fechar parcialmente. Eu só preciso dizer a ele para parar UMA VEZ que ele reduziu a ordem pela metade uma vez?
O problema é que, uma vez que o OrderClose() tenha fechado pela metade na posição aberta, ele ainda será chamado novamente e novamente porque o "int start" está chamando "CloseHalfOrder()" toda vez que houver um "OP_BUY" aberto... Alguma idéia?
inacreditável 1 2 3 4 5 6 7 8 9 10 11 12
que grande tema é
Fechamento de meio lote.
Espero que você possa explicar a outra pessoa como fazer no momento em que você souber
101 perguntas... quem quer lê-las todas...
Pois (Livre-se também daquele erro irritante da OrderModify 1!)
isto acontece na maioria das vezes se você tentar modificar o comércio com a configuração que já tem
Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)
Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?
Obrigado pela dica em relação ao erro OrderModify 1 também :)
Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)
Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?
Obrigado pela dica em relação ao erro OrderModify 1 também :)
Por que não primeiro mover seu bilhete para alcançar o ponto de equilíbrio isto lhe é dito antes e depois fechar uma parte do comércio .... se OrderLots() >= .......
Por que não mudar primeiro o seu bilhete para o breakeven isto lhe é dito antes e depois fechar uma parte do negócio .... se OrderLots() >= .......
Por causa disso? Não importa se eu me mudo para o breakeven primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me movimente primeiro para quebrar o equilíbrio, então feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?
Por causa disso? Não importa se eu me mudo para me vingar primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me mova primeiro para quebrar o equilíbrio, depois feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?