As EA's devem ser codificadas para se recuperar. Se a energia falhar, o sistema operacional falhar, o terminal ou gráfico for fechado acidentalmente, no próximo tick, qualquer variável estática/global do ticket terá sido perdida. Você terá uma ordem aberta, mas não a conhece, portanto, as EA nunca tentarão fechá-la, rastrear SL, etc. Como você vai se recuperar? Use um loopOrderSelect para recuperar, ou armazenamento persistente (GV/arquivo) dos números de bilhetes necessários.
Olá, eu acrescentei o código da seguinte maneira.
//---------------------- Buy/Sell function (limit orders) int BuyCall( double BC) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET) == true) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } }
Continua recebendo os mesmos pedidos várias vezes a cada carrapato.
Além disso, se eu remover o sinal "!", então ele não aceita nenhuma negociação.
Por último, tenho que remover a verificação de buyticket & sellticket de minha função principal?
Obrigado.
if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true)
-
Reproduzir vídeoPor favor, edite seu post.
Para grandes quantidades de código, anexe-o.
- Você nunca escreveria se( (2+2 == 4) == verdadeiro), pois não? se(2+2 == 4) for suficiente. Portanto, não escreva if(bool == verdadeiro), apenas use if(bool) ou if(! bool). O código torna-se autodocumentado quando você usa nomes de variáveis significativas, como bool isLongEnabled. Long_Entry soa como um preço de gatilho ou um número de bilhete e "se entrada longa" é uma frase incompleta.
- Onde você verifica se o BuyTicket foi fechado? Selecionar por bilhete será sempre verdadeiro (dado um número de bilhete válido), o pedido poderá ser qualquer um dos pedidos pendentes, abertos, fechados ou excluídos.
- Você ignorou completamente minha sugestão de um loop OrderSelect.
Olá WHReder obrigado por sua resposta.
Sim, eu acrescentei esses no código SRC. Mas não apareceu quando eu editei.
Eu removi == termos verdadeiros, como você sugeriu.
Por favor, não me entenda mal, tenho um ponto fraco na compreensão deste loop de seleção de ordem. Eu não ignorei. Tentei adicioná-lo, mas é muito complexo, executando-o mostra 16 erros e 2 avisos. Nesse código, o que é MN.Count?
// extern int Magic.Number.Base = ... // int magic.number.max; // Export to OpenOrder/MySelect // string market.pair; // Export to OpenOrder/MySelect // int init(){ // market.pair = Symbol(); // magic.number.max = Magic.Number.Base + MN.COUNT - 1;
Sobre a verificação do bilhete de compra fechado. Eu não verifiquei porque, eu verifiquei se o preço atual está abaixo do preço de compra e depois o comércio de compra foi fechado. então abri ordem de venda.
Bid < BuyStopLoss
Abra a ordem de venda.
Eu arranjo o código um pouco assim... Mas mostrando 2 erros agora... "MySelect" & "MyOrdersTotal" só podem ser decodificados em âmbito global.
int BuyCall( double BC) { //-----------code bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES){ if(!OrderSelect(iWhat, eSelect, ePool) ) return (false); int mn = OrderMagicNumber(); if(mn < MNB1 ) return (false); if(mn > MNB2 ) return (false); if(OrderSymbol() != Pair ) return (false); if(ePool != MODE_HISTORY ) return (true); return(OrderType() <= OP_SELL); } int MyOrdersTotal(int op=-1, int ePool=MODE_TRADES){ #define OP_ALL -1 if(ePool == MODE_TRADES) iPos = OrdersTotal() - 1; else iPos = OrdersHistoryTotal() - 1; for(nOrders=0; iPos >= 0; iPos--) if( MySelect(iPos, SELECT_BY_POS, ePool)) if( op == OP_ALL || op == OrderType() ) nOrders++; return(nOrders); } if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } } return(BuyTicket); }
Você não pode declarar uma função dentro de outra função.
Então, como posso fazer isso? Tenho muitas condições a serem verificadas individualmente para abrir uma ordem de compra/venda.
É por isso que fiz uma função de compra/venda para tornar o código mais fácil.
É apenas a EA que está realizando tantos negócios. Não sei como impedir isso.
Você não pode declarar uma função dentro de outra função.
Então, como posso fazer isso? Tenho muitas condições a serem verificadas individualmente para abrir uma ordem de compra/venda.
É por isso que fiz uma função de compra/venda para tornar o código mais fácil.
É apenas a EA que está realizando tantos negócios. Não sei como impedir isso.
Primeiro de tudo, não tente declarar uma função dentro de outra função.
Eu não consigo entender o que você está tentando fazer olhando para o código que você postou. Portanto, não posso ajudá-los.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Oi, eu fiz um Ea, mas quando eu volto a testar, ele cria muitos pedidos pendentes em cada tick. Como parar isso. Só preciso de um pedido de cada vez, não preciso de sua cópia.
Se eu executar este EA em tabela horária com"somente preço aberto", então ele não cria cópia.
Além disso, minha EA tem a opção de inverter o comércio se o limite de compra falhar, então ela abre o comércio de venda. Por favor, avise-me também que eu o configurei adequadamente ou não. Qualquer ajuda será apreciada.
Obrigado por seu tempo.